ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.02.2025
Просмотров: 8913
Скачиваний: 4
СОДЕРЖАНИЕ
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. Стандартные средства программирования последовательного порта
Контрольные вопросы
Каковы этапы разработки многомодульной программы на языке ассемблера?
Опишите структуру модуля на языке ассемблера.
Перечислите параметры и назначение директивы SEGMENT.
Программирование микропроцессорных устройств
10. Программирование системного таймера
Управление периферийными устройствами требует от микропроцессорной системы точного задания временных интервалов между управляющими сигналами. Сделать это программно зачастую невозможно из-за сложного временного расписания обмена данными внутри системы. Поэтому такие задачи поручают программируемым таймерам-счетчикам. С помощью таймера можно формировать временные интервалы произвольной длительности, производить синхронизацию внешних устройств, организовывать счетчики событий, вести счет текущего времени.
Таймеры-счетчики на основе микросхем Intel 8253 и 8254 широко распространены, и их различные модификации можно встретить во многих цифровых устройствах. Например, любой IBM PC совместимый компьютер содержит такой таймер. Отечественными аналогами таймеров являются микросхемы К1810ВИ53 и К1810ВИ54.
10.1. Описание таймера-счетчика 8254
Структурная схема таймера приведена на рис. 30. Он состоит из трех независимых программируемых канала. На схеме показан только первый канал, остальные два являются идентичными. Блок логики чтения-записи управляет обменом данными между тремя счетчиками и шиной данных.
Рис. 30. Структурная схема таймера-счетчика 8253(4).
Назначение выводов микросхемы приведено в табл. 77.
Табл. 77. Назначение выводов.
|
Вывод |
Описание |
|
D0…D7 |
Двунаправленная шина данных. |
|
/WR |
Write (запись). По низкому уровню на входе микропроцессор записывает данные в таймер |
|
/RD |
Read (чтение). Низкий уровень на входе информирует таймер, что процессор запрашивает чтение состояния счетчика. |
|
/CS |
Chip Select (выбор микросхемы). Низкий уровень инициирует обмен между процессором и таймером. Не оказывает воздействия на работу счетчиков таймера |
|
A0, A1 |
Адресные входы. Позволяют выбрать один из трех счетчиков для операции чтения/записи состояния счетчиков. |
|
CLK0...CLK2 |
Тактовые входы каждого из трех счетчиков. |
|
GATE0…GATE2 |
Входы разрешения счетчиков. Уровень "1" - разрешение счета. |
|
OUT0…OUT2 |
Выходы счетчиков. |
Каждый канал включает схемы управления, синхронизации и регистры:
регистр счетчика, работающий на вычитание (16 разрядов);
регистр делителя (16 разрядов).
буферный регистр (16 разрядов);
регистр состояния канала (8 разрядов);
управляющий регистр (8 разрядов);
Каналы подключаются к внешним устройствам при помощи трех линий:
управляющего входа GATE;
входа тактовой частоты CLK;
выхода таймера OUT.
В управляющий регистр записывается слово, определяющее режим работы канала. Схема управления синхронизирует работу отдельных схем в соответствии с запрограммированным режимом работы. Схема синхронизации формирует серию внутренних импульсов с длительностью, определяемой внутренними времязадающими цепями, и периодом, равным периоду внешних тактовых импульсов.
Загрузка регистра счетчика выполняется путем помещения значения делителя в регистр делителя. Делитель помещается в два этапа: сначала записывается младший байт данных (Least Significant Byte, LSB), а затем старший байт данных (Most Significant Byte, MSB). В начале цикла работы канала константа счета из регистра хранения переписывается в счетчик, и затем по тактовым импульсам на входе CLK происходит декремент содержимого счетчика.
Буферный регистр (регистр задвижки) позволяет получить текущее значение регистра счетчика в любой момент времени. Низкий логический уровень сигнала на входе GATE отключает канал от входных импульсов CLK, а высокий – вновь подключает. Поэтому управляющий вход GATE можно использовать для синхронизации момента начала отсчета.
В микропроцессорных системах, построенных на основе архитектуре IBM PC, микросхема таймера принимает импульсы от генератора с опорной частотой 1.19 МГц. Программируемый коэффициент деления таймера может изменяться от 2 до 65535. Следовательно, диапазон возможных выходных частот находится в пределах от 18.2 Гц до 600 кГц.
Назначение каналов следующее:
канал 0 используется счетчиком времени суток;
канал 1 управляет обновлением памяти: выходная линия канала связана с микросхемой прямого доступа к памяти, и ее импульс заставляет контроллер DMA обновить содержимое памяти;
канал 2 связан с динамиком; он производит прямоугольные импульсы для генерации звука.
Выход первого из делителей используется для отсчета времени (канал 0), причем его выход, в свою очередь, связан с контроллером прерываний. Прерывание по таймеру возникает, когда внутренний двухбайтовый счетчик таймера обнулится. Первоначально он содержит значение 65535, т.е. установлен максимально возможный коэффициент делителя. При получении очередного импульса его значение уменьшается на 1. Поэтому период следования импульсов составляет 0,055 сек., а частота равна 18.2 Гц.
Для накопления количества импульсов таймера используется переменная BIOS (базовая система ввода-вывода), расположенная по адресу 0000:046Ch. Она представляет 4-байтный счетчик импульсов. Каждый импульс инициирует прерывание таймера BIOS номер 8, которое увеличивает на единицу значение переменной (рис. 31). Прерывание является аппаратным, поэтому оно обрабатывается всегда независимо от загруженности процессора.
Рис. 31. Изменение счетчика времени суток BIOS.
10.2. Режимы работы таймера
Рассмотрим существующие режимы работы таймера. Всего доступно шесть режимов. В табл. 78 приведено их краткое описание.
Табл. 78. Группы режимов работы таймера.
|
№ |
Тип режима |
Описание |
|
0,4 |
Однократное выполнение функций. |
По сигналу CLK содержимое регистра делителя записывается в регистр счетчика. Для повторения выполнения функции необходима новая загрузка регистра делителя. |
|
1,5 |
Работа с перезапуском. |
По фронту сигнала GATE регистр счетчика перезаписывается, даже если текущая операция не была завершена. |
|
2,3 |
Работа с автозагрузкой. |
Регистр счетчика автоматически перезаписывается после завершения счета. |
Режим 0. Прерывание по таймеру. После выбора данного режима выход OUT счетчика будет низким (рис. 32). Уровень будет оставаться таким после загрузки регистра счетчика значением CNTR, и когда он начнет отсчет. Когда значение счетчика достигнет нулевого значения TC, выход OUT станет высоким, и будет оставаться таким до момента задания нового режима работы или делителя.
После достижения TC значение счетчика продолжит уменьшаться. Перезапись регистра счетчика в течение его работы приведет к следующему: запись LSB остановит отсчет, а запись MSB приведет к отсчетам уже по новому значению.
Рис. 32. Счетчик выполняет останов по заданному значению.
Режим 1. Ждущий мультивибратор. Первоначально выход OUT высокий (рис. 33). По переднему фронту сигнала GATE выход станет низким, и будет оставаться таким до наступления нулевого значения TC. По его достижении выход OUT вновь станет высоким. Значение счетчика может быть получено без влияния на продолжительность одиночного импульса.
Рис. 33. Счетчик в режиме программируемого мультивибратора.
Режим 2. Генератор уровня. Данный режим и режим 3 используются для создания программируемых импульсных генераторов и генераторов прямоугольных импульсов (меандра) (рис. 34). Низкий уровень на входе GATE приведет к высокому уровню OUT, а высокий уровень GATE инициирует запуск счетчика. Период между импульсами на выходе OUT определяется заданным значением счетчика. Выход счетчика остается низким в течение импульса CLK. Перезагрузка счетчика новым значением отразится на периоде, следующим за текущим.
Рис. 34. Счетчик в режиме генератора уровня.
Режим 3. Генератор меандра. Данный режим во многом схож с предыдущим (рис. 35). Однако при поступлении очередного импульса CLK значение счетчика уменьшается на две единицы. Выход OUT остается высоким в течение первой половины отсчетов (при четном начальном значении счетчика) и низким на второй половине. По достижении значения TC выход OUT инвертируется, счетчик перезагружается, и процесс повторяется заново.
Рис. 35. Счетчик в режиме генератора прямоугольных импульсов.
При нечетном начальном значении счетчика и высоком уровне OUT (после загрузки счетчика) первый импульс CLK уменьшит значение счетчика на единицу, а последующие импульсы CLK будут уменьшать значение на две единицы. Когда счетчик достигнет TC, он перезагрузится. Теперь первый импульс CLK уменьшит значение счетчика на 3 единицы, а все последующие вновь на две единицы. Таким образом, при нечетном начальном значении счетчика выход OUT будет иметь высокий уровень на (N+1)/2 отсчетах и низкий на (N-1)/2 отсчетах. В последующих примерах будет использоваться именно этот режим.
Режим 4. Программно-запускаемый одновибратор. После установки режима выход OUT высокий (рис. 36). Когда число полностью загружено в счетчик канала и на управляющий вход GATE подан высокий уровень, начнется счет. По достижении значения TC, выход OUT станет низким на период одного импульса CLK. Если перезагрузка счетчика произведена в течение отсчета, новое значение будет загружено при следующем импульсе CLK. При низком уровне сигнала GATE процесс отсчета приостанавливается.