Машинка на ДУ управлении своими руками. Аппаратная реализация. UART. Передатчик и приёмник на PIC

На этом уроке мы с Вами портируем вариант аппаратной реализации передатчика и приёмника на основе модуля 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 во вложении.