Интерфейсы микропроцессорных систем. Воробьева Г.С - 8 стр.

UptoLike

Пример настройки UART в IBM PC.
Для того, чтобы задать скорость передачи 600 бод, необходимо:
1) задать базовый адрес например, первого com-порта;
2) поскольку адрес порта состоит из более, чем 8 разрядов,
необходимо использовать косвенную адресацию через регистр dx;
3) в старший бит регистра управления линией (3FBh) занести ‘1’;
4) из таблицы 8.3 выбрать значение делителя, соответствующее
скорости 600 бод. Это 0x00C0;
5) в регистре 3F9h занести старший байт делителя скорости обмена
(0x00h);
6) в регистр 3F8h занести младший байт делителя скорости обмена
(0xС0).
mov dx,3f8h
mov BaseAdr,dx ; сохраняем базовый адрес в
; переменной BaseAdr
add dx,3
mov al,10000000b
out dx,al
sub dx,2
mov al,0
out dx,al
dec dx
mov al,C0h
out dx,al
3FDh (Регистр статуса линии)
-
D6
D5
D4
D3
D2
D1
D0
бит 7: всегда 0
бит 6: Tx Shift Register Empty флаг индикации содержимого регистра сдвига
1 = регистр сдвига готов к приему очередного слова для передачи
0 = в данный момент передаются данные
бит 5: Transmitter Holding Register Empty флаг готовности передатчика
1 = Регистр передачи пуст, и его можно загружать следующим символом
0 = Идет передача битов из регистра передачи в регистр сдвига
бит 4: Break Interrupt
флаг
прерывания передачи:
1 = Интервал времени превысил время передачи 1 символа
0 = Данные вводятся во время, не превышающее время передачи 1 символа
бит 3: Framing Errorфлаг ошибки фрейма
1 = если была ошибка синхронизации (не принята правильная стоповая посылка)
0 = ошибки фрейма не было
бит 2: Parity Errorфлаг ошибки четности
1 = произошла ошибка при проверке принятого фрейма на четность/нечетность
0 = ошибки четности не было
бит 1: Overrun Errorфлаг ошибки переполнения
1 = предыдущие данные не были считаны из приемного регистра до прихода новых
данных (старые данные теряются)
0 = ошибки переполнения не было
бит 0: Data Readyфлаг готовности данных
1 = если данные получены и готовы для чтения
0 = данные по UART не получены
Сбрасывается при чтении принятых данных процессором
Пример программы приема байта по UART
Try: mov dx,BaseAdr
add dx,5
in al,dx ; считаем регистр состояния линии
test al,00000001b ; проверка: передался ли предыдущий символ?
jz Try
sub dx,5
in al,dx ; инициируем передачу, записав символ в регистр данных
Пример программы отсылки байта 35h по UART
; Отсылка байта 35h по RS232
Send: mov dx,BaseAdr
add dx,5
in al,dx ; считаем регистр состояния линии
test al,00100000b ; проверка: передался ли предыдущий символ?
jz Send
mov al, 35h ; запись байта 35h в аккумулятор
sub dx,5
out dx,al ; инициируем передачу, записав символ в регистр данных
При использовании интерфейса RS-232C задача сопряжения объекта
обмена информации с компьютером обычно формулируется следующим
образом: требуется обеспечить связь с удаленным (расположенным на
отдалении, а не «стертым») контроллером, обеспечивающим
технологическую или лабораторную установку.
Чаще всего такой контроллер представляет собой микроЭВМ,
имеющую собственную магистраль и набор внешних устройств,
осуществляющих передачу входных сигналов с разнообразных датчиков
(если таковые имеются) и выдачу управляющих воздействий на органы
управления (если они присутствуют). Для нас существенным моментом