- Функции для работы с 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
