Интерфейсы периферийных устройств. Параллельный интерфейс ввода-вывода. Принципы построения параллельных портов ввода/вывода микроконтроллеров, страница 2

Преобразование параллельного кода в последовательный и обратно, контроль ошибок, синхронизацию процесса осуществляет устройство, которое называется UART (Universal Asunehronous Resiver-Transmitter – универсальный асинхронный приемо-передатчик).

В UART существуют регистры специальных функций:

1.  SBUF – регистр, в который записывается параллельный код передаваемого или принимаемого байта. Наличие регистра позволяет совместить операцию чтения ранее принятого байта с приемом очередного.

Прием и выдача информации начинается с момента появления кода в SBUF.

2. SCON – регистр управления приемопередатчиком (8-разрядный регистр с адресом ячейки 0x98).

SM0    SM1    SM2    REN    TB8     RB8     TI         RI

 
       старший                         младший разряд                                                                                       разряд

Пример

sfr SCON=0x98

sfr – регистр специального назначения

TI – флаг окончания передачи. Когда передача закончилась, аппаратно устанавливается 1. Прежде чем передавать байт, флаг сбрасывается в 0.

RI – флаг окончания приема. Устанавливается аппаратно в 1 при приеме байта.

SM0 SM1 – режим работы UART

0       0     - режим 0

0       1     - режим1

1       0     - режим 2

1       1     - режим 3

РЕЖИМ 0 – синхронный режим. Каждый передаваемый байт сопровождается импульсом синхронизации. Синхроимпульсы формируются на ножке TxD, передача и прием – на RxD. Такой режим называется синхронный, т. е. передача производится только в одну сторону.

Если нужно передать байт, то в TI записывается 0. Скорость передачи

1 Мбит/с при частоте кварца 12 МГц.      

Режим 0 используется для обмена информацией с аппаратурой.

Схема передачи байта

D – вход данных (всегда записывается в младший разряд)

C – сдвиг

Tx – синхроимпульс, который сопровождает каждый бит передаваемой информации

Временная диаграмма работы 0-го режима

Схема приема байта

Фрагмент программы ввода 1 байта


SETB        P1.1  // установить бит P1.1 в 1

CLR          P1.1  // очистить P1.1 

CLR          RI     // обнуляем RI

MOV        A, SBUF   // считываем в A

Далее RI автоматически устанавливается в 1.

РЕЖИМ 1  - асинхронный дуплексный, 8-битовый.

  • Дуплексный – можно одновременно передавать и принимать информацию. Прием осуществляется ножкой RxD,передача – ножкой TxD.
  • Асинхронный – без импульсов синхронизации. При этом необходимо точно задавать скорость обмена при помощи таймера T1.

Стандартные скорости – 1200; 2400; 4800; 9600 бит/с (бод).

Этот режим используется для работы с COM-портом ПК.

Передается 10 бит:

Стартовый бит (логический “0”)

8 бит данных

Стоповый бит (логическая “1”)

При приеме стоповый бит копируется в бит RB8 регистра SCON.

Временная диаграмма передачи информации по последовательному порту

Модуль UART                           

Данные записываются в буферный регистр. По сигналу TI информация переписывается в сдвиговый буфер и идет передача бита. Генератор скорости обмена представляет собой внутренний делитель тактовой частоты процессора Fint, которая плавно меняется программным путем. Для изменения частоты Fint программным путем используется внутренний таймер T1.

Простейшая программа для работы с UART

#include <ADuC812.h>

void main(void){

         TH1=0XFD; // в TH1 загрузка FD, т.е. скорость =9600 при условии       SMOD=0

TMOD=0x20; // 1 режим таймера

TCON=0x40; // запуск таймера 1

SCON=0x50; // 8-битный режим. UART разрешает прием

EA=0; // запрет прерывания

         TI=0; // обнуление флага завершения посылки. После этого можно               записывать код в буфер sbuf

SBUF=’s’; // передача символа s      

            while(!TI); // пока TI не равен 1 идет цикл до тех пор, пока  TI не станет = 1(пока не завершится передача)

TI=0;         SBUF=’D’;                while(!TI);

TI=0;         SBUF=’1’;                  while(!TI);

while(1);

}

Структура Т1 (таймер счетчик).