- Функции для работы с USART
Функции для работы с USART
Рассмотрим функции для работы с аппаратной реализацией. Аппаратный модуль USART имеется во многих представителях семейства PIC. Библиотека mikroC для работы с аппаратной реализацией IJSART предоставляет возможности удобной работы в асинхронном полнодуплексном режиме.
Рис. 25. Схема аппаратного подключения RS-232
Можно легко организовать связь с другими устройствами, поддерживающими протокол RS-232, например, с персональным компьютером (см. рис. 25). Для этого потребуется микроконтроллер с аппаратным USART, например PIC16F877. В программе можно использовать все функции, приведённые ниже.
Для работы с USART используются библиотечные функции Usart_Init, Usart_Data_Ready, Usart_Read и Usart_Write. Описание этих функций представлено в таблицах 14-17 соответственно.
Таблица 14. Описание функции Usart_Init
Прототип | void Usart_lnit(const unsigned long baud_rate) |
Возвращаемое значение | Нет |
Описание | Инициализация аппаратуры модуля USART требуемой скоростью обмена. Для подробной информации о разрешённых скоростях обмена при заданных частотах тактового генератора следует обратиться к документации на микроконтроллер. Если будет задана запрещённая скорость обмена, компилятор сообщит об ошибке
|
Требования | Необходим микроконтроллер с аппаратным USART. Функция Usartjnit должна быть вызвана перед использованием всех остальных функций библиотеки работы с USART |
Пример | Инициализация аппаратуры USART и установка скорости обмена 2400 bps: Usart_lnit(2400) |
Таблица 15. Описание функции Usart_Data_Ready
Прототип | unsigned short Usart_Data_Ready(void) |
Возвращаемое значение | Функция возвращает значение 1, если есть принятые данные, и 0 в противном случае |
Описание | Эту функцию следует использовать для проверки наличия данных для чтения в приёмном регистре |
Требования | Аппаратный модуль USART должен быть предварительно проинициализирован и задана скорость обмена с помощью функции Usart_Init |
Пример | Если данные готовы, прочитать их: int receive; if (Usart_Data_Ready()) receive = Usart_Read; |
Таблица 16. Описание функции Usart_Read
Прототип | unsigned short Usart_Read(void) |
Возвращаемое значение | Возвращает значение принятого байта. Если байт не принят, возвращает О |
Описание | Функция считывает принятые данные из приёмного регистра аппаратуры USART. Для проверки наличия принятых данных следует использовать функцию Usart_Data_Ready |
Требования | Аппаратный модуль USART должен быть предварительно проинициализирован, а скорость обмена задана с помощью функции Usartjnit |
Пример | Если данные готовы, прочитать их: int receive; if (Usart_Data_Ready()) receive = Usart_Read(); |
Таблица 17. Описание функции Usart_Write
Прототип | void Usart_Write(unsigned short data) |
Возвращаемое значение | Нет |
Описание | Функция передаёт байт (data) no USART |
Требования | Аппаратный модуль USART должен быть предварительно проинициализирован, а скорость обмена задана с помощью функции Usartjnit |
Пример | int chunk = 0x1E; Usart_Write(chunk); /* послать chunk no USART */ |
Микроконтроллеры, имеющие по два модуля USART, например P18F8520, требуют задать модуль, который будет использоваться. Для этого достаточно просто приписать цифру 1 или 2 к названию функции. Например, Usart_Write2(). Также, с целью обратной совместимости с предыдущими версиями компилятора и облегчения управления кодами, МК с несколькими модулями USART имеют Usart-библиотеку, которая идентична Usart 1 (т.е. можно использовать Usart_Init() вместо Usart l_Init() для операций с USART).
Следующий пример программы демонстрирует простой обмен данными по USART. Когда МК принимает данные, он немедленно отправляет те же данные обратно. Если подключить PIC к ПК (см. рис. 25), можно проверить обмен с терминалом для связи по RS-232. В среде разработки терминал запускается из выпадающего меню командой Tools -> Terminal.
void main() {
// Инициализация модуля USART (8 бит, скорость обмена 2400 бод, без к/ч)
Usart_Init( 2400 ) ;
do {
if (Usart_Data_Ready()) { // Если данные приняты
i = Usart_Read(); // Прочитать, что принято
Usart_Write(i); //и отправить назад по USART
}
} while ( 1 ) ;
} // end