СОДЕРЖАНИЕ
2. Программная модель микропроцессора 8086
2.4. Способы задания операндов команды
3. Основные понятия языка ассемблера
3.2. Директивы определения данных
4. Сегментированная модель памяти
4.3. Общая структура программы
5.1. Соглашению по описанию команд
5.6. Команды организации циклов
5.11. Команды управления микропроцессором
7. Разработка одномодульной программы
7.1. Трансляция и компоновка программы
8. Разработка многомодульных программ
8.1. Принципы разработки модулей
8.2. Расширенное применение директивы сегментации
Программирование микропроцессорных устройств
10. Программирование системного таймера
10.1. Описание таймера-счетчика 8254
10.3. Структура регистров таймера
11. Программирование контроллера прерываний
11.1. Механизм обработки прерываний
11.4. Контроллер прерываний 8259
11.5. Идентификация прерываний
11.6. Прерывания bios и ms-dos
12. Программирование параллельного порта
12.2. Работа с параллельным портом на низком уровне
12.3. Стандартные средства работы с параллельным портом
13. Программирование последовательного порта
13.1. Основы последовательной передачи данных
13.2. Последовательный интерфейс rs-232c
13.3. Универсальный асинхронный приемо-передатчик 8250
13.4. Порты асинхронного адаптера
13.5. Стандартные средства программирования последовательного порта
Разряд DTR (готовность терминала, Data Terminal Ready) определяет сигнал на выходе DTR микросхемы 8250. При DTR = 0 на выходе устанавливается 1 и наоборот.
Разряд RTS (запрос передатчика, Request Terminal Station) определяет сигнал на выходе RTS микросхемы 8250. При RTS = 0 на выходе устанавливается 1 и наоборот.
Разряды OUT1 и OUT2 являются выходами общего назначения. При 0 на выходе устанавливается 1 и наоборот.
Разряд LOOP (петлевая конфигурация) обеспечивает выполнение процедуры самопроверки. При установлении 1 происходит следующее (табл. 122):
последовательный вход SIN отсоединяется от внешнего соединения и внутренне подключается к последовательному выходу SOUT;
выход сдвигового регистра передатчика подключается к входу сдвигового регистра приемника;
старшие 4 разряда регистра состояния отключается от внешних соединений и внутренне связывается с младшими 4 разрядами регистра управления.
Табл. 122. Схема петлевого подключения.
|
MCR |
MSR |
|
OUT2 |
DCD |
|
OUT1 |
RI |
|
DTR |
DSR |
|
RTS |
CTS |
В результате, любые отправляемые данные будут сразу приниматься. Сравнивая полученные данные с отправленными, можно проверить функциональные узлы адаптера. В этом режиме можно также провести проверку системы прерываний. Для этого необходимо записать 1 в любой из значимых разрядов регистра разрешения прерывания IER.
Операционная система MS-DOS не содержит серьезной поддержки асинхронного адаптера. Функции прерывания INT 21h с номерами 3 и 4 предназначены для чтения и записи байтов через адаптер. Обе функции работают с COM1 и COM2. Функция 3 получает в регистр AL символ, принятый от адаптера, а функция 4 передает в адаптер символ, записанный в регистр DL.
Основной недостаток функций MS-DOS заключается в отсутствии их функциональной полноты. Например, используя только эти функции, нельзя проанализировать ошибочные ситуации и изменить режим работы адаптера.
Функции BIOS, определенные за прерыванием 14h, более разнообразны. Параметры вызова основных функций приведены в табл. 123. Байты состояния линии и модема, возвращаемые обработчиком INT 14h, полностью соответствуют регистру состояния линии и регистру состояния модема адаптера порта.
Табл. 123. Основные функции INT 14h.
|
Функция |
Регистры при вызове |
Регистры при возврате |
|
Инициализация порта |
AH = 00h AL = параметры инициализации порта DX = номер порта (0-3) |
AH = состояние линии AL = состояние модема |
|
Передать символ |
AH = 01h AL = код символа DX = номер порта (0-3) |
AH – бит 7 сброшен, если успешное выполнение и установлен в случае ошибки. Биты 6-0 – состояние порта |
|
Принять символ |
AH = 02h DX = номер порта (0-3) |
AH = состояние линии AL = принятый символ, если бит 7 сброшен |
|
Состояние порта |
AH = 03h DX = номер порта (0-3) |
AH = состояние линии AL = состояние модема |
Параметры инициализации порта приведены в табл. 124-127. Как видно, функциям BIOS также присущи недостатки: нельзя установить скорость передачи более 9600 бод, нет возможности узнать текущий режим работы адаптера, отсутствует поддержка модема. Поэтому для программирования асинхронного адаптера рекомендуется использовать порты ввода-вывода и работать на низком уровне.
Табл. 124. Формат байта инициализации порта.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
Скорость передачи |
Контроль четности |
Число стоп-битов |
Размер слова |
||||
|
Табл. 125. Размер слова.
|
Табл. 126. Коды четности.
|
Табл. 127. Коды скорости.
|
Пример 1. Используя ассемблер, определить базовый адрес порта COM1 и инициализировать его следующими параметрами: скорость обмена 9600 Кбод, 1 стоповый бит, четный тип четности, размер информационного слова 8 бит.
Решение. Для инициализации COM-порта должны быть использованы регистр делителя скорости обмена, регистр контроля линии и регистр разрешения прерывания. Реализация алгоритма инициализации может быть следующим.
MOVAX, 40h
MOVES,AX; регистрESуказывает на область данныхBIOS
MOVDX,ES:[00] ; читаем базовый адрес порта COM1
ADDDX, 3 ; адрес регистра управления
MOVAL, 80h ; установка бита DLAB для доступа регистру делителя
OUTDX,AL
DECDX
DECDX; адрес старшего байта делителя скорости
MOV AL, 12h
OUT DX, AL
DECDX; адрес младшего байта делителя скорости
MOVAL, 0Ch ; установка младшего байта делителя
OUTDX,AL
ADDDX, 3 ; адрес регистра управления
MOVAL, 00011011b ; DLAB=0, четность, 1 стоп-бит, 8 бит/слово
OUTDX,AL
DECDX
DECDX; адрес регистра разрешения прерываний
MOVAL, 00h ; прерывания запрещены
OUTDX,AL
Пример 2. На языке ассемблера разработать подпрограммы передачи и приема данных через порт COM1. Коммуникационный порт считать уже инициализированным, а базовый адрес порта хранящимся в переменной COM1.
Решение. При передаче данных программа полностью контролирует состав данных и скорость, с которой они должны передаваться. Когда байт данных помещается в регистр хранения передатчика, оттуда он автоматически выводится в последовательный канал через регистр сдвига передатчика. Бит 5 регистра статуса линии показывает, свободен ли регистр хранения передатчика для приема данных.
Регистр статуса постоянно проверяется до тех пор, пока бит 5 не станет равным 1. После этого в регистр хранения передатчика может быть передан очередной байт данных. В процессе передачи бит 5 равен 0, и когда он опять станет равным 1, в регистр хранения передатчика может быть передан следующий символ.
; чтение байта с ожиданием без использования прерываний
MOVDX, COM1 ; помещаем базовый адрес порта в регистр DX
ADDDX, 5 ; адрес регистра состояния