![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример программирования контроллера SCI
Приведенный ниже программный фрагмент SCI.c иллюстрирует технику программного обслуживания асинхронного последовательного интерфейса МК семейства 68HC12. Отладочная плата MC68HC912B32EVB предоставляет возможность использования только одного контроллера SCI с номером 0. Поэтому в именах регистров специальных функций символ «x» будет заменен нами на символ «0». Ниже перечислены биты и регистры управления, которые используются в данном примере: • SC0BDH: SC0BDL — регистры скорости обмена контроллера SCI. Записанное в него двоичное число определяет скорость передачи данных и скорость приема данных, которые для одного контроллера в соответствии с его принципом действия могут быть только равными; • SC0CR1 — первый регистр управления контроллера SCI. Используется для выбора формата 8-ми или 9-ти разрядного представления слова в кадре обмена данными (бит M), для выбора режима работы с паритетом или без него (бит PE), для назначения четной или нечетной логики формирования паритета (бит PT); • SC0CR2 — второй регистр управления контроллера SCI. Его биты разрешают работу передатчика (бит TE) и приемника (бит RE); • SC0DRL — регистр данных контроллера SPI, младший байт. Используется для обмена данными в последовательном коде в 8-разрядном формате; • SC0SR1 — первый регистр состояния контроллера SCI. Этот регистр содержит флаг готовности буфера передатчика к приему новых данных TDRE и флаг завершения приема очередного слова в буфер приемника RDRF. В нашем примере задействован только передатчик контроллера SCI. Он будет непрерывно посылать по линии последовательной связи TxD (вывод PORTS0) код символа «S». Прерывания от контролера SCI в данном примере не используются. Контроль за состоянием флага TDRE ведется методом полинга. /*-------------------------------------------------------------------*/ /* filename: SCI.c */ /* МAIN PROGRAМ: Эта программа реализует непрерывную посылку кода */ /* символа " S" с скоростью 9600 бод в 8-разрядном формате (кадр 10 бит)*/ /* с битом паритета */ /*-------------------------------------------------------------------*/ /*подключаемые файлы*/ #include < 912b32.h>
/*используемые функции*/ void sci_init(void); void sci_trans(void);
void main(void) { sci_init(); /*инициализация модуля SCI*/ while(1) { sci_trans(); /*передавать данные непрерывно*/ } }
/*-------------------------------------------------------*/ /* Функция sci_init производит инициализацию модуля SCI. */ /*-------------------------------------------------------*/ void sci_init(void) { unsigned char clear; SC0BDL = 0x34; /*установить скорость 9600 бод*/ SC0BDH = 0x00; SC0CR1 = 0х04; /*10-разрядный формат кадра 8 бит данных, с*/ /*контролем паритета, логика паритета нечетная */ clear = SC0SR1; /*операция для сброса флага TDRE*/ /*флаг сбрасывается в два действия*/ /*сначала читать регистр SC0SR1*/ /*затем записать в регистр SC0DRL*/ }
/*-------------------------------------------------------------------*/ /* Функция sci_trans осуществляет непрерывную пересылку одного байта */ /*-------------------------------------------------------------------*/ void sci_trans(void) { SC0CR2 = 0x08; /*разрешить работу передатчика*/ SC0DRL = 's'; /*загрузить в буфер передатчика код символа " S" */ while (SC0SR1! = 0x80) /*ожидать установления бита TDRE) { ; } } /*-------------------------------------------------------------------*/ Если соединить два микропроцессорных контроллера по последовательному интерфейсу так, что выход TxD первого МК будет соединен со входом RxD второго МК и наоборот, то можно будет организовать двусторонний обмен информацией. Именно эту задачу Вам предстоит решить в домашнем задании №11, полный текст которого Вы найдете в конце главы.
|