Преобразование параллельного кода в последовательный и обратно, контроль ошибок, синхронизацию процесса осуществляет устройство, которое называется UART (Universal Asunehronous Resiver-Transmitter – универсальный асинхронный приемо-передатчик).
В UART существуют регистры специальных функций:
1. SBUF – регистр, в который записывается параллельный код передаваемого или принимаемого байта. Наличие регистра позволяет совместить операцию чтения ранее принятого байта с приемом очередного.
Прием и выдача информации начинается с момента появления кода в SBUF.
2. SCON – регистр управления приемопередатчиком (8-разрядный регистр с адресом ячейки 0x98).
|
Пример
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-битовый.
Стандартные скорости – 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 (таймер счетчик).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.