СОДЕРЖАНИЕ
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. Стандартные средства программирования последовательного порта
Разряд ERDAI разрешает прерывание по готовности принимаемых данных. Прерывание возникает при передаче принятого символа из сдвигающего регистра приемника RSR в буферный регистр RBR.
Табл. 112. Формат регистра разрешения прерывания.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
0 |
0 |
0 |
0 |
EMSI |
ERLSI |
ETHREI |
ERDAI |
Разряд ETHREI разрешает прерывание по готовности регистра хранения передатчика THR. Прерывание возникает при передаче символа их регистра THR в сдвигающий регистр TSR.
Разряд ERLSI разрешает прерывание по изменению регистра состояния линии LSR. Прерывание возникает при установке флагов (одного или всех сразу) OE, PE, FE или BI в 1. Последующий анализ регистра LSR позволит определить причину прерывания.
Разряд EMSI разрешает прерывание по состоянию модема. Прерывание возникает при установке одного или всех сразу флагов DCTS, DDSR, TERI или DDCD регистра состояния модема MSR в 1. Последующий анализ регистра MSR позволит определить причину прерывания.
Когда происходит одно из перечисленных событий, в контроллере прерываний инициируется аппаратное прерывание IRQ3 для порта СОМ2 и IRQ4 для порта COM2. Процедура обработки прерываний передает управление подпрограмме, на которую указывает соответствующий вектор прерывания. Поскольку прерывание аппаратное, оно может быть маскировано.
Одновременно возможно любое число типов прерывания. При одновременном поступлении двух или более прерываний, они обрабатываются в соответствии с их приоритетом (табл. 113). Если разрешен более чем один тип прерывания, процедура обработки должна сама определять тип с помощью регистра идентификации.
Табл. 113. Приоритеты прерываний.
|
Приоритет |
Описание |
|
1 |
Состояние линии приемника. |
|
2 |
Готовность принимаемых данных. |
|
3 |
Готовность регистра хранения передатчика. |
|
4 |
Состояние модема. |
Регистр идентификации прерывания IIR (Interrupt Identification Register) хранит информацию о прерывании с наивысшим приоритетом (табл. 114). Разряд INP сообщает об отложенных прерываниях. Если таковых нет, флаг равен 1. При наличии нескольких прерываний, требующих обработки, флаг равен 0 и флаги IID0 и IID1 кодируют прерывание с наивысшим приоритетом. Разряды IID0 и IID1 идентифицируют прерывание.
Табл. 114. Формат регистра идентификации прерывания.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
0 |
0 |
0 |
0 |
0 |
IID1 |
IID0 |
INP |
Типы прерываний, их приоритеты и действия для сброса прерывания перечислены в табл. 115. Таким образом, при одновременном появлении нескольких прерываний бит 0 регистра IIR будет установлен в 0. Если такая ситуация имеет место, перед завершением обработки прерывания следует снова прочитать регистр IIR и обработать следующее прерывание. Так следует поступать до тех пор, пока бит 0 регистра IIR не станет равным 1.
Табл. 115. Кодирование типов прерываний.
|
Регистр IIR |
Причина прерывания |
Действия для сброса |
||
|
IID1 |
IID0 |
INP |
||
|
0 |
0 |
1 |
– |
– |
|
1 |
1 |
0 |
Ошибка OE,PE или FE, сигнал BREAK. |
Считать содержимое LSR. |
|
1 |
0 |
0 |
Готовность принимаемых данных. |
Считать символ из RBR. |
|
0 |
1 |
0 |
Регистр THR пуст. |
Считать данные из IIR или записать данные в THR. |
|
0 |
0 |
0 |
Сигналы CTS,DSR,RI или DCD изменились с момента последнего считывания из MSR. |
Считать данные из MSR. |
Регистры делителя скорости передачи. Микросхема 8250 использует программируемый генератор скорости передачи, который использует 16-разрядный делитель частоты внешнего опорного сигнала. Типичной тактовой частотой внешнего опорного сигнала является 1.8432 МГц. Формула вычисления делителя скорости передачи данных имеет вид:
,
где
–
частота внешнего опорного сигнала в
герцах.
Делитель скорости записывается в два байта. Формат регистров делителей приведен в табл. 116 и 117. Для передачи делителя в регистры флаг DLAB регистра управления линией LCR должен быть установлен в 1, в противном случае по этим двум адресам значения будут адресованы в регистры THR и IER. Регистры скорости обмена всегда следует устанавливать первыми, т.к. они единственные, которые требуют установки бита DLAB регистре контроля линии LCR. После этого необходимо сбросить бит DLAB в 0.
Табл. 116. Младший значащий разряд делителя.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Табл. 117. Старший значащий разряд делителя.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
Старший байт делителя передается по адресу 3F9H (или 2F9H), младший – по адресу 3F8H (или 2F8H). Зависимость скорости передачи данных от некоторых значений делителя частоты представлена в табл. 118. Первый столбец делителя содержит старший значащий байт MSB, второй – младший значащий байт LSB.
Табл. 118. Скорость передачи данных.
|
Скорость передачи, Бод |
Значение делителя |
|
|
MSB |
LSB |
|
|
110 |
1047h |
417h |
|
300 |
384h |
180h |
|
1200 |
96h |
60h |
|
2400 |
48h |
30h |
|
9600 |
12h |
0Ch |
|
19200 |
6 |
6 |
|
38400 |
3 |
3 |
|
57600 |
2 |
2 |
|
115200 |
1 |
1 |
Регистр сверхоперативной памяти SCR (Scratch Register) является 8-разрядным и служит для временного хранения данных. Его содержимое не влияет на работу адаптера. Формат хранения данных регистра приведен в табл. 119. При использовании регистра в прикладных программах следует помнить, что его услугами могут пользоваться и другие программы, поэтому всегда необходимо сохранять в стеке его содержимое, а затем вновь восстанавливать.
Табл. 119. Формат регистра сверхоперативной памяти.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Регистр состояния модема MSR (Modem Status Register) позволяет узнать текущие значения сигналов состояния модема и фиксировать их изменения с момента последнего считывания данных из MSR (табл. 120). При считывании разряды регистра сбрасываются в ноль и их необходимо вручную восстанавливать.
Табл. 120. Формат регистра состояния модема.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
DCD |
RI |
DSR |
CTS |
DDCD |
TERI |
DDSR |
DCTS |
Разряд DCTS (сброс передатчика) позволяет отследить изменение входного сигнала CTS. Любое изменение приводит к установке разряда в 1.
Разряд DDSR (готовность модема) отслеживает уровень сигнала на входе DSR, что приводит к установке в 1.
Разряд TERI (задний фронт сигнала или «указатель вызовов») отслеживает изменение сигнала на входе RI, что приводит к установке в 1.
Разряд DDCD («указатель несущей» или «указатель сигнала на линии приема») отслеживает любое изменение сигнала на входе DCD и устанавливает 1.
Разряд CTS («сброс передатчика») указывает текущее значение сигнала на входе CTS.
Разряд DSR («готовность модема») указывает текущее значение сигнала на входе DSR.
Разряд RI («указатель вызовов») указывает текущее значение сигнала на входе RI.
Разряд DCD («указатель несущей») указывает текущее значение сигнала на входе DCD.
Регистр управления модемом MCR (Modem Control Register) выдает управляющие сигналы устройству сопряжения, например, модему (табл. 121).
Табл. 121. Формат регистра управления модемом.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
0 |
0 |
0 |
LOOP |
OUT2 |
OUT1 |
RTS |
DTR |