СОДЕРЖАНИЕ
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. Стандартные средства программирования последовательного порта

Рис. 36 Счетчик в режиме программного строба.
Режим 5. Аппаратно-запускаемый одновибратор. Работа канала в этом режиме аналогична работе в режиме 4 с той лишь разницей, что счетчик канала после загрузки начинает счет только по переднему фронту входного сигнала GATE (рис. 37). Кроме того, если во время счета на управляющем входе снова появится передний фронт сигнала, то счет будет начат заново. По достижении значения TC, выход становится низким на период одного импульса CLK.

Рис. 37. Счетчик в режиме аппаратного строба.
Таймеру соответствуют три регистра счетчика и один управляющий регистр (табл. 79).
Табл. 79. Регистры таймера.
|
Адрес |
Назначение |
|
40h |
Счетчик 0 (чтение/запись). |
|
41h |
Счетчик 1 (чтение/запись). |
|
42h |
Счетчик 2 (чтение/запись). |
|
43h |
Управляющий регистр. |
Формат управляющего регистра показан в табл. 80.
Табл. 80. Формат управляющего регистра.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
SC1 |
SC0 |
RW1 |
RW0 |
М2 |
M1 |
M0 |
BCD |
Старшие два разряда SC1 и SC0 позволяют выбрать счетчик, либо получить информацию по состоянию канала (режим SC1=1 и SC0=1 определен только для микросхемы 8254 и последующих версий; для 8253 этот режим является запрещенным) (табл. 81).
Табл. 81. Номер счетчика.
|
SС1 |
SС0 |
Значение |
|
0 |
0 |
Счетчик 0. |
|
0 |
1 |
Счетчик 1. |
|
1 |
0 |
Счетчик 2. |
|
1 |
1 |
Состояние канала. |
Разряды RW1RW0 определяют способ загрузки делителя через однобайтовый порт (табл. 82). Управляющее слово RW1=0 и RW0=0 используется для фиксации текущего содержимого регистров счетчика в буферном регистре. Поля M и BCD при этом игнорируются.
Табл. 82. Тип операции чтения-записи.
|
RW1 |
RW0 |
Значение |
|
0 |
0 |
Фиксировать текущее значение счетчика. |
|
0 |
1 |
Чтение/запись только LSB. |
|
1 |
0 |
Чтение/запись только MSB. |
|
1 |
1 |
Чтение/запись LSB сначала, затем MSB. |
Режим работы счетчика задается разрядами M2M1M0 (табл. 83).
Табл. 83. Выбор режима работы.
|
Режим |
М2 |
М1 |
М0 |
Значение |
|
0 |
0 |
0 |
0 |
Прерывание от таймера. |
|
1 |
0 |
0 |
1 |
Программируемый ждущий мультивибратор. |
|
2 |
x |
1 |
0 |
Программируемый генератор импульсов. |
|
3 |
x |
1 |
1 |
Генератор меандра. |
|
4 |
1 |
0 |
0 |
Программно-запускаемый одновибратор. |
|
5 |
1 |
0 |
1 |
Аппаратно-запускаемый одновибратор. |
Разряд BCD служит для задания системы счисления (двоичной или двоично-десятичной) (табл. 84). Диапазон значений в двоичной системе 0…65535, в двоично-десятичной – 0…9999.
Табл. 84. Выбор системы счисления.
|
S0 |
Значение |
|
0 |
Двоичная. |
|
1 |
Двоично-десятичная. |
В режиме SC1=1 и SC0=1 управляющий регистр изменяет свою структуру (табл. 85). Такой режим носит название «Read back command» и позволяет выполнить операцию чтения состояния каналов либо получить содержимое регистра счетчика для указанного канала. Можно выполнить эти операции для отдельных каналов, так и для всех одновременно, если установить соответствующие биты в 1 (табл. 86).
Табл. 85. Формат управляющего регистра.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
1 |
1 |
CNT |
STA |
C2 |
C1 |
C0 |
x |
Табл. 86. Коды выбора счетчика.
|
Счетчик |
C2 |
C1 |
C0 |
|
0 |
0 |
0 |
1 |
|
1 |
0 |
1 |
0 |
|
2 |
1 |
0 |
0 |
|
Все |
1 |
1 |
1 |
При CNT=0 и STA=1 доступно текущее значение счетчика. Для этого необходимо просто прочитать его содержимое. При CNT=1 и STA=0 доступен режим работы счетчика. В этом случае структура регистра счетчика изменится (табл. 87).
Табл. 87. Формат регистра счетчика.
|
Биты |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Значение |
OUT |
NC |
RW1 |
RW0 |
M2 |
M1 |
M0 |
BCD |
Формат состояния канала напоминает формат регистра управляющего слова, за исключением двух старших разрядов. Назначения разрядов M2M1M0 и BCD останется прежними. Разряд OUT определяет текущий уровень на выходе счетчика в момент выполнения команды. Разряд NC используется, в основном, в режимах 1 и 5 для определения, произошла ли загрузка делителя из регистра RD в регистр счетчика RCNT.