На этом уроке мы с Вами портируем вариант аппаратной реализации передатчика и приёмника на основе модуля UART микроконтроллера PIC.
Начнём с передатчика. Перед началом работы настроим UART. Для этого используем процедуру initUSART(). Установим скорость обмена 2400 бод, для этого запишем в регистр генератора скорости соответствующую константу из даташита…
SPBRG = 129; //Скорость 2400 при тактовой частоте 20кГц
…настроить линии порта RC7 и RC6 как выводы модуля UART…
SPEN = 1;
…включим передатчик…
TXEN = 1;
Передача осуществляется путём записи передаваемого байта в регистр буфера передатчика…
TXREG = txData;
…передача следующего байта может быть начата после окончания передачи предыдущего – очистки сдвигового регистра передатчика TSR. Контролируем это путём проверки флага TRMT…
while(TRMT == 0);
Для передачи байта я использую процедуру…
//Передача байта... USART_TransmitByte(unsigned char txData) { TXREG = txData; while(TRMT == 0); }
Для передачи строки…
//Передача строки... USART_TransmitString(unsigned char txData[]) { for (int i=0; i < strlen(txData);) { TXREG = txData[i]; while(TRMT == 0); i++; } }
В остальном логика программы не изменилась и пояснений не требует.
Теперь о приёмнике… Все настройки аналогичны, кроме того, что мы включаем приёмник вместо передатчика…
CREN = 1;
Приём осуществляется посредством проверки флага прерывания приёмника – буфер приёмника полон…
while(!RCIF);
Принятый байт хранится в регистре буфера приёмника RCREG. Обрабатываем принятый байт. Например, проверяем стартовые байты…
if (RCREG != 'A')continue;
…чтение из регистра буфера сбрасывает флаг RCIF.
В остальном логика программы не изменилась и пояснений не требует.
ПРОЕКТ С ИСХОДНЫМ КОДОМ И СИМУЛЯЦИЯ В PROTEUS во вложении.