Разработка микропроцессорной системы управления некоторым объектом.
ОГЛАВЛЕНИЕ
ОПИСАНИЕ МИКРОПРОЦЕССОРНОГО МОДУЛЯ СО СХЕМОЙ ЗАПУСКА МПС.. 4
ОПИСАНИЕ ПОДСИСТЕМЫ ПАМЯТИ.. 8
СОГЛАСОВАНИЕ ВРЕМЕННЫХ ДИАГРАММ ПРОЦЕССОРА И ЗАПОМИНАЮЩИХ УСТРОЙСТВ.. 11
ОПИСАНИЕ ПОДСИСТЕМЫ ВВОДА-ВЫВОДА ИНФОРМАЦИИ.. 12
Подсистема ввода информации. 12
Подсистемы вывода информации. 13
ОПИСАНИЕ ПУЛЬТА УПРАВЛЕНИЯ.. 14
ОПИСАНИЕ ОТЛАДОЧНОГО ПУЛЬТА.. 16
КАРТА РАСПРЕДЕЛЕНИЯ АДРЕСНОГО ПРОСТРАНСТВА МПС.. 18
БЛОК СХЕМЫ ЗАДАННЫХ АЛГОРИТМОВ И ПРОГРАММ ИХ РЕАЛИЗАЦИИ.. 18
ОЦЕНКИ БЫСТРОДЕЙСТВИЯ И АППАРАТНЫХ ЗАТРАТ РАЗРАБОТАННОЙ МПС.. 20
ЗАДАНИЕ НА КУРСОВОЙ ПРОЕКТ
Целью курсового проектирования является разработка микропроцессорной системы управления некоторым объектом.
Микропроцессорная система (МПС) принимает информацию об объекте управления (ОУ) от цифровых датчиков (Д), вырабатывает управляющие воздействия (У) в соответствии с законом управления и подает их на исполнительные механизмы (ИМ). Закон управления реализует в МПС, состоящей из микроконтроллера (МК) – управляющей микроЭВМ, и пульта управления (ПУ). С помощью ПУ оператор получает возможность управлять работой МПС: запускать ее и останавливать, выдавать значение некоторых установок (констант), снимать с индикаторов информацию о состоянии объекта и т.п. На этапе отладки программных средств, а также при контроле работоспособности МПС используется отладочный пульт (ОП).
С помощью последовательного канала (ПК) связи МПС может передавать обработанную информацию машине более высокого уровня по запросу ее от терминала.
В курсовом проекте разрабатываются структурная схема МПС, включая устройства связи с Д и ИМ, и программы, обеспечивающие выполнение заданного алгоритма обмена и выполнение директив монитора, осуществляется оценка характеристик МПС.
Критерием проектирования является минимизация аппаратурных затрат, выраженных в числе условных корпусов.
Исходными данными для проектирования микропроцессорной системы являются следующие:
СТРУКТУРНАЯ СХЕМА МПС
Структурную схему разрабатываемой МПС можно представить в следующем виде:
1 2 3 4 5 6 7 8 9 10 |
------¬ ------¬ -----¬ -----¬ ¦ ПЗУ ¦ ¦ ОЗУ ¦ ¦ ПУ ¦ ¦ ОП ¦ ------¬ L--^--- L--T--- L--T-- L--T-- ШД, ША, ШУ ¦ МПМ +-----+-----T----+----T-----+----T-----+---T------> L------ ---+-¬ --+-¬ -----+----¬ ----+---¬ ----+---¬ ¦ КП ¦ ¦ Т ¦ ¦ ИУвв ¦ ¦ ИУвыв ¦ ¦ УСАПП ¦ L^--^- L---- L^-^-^-^-^- LT-T-T-T- L-^---T-- ¦ ¦ ¦ ¦ ¦ ¦ ¦ v ¦ v ¦ ¦ v INT0 INT4 X1 Xn¦ V2¦ Y1v Y3v RxD TxD V1 V3 Y2 Y4 |
На рисунке использованы следующие обозначения:
V1, V2, V3 — аналоговые сигналы, поступающие через аналоговый мультиплексор МПР на вход АЦП;
X1,…, Xn — цифровые двоичные сигналы, формируемые соответственно датчиками Д1,…,Дn ;
y1, y2, y3 — одноразрядные управляющие сигналы , вырабатываемые МК и поступающие на исполнительные механизмы ИМ;
y4 — 8-разрядный код , преобразуемый в аналоговый сигнал ЦАП;
INT0 – INT4 — запросы на прерывание;
Д, ША, ШУ — шины данных, адреса и управления;
CS — выборка кристалла;
R/W – сигнал чтения и записи информации в ОЗУ.
ИУВВ, ИУВыв — интерфейс устройств ввода и вывода информации, для реализации которого используется параллельные периферийные адаптеры КП580ВВ55 (Intel 8255), осуществляющие связь с цифровыми датчиками, АЦП, ЦАП, исполнительными механизмами;
КП — контроллер прерываний для обслуживания запросов прерываний. В качестве КП в проекте используется БИС КР580ВН59/К1810ВН59А (Intel 8259А);
Т — таймер для формирования сигналов с частотой 2 или 500 Гц на аварийную сигнализацию Авост в соответствии с заданием. В качестве таймера в проекте используется БИС К580/К1810ВИ53/54 (Intel 8253/54).
ПУ и ОП — пульт управления и отладочный пульт, представляющие собой наборы входных и выходных портов, реализованных на БИС параллельного интерфейса К580/К1810ВВ55 (Intel 8255) или на микросхемах буферных регистров К580/K1810ИР82 (Intel 8282), К580/K1810ИР83 (Intel 8283). При проектировании пульта управления и отладочного пульта с высокой эффективностью может быть использована БИС контроллера клавиатуры и индикации К580ВВ79 (Intel 8279).
ОПИСАНИЕ МИКРОПРОЦЕССОРНОГО МОДУЛЯ СО СХЕМОЙ ЗАПУСКА МПС
Интегральная схема К1810ВМ88 представляет собой 16-битный микропроцессор с 8-битовой внешней шиной данных. Подключение микропроцессора К1810МП88 со схемой запуска представлена на следующем рисунке:
Микропроцессор на приведённой схеме подключён в минимальном режиме. с длиной такта в 200 нс. старшие разряды AD8-AD15 не защёлкиваются в регистре адреса, поскольку процессор имеет 8-и битную шину данных и их защёлкивать не нужно.
Ко входу питанию нужно подать +5В (на схеме не показано) и заземлит выход GND.
Временные диаграммы процессора ВМ86:
Временные диаграммы ВМ88 во многом похожи на диаграммы ВМ86, но нет сигнала ВНЕ и на линиях А8-А15 адрес присутствует всё время, так как шина данных 8-битная.
Алгоритм работы:
Цикл начинается с формирования в такте T1 сигнала , определяющего тип устройства (ЗУ или ВУ), к которому производится обращение для пересылки данных. Длительность сигнала равна длительности цикла шины, и он используется для селекции адреса устройства. В такте T1 и в начале такта T2 микропроцессор выставляет адрес ЗУ на линии А19-А16 и AD15-AD0 либо адес ВУ на линии AD15-AD0, а также вырабатывает. Одновременно с этим МП выдаёт строб адреса ALE, по спаду которого младшая часть адреса сохраняется в регистре защёлке. На выходе этого регистра адрес сохраняется в течение всего цикла шины (до записи нового значения).
В такте Т2 происходит переключение шин: на линии A19/S6 – A16/S3 поступают сигналы состояния S6-S3, которые сохраняются до конца такта Т4.
В цикле чтения в такте Т2 линии А15-А0 переводятся в третью состояние до появления данных от адресованного устройства. В тактах Т2-Т4 вырабатывается сигнал чтения , который указывает этому устройству на необходимость выдачи данных. Для управления буферами данных, которые обычно подключаются к линиям А7-А0, в тактах Т2-Т4 формируются сигнал
, разрешающий передачу данных. Направление передачи данных при чтении определяет сигнал
, действующий в течение всего цикла.
После выполнения чтения и установления сигнала микропроцессор заканчивает такт Т4 следующим образом: линии А15-А0 находятся в высокоомном состоянии, сигналы
, S7-S3 неактивны, буферы данных отключены от канала.
В цикле записи в такте Т2 адрес на линиях А7-А0 заменяется данными, предназначенными для записи в адресуемое устройство. Данные остаются действительными до середины такта Т4 и сопровождаются сигналом , который используется в качестве строба для записи данных в устройство. Сигнал
появляется уже в такте Т1 и используется для подготовки буферов к передаче данных. Сигнал
переключающий буферы на передачу данных в направлении к МП, удерживается на протяжении всего цикла записи. После установления
такт Т4 заканчивается так же, как и при выполнении цикла чтения.
Далее к процессорному модулю необходимо подключить таймер (К1810ВИ54). Этот таймер непосредственно согласован с процессором.
У таймера используется режим 1 и режим 3. Которые имеют следующие временные диаграммы работы:
Описание режимов 1 и 3:
Режим 1 – программируемый ждущий мультивибратор – на выходе OUT формируется сигнал низкого уровня длительностью T=TCLKN, где TCLK – период тактовых импульсов; N – константа. На выходе OUT по положительному фронту сигнала GATA устанавливается нулевой сигнал, который изменяется после окончания счёта. Режим 1 является режимом с перезапуском. По каждому фронту сигнала на входе GATA регистр CE перезагружается содержимым CR. Это означает, что однажды записанная константа участвует в счёта каждый раз по фронту сигнала GATA, причём по фронту первого сигнала GATA флаг обновления устанавливается в нуль.
Режим 3 – генератора со скважностью два. На выходе OUT формируются импульсы с длительностью полупериодов, равной N/2*TCLK при чётных N; (N+1)/2*TCLK для положительных и (N-1)/2*TCLK для отрицательных полупериодов при нечётных N. Этот режим является режимом с автозагрузкой, т. е. перезагрузка CE константой из CR выполняется автоматически после окончания цикла счёта. Перезагрузка константы во время счёта не влияет на текущий счёт, новый счёт начинается после окончания предыдущего. Снятие сигнала GATA приостанавливает счёт, установка его продолжает цикл счёта. В этом режиме канал может работать только с константой больше трёх.
Схема подключения таймеров:
Контроллер прерываний:
ОПИСАНИЕ ПОДСИСТЕМЫ ПАМЯТИ
По заданию нужно использовать ввод-вывод с отображение в память. То есть обращение к ПЗУ будет происходить по командам mov, как и ОЗУ.
БЛОК ОЗУ
Блок ОЗУ необходимо построить на К155РУ7. Он должен быть размером в 256 байт. Но элемент К155РУ7 имеет побитовый доступ и в одной микросхеме содержится 1К. Следовательно для получения 256-ого ОЗУ необходимо на старшие биты адреса подать нули.
Характеристики К155РУ7:
тип микросхемы | емкость, бит | t(зп/сч), нс | Uпит, В | Pпот, Вт | тип выхода |
К155РУ7 | 1К × 1 | 45 | 5 | 0.9 | ТТЛ-ОК-3 |
-CS | -W/R | A | DI | DO | режим работы |
1 | × | × | × | Z | хранение |
0 | 0 | A | 1 | Z | запись 1 |
0 | 0 | A | 0 | Z | запись 0 |
0 | 1 | A | × | D | считывание |
Так как организация доступа побитовая, то необходимо 8 микросхем К155РУ7.
Блок ОЗУ имеет следующий вид:
БЛОК ПЗУ
Блок ПЗУ строится на КР568РЕ2. Необходимый объём – 16 кб. В одном элементы КР568РЕ2 может храниться 8 кб. Следовательно понадобится 2 элемента. Выбор необходимого элемента будет осуществляться по А13. 5-ый бит ШУ – выбор кристалла ПЗУ.
Основные характеристики КР568РЕ2:
Тип микросхемы | Емкость бит | tсч нс | Uпит В | Pпот мВт | Тип выхода |
КР568РЕ2 | 8К*8 | 400 | 5; 12 | 600 | ТТЛ-3 |
Микросхема КР568РЕ2 работает в режимах хранения и считывания. Для считывания информации необходимо подать код адреса и разрешающий сигнал управления. Сигналы управления подаются уровнем.
Блок ПЗУ:
СОГЛАСОВАНИЕ ВРЕМЕННЫХ ДИАГРАММ ПРОЦЕССОРА И ЗАПОМИНАЮЩИХ УСТРОЙСТВ
Время выборки К155РУ7 составляет 45 нс. Время одного состояния процессора 200 нс. Блок ОЗУ полностью совместим с процессором К1810ВМ88.
Время выборки данных КР568РЕ2 составляет 400 нс. Время одного состояние процессора 200 нс. Но так как перед выборкой адреса сигнал с шины адреса должен пройти ещё дешифраторы, то потребуется 1 такт ожидания.
Построим схему формирования сигнала READY.
За основу используем 155АГ1 – неперезапускаемый мультивибратор без входа сброса.
Его сигналы запуска:
G1 | G2 | G3 |
0 | X | ![]() |
X | 0 | ![]() |
1 | ![]() |
1 |
![]() |
1 | 1 |
Длительность T выходного сигнала Q = 1 задаётся внешней RC – цепью. T=0,7 *RC. при R=1,4…40 кОм и C=0…1000мкФ. Минимальная длительность импульса Q=1 составляет 30…40 нс. Внутри ИС между выводами RI и RC включён резистор Ri, сопротивление которого порядка 2 кОм. Внешний резистор можно не использовать, ели соединить выводы RI и Vcc.
Необходимо получить сигнал равный 0 в течение 400 нс с момента подачи сигнал выбора кристалла на ПЗУ =0.
T=0,7 *RC
T=400 нс=400*10-9
Используем внутренний резистор Ri=2 ком. тогда необходим конденсатор, ёмкость которого:
C=T/(0,7 * R)=400*10-9/(0,7*2000)≈0,29 пФ
Схема формирования сигнала READY:
ОПИСАНИЕ ПОДСИСТЕМЫ ВВОДА-ВЫВОДА ИНФОРМАЦИИ
Интерфейс устройств ввода-вывода строится на параллельном порту КП580ВВ55:
Таблица истинности БИС КР580ВВ55
сигналы на входах | вид передаваемой
информации |
направление передачи информации | ||||
A0 | A1 | -WR | -RD | -CS | ||
0 | 0 | 1 | 0 | 0 | данные | PA→ШД[0 -7] |
1 | 0 | 1 | 0 | 0 | данные | PB→ШД[0 -7] |
0 | 1 | 1 | 0 | 0 | данные | PC→ШД[0 -7] |
0 | 0 | 0 | 1 | 0 | данные | ШД[0 -7] →PA |
1 | 0 | 0 | 1 | 0 | данные | ШД[0 -7] →PB |
0 | 1 | 0 | 1 | 0 | данные | ШД[0 -7] →PC |
1 | 1 | 0 | 1 | 0 | управляющее слово | ШД[0 -7]→регистр управляющего слова |
× | × | × | × | 1 | — | нет передачи |
Параллельный порт настроен таким образом, что работает в режиме 0 (простой ввод-вывод информации). При этом режиме информация, поступающая на КР580ВВ55 с ШД, запоминается в буферном регистре соответствующего канала и сразу же передается на его выходы. При вводе информации данные с каналов записываются в буферные регистры этих каналов и далее при поступлении сигнала -RD передаются на ШД.
Микросхема КР580ВВ55.
A1A0 | Адресуемый регистр |
00 | Порт А |
01 | Порт B |
10 | Порт C |
11 | Регистр управляющего слова |
Подсистема ввода информации
Параметры микросхемы КР590КН1:
R0, Ом макс (тип.) | tвкл, нс макс. (тип.) | tут, нА макс. (тип.) | Uвх, В
(Iвх, мА) |
Uп, В (выводы) |
200
(140) |
1000
(700) |
50
(тип.) |
±5
(±10) |
+5; -15
(8) (16) |
Параметры микросхемы К572ПВ1:
Число рарзядов | Время преобразования (мкс) | Нелинейность квантов | Дифференциальная нелинейность квантов | Напряжение питания, В | Потребляемая мощность, мВт |
12 | 110 | 4 | 2 | +5В…15;
-15 |
30 |
Алгоритм работы с аналоговым мультиплексором. На входы A1, A0 подаётся адреса аналогового сигнала. Через 1000 нс на выходе будет необходимый аналоговый сигнал.
Алгоритм работы с АЦП К572ПВ1 следующий. Запуск АЦП производится положительным импульсом, подаваемым на вход ST (старт). Весь цикл преобразования длится 28 периодов тактовых импульсов: 2 периода —сброс, 24 периода — реализация программы последовательного приближения и 2 периода — формирование положительного импульса на выходе DR (готовность данных). Цикл преобразования АЦП может быть закончен досрочно, путём подачи повторного импульса запуска на вход ST.
АЦП обеспечивает преобразования напряжения от 0 до –UR. UR в этом АЦП может изменяться от -15 В до +15 В. Напряжение входа аналогового мультиплексора КР590КН1 ±5 В. Тогда пусть опорное напряжение UR будет равно -5 В. Тогда АЦП будет преобразовывать сигналы от 0 до +5 В.
Схема подсистемы ввода информации:
Подсистемы вывода информации
Схема подсистемы вывода информации.
Параметры К572ПА2:
N | Iвых, мА | Tуст мкс | Ur, В | Uп В (Iп, мА) | Зарубежный аналог |
12 | 0,8 | 15 | -15..15 | +5 (2)
+15(2) |
AD7545 |
Алгоритм работы с этим ЦАП:
по E1=1 данные записываются во внутренний регистр
по E2=1 данные из внутреннего регистра записываются в выходной и преобразуются в аналоговый сигнал
ОПИСАНИЕ ПУЛЬТА УПРАВЛЕНИЯ
Пульт управления содержит следующие элементы:
- Регистр со светодиодами индикации значения Nv1, РИ1;
- Регистр со светодиодами индикации значений (X1,…, Xn), РИ2;
- Регистр со светодиодами индикации значений y1, y2, y3, РИ3;
- Регистр со светодиодами индикации кода y4, РИ4;
- Входной 8-разрядный регистр Р5 для приема с тумблеров с пульта кода К (для вариантов, в которых используется, см. табл. 1.2);
- Зуммер, на которые с таймера МПС подается меандр частотой 500 Гц,;
- Кнопку «СБРОС», при нажатии на которую производится начальная установка МПС (уже присутствует в блоке процессора);
- Тумблер «ОСТАНОВ», опрашиваемый в конце каждого цикла выполнения программы
Схема пульта управления:
ОПИСАНИЕ ОТЛАДОЧНОГО ПУЛЬТА
Отладочный пульт подключается к системе для определения работоспособности ее программных и аппаратных средств. Он позволяет выполнить ряд команд МОНИТОРА, позволяющих оперативно определять неисправные аппаратные средства и ошибки рабочей программы.
Отладочный пульт содержит:
- Клавишный регистр команд монитора КРК.
- Клавишный регистр адреса КРА.
- Клавишный регистр данных КРД.
- Регистр индикации шин адреса и данных РИШ.
В отладочном пульте содержится 3 схемы КП580ВВ55. Выбор между ними осуществляется с помощью дешифратора по следующей таблице:
A3 | A2 | Блок (номер) |
0 | 0 | 1 блок |
0 | 1 | 2 блок |
1 | 0 | 3 блок |
Схема отладочного пульта:
КАРТА РАСПРЕДЕЛЕНИЯ АДРЕСНОГО ПРОСТРАНСТВА МПС
Распределение адресного пространства происходит в соответствии со следующей таблицей:
A14A13A12A11 | блок |
0000 | ОЗУ (256 байт) А7А0 — 00h-ffh |
0001 | Таймер |
0010 | Контроллер прерываний |
0011 | Пульт управления |
0100 | Отладочный пульт |
0101 | ИУвв |
0110 | ИУвыв |
0111 | УСАПП |
1xxx | ПЗУ |
Карта памяти:
ОЗУ
0000h-00FFh
Устройства ввода-вывода
0100h-3FFFh
ПЗУ:
4000h-7FFFh;
По адресу 7FFFh команда jmp 4000h; (переход на начало программы)
Дешифрацию адресов в соответствии с вышеприведёнными данными осуществляет дешифратор адресов:
Назначение битов шины управления:
БЛОК СХЕМЫ ЗАДАННЫХ АЛГОРИТМОВ И ПРОГРАММ ИХ РЕАЛИЗАЦИИ
Основная программа
В данной части программы происходит инициализация всех устройств (таймер, контроллер прерываний…). Затем вводится информация с цифровых датчиков и происходит её обработка, после чего вводится информация с аналоговых датчиков и происходит её обработка в МП.
Алгоритм работы следующий:
- Запрет всех прерываний
- Инициализация ИУвв
- Инициализация ИУвыв
- Начальная установка последовательного канала
- Инициализация пульта управления
- Инициализация отладочного пульта
- Инициализация таймера (настройка выходов OUT1 и OUT2…)
- Инициализация контроллера прерываний (настройка прерываний IRQ0-IRQ4 и разрешение прерываний)
- Ввод информации с цифровых датчиков и её обработка
- Ввод информации с аналоговых датчиков и её обработка
- Если ОСТАНОВ нажата, то 12, иначе 9
Ввод информации с цифровых датчиков и её обработка:
- Опрос цифровых датчиков
- Вычисление функции
- Если y1=1, то инициализация таймера, настроенного на время t1=20 мкс
Ввод информации с аналоговых датчиков и её обработка:
- Преобразовать сигналы V1 и V2 в цифровую форму в АЦП.
- Считать величину К с тумблера регистра управления
- Вычислить функцию
- Если Nv>Q то выработка сигнала y2=1 в течение времени t2=30 мкс, иначе выработка сигнала y3=1 в течение времени t3=30 мкс
- Вычисление 8-битного управляющего воздействия y4 по формуле y4= a0 + a1 Nv3, где а0 и а1 – восьми разрядные коэффициенты, хранящиеся в ПЗУ. Причём при вычислении y4 используется только старший байт произведения. Выдача y4 на ЦАП.
Обработка запроса на прерывание по сигналу отказа источника питания INT0:
- Выработка сигнала y5, представляющего собой два прямоугольных импульса длительностью 30 мкс, следующие с интервалом в 30 мкс
- Передача в последовательный канал связи код символа “!”
- Завершение аппаратного прерывания
- Остановка системы
Обработка запроса на прерывание по сигналу аварийного датчика INT1:
- Выдача аварийного сигнала
- Выдача сигналов от двоичных датчиков и цифрового кода Nv1, поступающего с АЦП.
- Остановка системы
Обработка запроса на прерывание от отладочного пульта INT2:
- Передача управления конкретной подпрограмме, реализующей данную директиву монитора
Обработка запроса на прерывание от терминала внешней ЭВМ INT3:
- Разрешение прерываний
Чтение регистра состояния прерываний последовательного канала - Если имеются запросы не обслуженного прерывания, то переход к 4 иначе к 13
- Если прерывание вызвано ошибкой/обрывом линии то к 9, иначе к 5
- Если прерывание вызвано приемом символа то к 6, иначе к 11
- Если поступил запрос на передачу данных(символ «d») то к 7, иначе к 2
- Выдача в канал текущего значения
- Переход к 2
- Выдача в канал запроса повторения данных (символ «r»)
- Переход к 2
- Сброс запроса не обслуженного прерывания
- Переход к 2
- Завершение аппаратного прерывания
- Разрешение прерываний
Обработка запросов на прерывание от пульта управления (прерывание оператора) INT4:
- Разрешение прерываний
- Выдать последнее значение вычисленной функции f на регистр индикации
- Выдать значение выражения Х1*Х2*Х3*Х4 на регистр индикации
- Выдать значение выражения Х1vX2vX3vX4 на регистр индикации
- Выдать на регистр индикации значение сохраняемой в ПЗУ константы Q
- Завершение аппаратного прерывания
- Переход к началу программы обработки данных
ОЦЕНКИ БЫСТРОДЕЙСТВИЯ И АППАРАТНЫХ ЗАТРАТ РАЗРАБОТАННОЙ МПС
Таблица для подсчёта аппаратных затрат:
————————————————————————
Число выводов
корпуса 16 18 20 24 28 40 48
Коэффициент 1 1,2 1,4 2,8 3,2 4,5 7,5
ввода
———————————————————————
За единицу сложности аппаратурных затрат принимается один 16-выводной корпус. Если корпус имеет большее число внешних выводов, то его сложность берется из таблицы.
Аппаратные затраты:
Наименование | Число корпусов | Число выводов корпуса | Итоговые аппаратные затраты |
К1810ВМ88 | 1 | 40 | 4,5 |
К1810ГФ84 | 1 | 17 | 1,2 |
К1810ВА86 | 2 | 20 | 2,8 |
К1810ИР82 | 1 | 20 | 1,4 |
155ИД1 | 5 | 16 | 5 |
К1810ВН59А | 1 | 25 | 2,8 |
К155РУ7 | 8 | 22 | 22,4 |
КП580ВВ55 | 7 | 40 | 31,5 |
155ГА1 | 1 | 14 | 1 |
К1810ВИ54 | 2 | 24 | 5,6 |
К1810ВВ50 | 1 | 40 | 4,5 |
КР568РЕ2 | 2 | 25 | 5,6 |
155ЛН1 | 1 | 14 | 1 |
89,3 |
Максимальное время реализации одного цикла управления:
Команда | Количество | Тактов |
Push | 11 | 11 |
Pop | 11 | 8 |
Mov | 56 | 15 |
Inc | 5 | 2 |
Сдвиг | 4 | 8 |
Loop | 29 | 17 |
And | 8 | 20 |
Cmp | 8 | 15 |
Jmp | 9 | 15 |
Or | 2 | 20 |
mul | 1 | 176 |
Итог: | 307 |
Итоговое время: 307*200нс+АЦП*3=131*200нс+15мкс*3=0,0000712с=106,4 мкс
ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ ПРОШИВКИ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 |
Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 1 prog.asm 1 2 ;адреса устройств 3 4 5 ;адреса управляющий регистров таймера 6 =0800 T0K0 equ 000100000000000b; Таймер 0, канал 0 7 =0801 T0K1 equ 000100000000001b; Таймер 0, канал 1 8 =0802 T0K2 equ 000100000000010b; Таймер 0, канал 2 9 =0803 T0K equ 000100000000011b; Таймер 0, управляющее слово или команда 10 11 =0804 T1K0 equ 000100000000100b; Таймер 1, канал 0 12 =0805 T1K1 equ 000100000000101b; 13 =0806 T1K2 equ 000100000000110b; 14 =0807 T1K equ 000100000000111b; 15 ;для инициализации таймеров 16 17 init_t macro 18 19 ;выдача импульсов 250 кГц на АЦП 20 mov al, 00110110b; режим 3 генератор импульсов скважностью 2 21 mov bx,T0K; 22 mov [bx],al; ; 23 mov al,10; загрузка константы пересчёта 24 mov bx,T0K0; 25 mov [bx],al 26 xor al,al; 27 mov [bx],al; 28 29 ;настройка канала 1 таймера 0 на режим 3 с частотой 500 Гц 30 mov al, 01110110b; 31 mov bx,T0K; 32 mov [bx],al; 33 mov al,88h; загрузка константы пересчёта 34 mov bx,T0K1; 35 mov [bx],al; 36 mov al,13h; 37 mov [bx],al; 38 39 ;настройка канала 2 на длительность импулься в 30 мкс 40 mov al, 10110010b; 41 mov bx,T0K; 42 mov [bx],al; 43 mov al,75; 44 mov bx,T0K2; 45 mov [bx],al; 46 xor al,al; 47 mov [bx],al; 48 49 ;;инициализация второго таймера. 50 mov al, 00110010b; канал 0 длительность t1=20 мкс 51 mov bx,T1K; 52 mov [bx],al; 53 mov al,50; загрузка константы пересчёта 50 54 mov bx,T1K0; 55 mov [bx],al; 56 xor al,al; 57 mov [bx],al; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 2 prog.asm 58 59 ;канал 1 длительность t2=30 мкс 60 mov al, 01110010b; 61 mov bx,T1K; 62 mov [bx],al; 63 mov al,75; 64 mov bx,T1K1; 65 mov [bx],al; 66 xor al,al; 67 mov [bx],al; 68 69 ;канал 2 длительность t3=30 мкс 70 mov al,10110010b; 71 mov bx,T1K; 72 mov [bx],al; 73 mov al,75; 74 mov bx,T1K2; 75 mov [bx],al; 76 xor al,al; 77 mov [bx],al; 78 endm; 79 ;адреса управляющих регистров контроллера прерываний 80 =1000 IC0 equ 001000000000000b; для записи OCW2, OCW3, ICW1 81 ; для чтения OCW3 82 =1001 IC1 equ 001000000000001b; для чтения и записи OCW1 - маскирование прерываний 83 ; для записи ICW2, ICW3, ICW4 сразу после ICW1 84 85 ;для инициализации контроллера прерываний 86 87 =0017 ICICW1 equ 00010111b; в IC0 88 =0000 ICICW2 equ 00000000b;Управляющее слово 2 в IC1 89 =0000 ICICW3 equ 00000000b; в IC1 90 =0001 ICICW4 equ 00000001b; в IC1 91 92 =00E0 ICOCW1 equ 11100000b; 93 94 95 =0020 EOI equ 20h; конец прерывания в IC0 96 97 ;макрос инициализации контроллера прерываний 98 init_ic macro 99 100 mov al,ICICW1; 101 mov bx,IC0; 102 mov [bx],al; 103 mov al,ICICW2; 104 mov bx,IC1; 105 mov [bx],al; 106 mov al,ICICW3; 107 mov [bx],al; 108 mov al,ICICW4; 109 mov [bx],al; 110 endm; 111 disable_int macro 112 mov al,11111111b;запрет прерываний; 113 mov bx,IC1; 114 mov [bx],al; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 3 prog.asm 115 endm; 116 enable_int macro 117 mov al,ICOCW1; 118 mov bx,IC1; 119 mov [bx],al; 120 endm; 121 122 ;адреса пульта управления 123 =1800 CPNv1 equ 001100000000000b; 124 =1801 CPy4 equ 001100000000001b; 125 =1802 CPx1x2x3_y1y2y3_ equ 001100000000010b; 126 =1803 CPK0 equ 001100000000011b; 127 128 =1804 CPK equ 001100000000100b; 129 =1805 CPZUMMER equ 001100000000101b; 130 =1806 CPSTOP equ 001100000000110b; 131 =1807 CPK1 equ 001100000000111b; 132 133 init_cp macro 134 ;настройка пульта управления 135 mov al, 10000000b; Все на простой вывод 136 mov bx,CPK0; 137 mov [bx],al; 138 xor al,al; 139 mov bx,CPNv1; 140 mov [bx],al; обнуление данных 141 mov bx,CPy4; 142 mov [bx],al; 143 mov bx,CPx1x2x3_y1y2y3_; 144 mov [bx],al; 145 mov bx,CPNv1; 146 mov [bx],al; 147 148 mov al,10010001b; 149 mov bx,CPK1; 150 mov [bx],al; 151 152 mov bx,CPZUMMER; 153 mov al,00000000b;Остановка зуммера 154 mov [bx],al; 155 endm; 156 157 ;адреса отладочного пульта 158 =2000 DPKRK equ 010000000000000b; 159 =2002 DPKRA0 equ 010000000000010b; 160 =2001 DPKRA1 equ 010000000000001b; 161 =2003 DPK0 equ 010000000000011b; 162 163 =2004 DPKRD equ 010000000000100b; 164 =2007 DPK1 equ 010000000000111b 165 166 =2008 DPRIA0 equ 010000000001000b; 167 =200A DPRIA1 equ 010000000001010b; 168 =2009 DPRID equ 010000000001001b; 169 =200B DPK2 equ 010000000001011b; 170 171 init_dp macro Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 4 prog.asm 172 ;настройка отладочного пульта 173 mov al,10011011b; 174 mov bx,DPK0; 175 mov [bx],al; 176 177 mov al,10010000b; 178 mov bx,DPK1; 179 mov [bx],al; 180 181 mov al,10000000b; 182 mov bx,DPK2; 183 mov [bx],al; 184 185 ;обнуление регистров индикации 186 xor ax,ax; 187 mov bx,DPRIA0; 188 mov [bx],ax; 189 190 mov bx,DPRIA1; 191 mov [bx],ax; 192 193 mov bx, DPRID; 194 mov [bx],al; 195 endm; 196 197 198 ;адреса ИУвв 199 =2800 IUvvD equ 010100000000000b; 200 =2801 IUvvx1x2x3 equ 010100000000001b; 201 =2802 IUvvSTA0A1 equ 010100000000010b; 202 =2803 IUvvK equ 010100000000011b; 203 init_IUvv macro 204 mov bx,IUvvK; 205 mov al,10011010b; 206 mov [bx],al; 207 mov al,00000000b; Обнуляем ST 208 mov [bx],al; 209 endm; 210 211 ;адреса ИУвыв 212 =3000 IUvivy4 equ 011000000000000b; 213 =2001 IUvivGy1y2y3_y5 equ 010000000000001b; 214 =3002 IUvivE1E2 equ 011000000000010b; 215 =3003 IUvivK equ 011000000000011b; 216 217 init_IUviv macro 218 ;инициализация устройств вывода 219 mov al,10000000b; 220 mov bx,IUvivK; 221 mov [bx],al; 222 xor al,al; 223 mov bx,IUvivE1E2; 224 mov [bx],al; 225 mov bx,IUvivGy1y2y3_y5; 226 mov [bx],al; 227 endm; 228 Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 5 prog.asm 229 ;адреса УСАПП 230 =3800 PPTHR equ 011100000000000b; 231 =3800 PPRHR equ 011100000000000b; 232 =3800 PPDLL equ 011100000000000b; 233 =3801 PPDLH equ 011100000000001b; 234 =3801 PPIER equ 011100000000001b; 235 =3802 PPISR equ 011100000000010b; 236 =3802 PPFCR equ 011100000000010b; 237 =3803 PPLCR equ 011100000000011b; 238 =3804 PPMCR equ 011100000000100b; 239 =3805 PPLSR equ 011100000000101b; 240 =3806 PPMSR equ 011100000000110b; 241 =3807 PPSPR equ 011100000000111b; 242 init_usapp macro 243 ;инициализация последовательного канала 244 ;скорость приёма - передачи 2400 бит/c 245 mov al,10000000b; устанавлваем бит 7 (доступ к делителю) 246 mov bx,PPLCR; 247 mov [bx],al; 248 mov al,00h; установка делителя 249 mov bx,PPDLH; 250 mov [bx],al; 251 mov al,30h; 252 mov bx,PPDLL; 253 mov [bx],al; 254 mov al,00001010b; устанавливаем бит 7 обратно в 0 255 mov bx,PPLCR; 256 mov [bx],al; 257 mov al,00000001b;разрешаем прерывания по приёму символа + 258 //и по ошибке линии 259 mov bx,PPIER; 260 mov [bx],al; 261 mov al,00000001b;установка RTS и DTR 262 mov bx,PPMCR; 263 mov [bx],al; 264 mov bx,PPMSR; 265 mov al,[bx]; анализ входных сигналов готовности DSR и CTS 266 or al,00110000b; 267 endm; 268 269 enter_digital_value macro address, bit, x 270 local zero_x1,dalee,loop_shr,not_shr 271 push ax; 272 push bx; 273 push cx; 274 mov bx,address; 275 mov al,[bx]; 276 mov cx,bit; 277 cmp cx,0; 278 je not_shr; 279 loop_shr: 280 shr al,1; 281 loop loop_shr; 282 not_shr: 283 and al,00000001b; 284 mov x,al; 285 pop cx; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 6 prog.asm 286 pop bx; 287 pop ax; 288 endm; 289 290 print_digital_value macro address, bit, y 291 local looP_shl,not_shl; 292 push ax; 293 push bx; 294 push cx; 295 mov bx,address; 296 mov al,y; 297 mov cx,bit; 298 cmp cx,0; 299 je not_shl 300 loop_shl: 301 shl al,1; 302 loop loop_shl; 303 not_shl: 304 mov [bx],al; 305 xor al,al; 306 mov [bx],al; 307 pop cx; 308 pop bx; 309 pop ax; 310 endm; 311 312 enter_digital_data macro 313 ;макрос ввода цифровых данных 314 enter_digital_value IUvvx1x2x3 0 x1; 315 enter_digital_value IUvvx1x2x3 1 x2; 316 enter_digital_value IUvvx1x2x3 2 x3; 317 endm; 318 319 work_with_digital_data macro 320 local no_y1 321 mov al,x1; 322 and al,x2; 323 and al,x3; 324 mov y1,al; 325 print_digital_value IUvivGy1y2y3_y5 0 y1 326 endm; 327 328 enter_8bit_digital_value macro A1,A0, x 329 local m_wait_result; 330 push ax; 331 push bx; 332 mov bx,IUvvK; 333 mov al,A1; 334 or al,00000100b; 335 mov [bx],al; 336 mov al,A0; 337 or al,00000010b; 338 mov [bx],al; 339 ;ожидание 1000 нс 340 nop; 341 nop; 342 ;запуск АЦП. Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 7 prog.asm 343 ;выставление сигнала ST 344 mov al,00000001b; 345 mov [bx],al; 346 ;убирание сигнала ST 347 mov al,00000000b; 348 mov [bx],al; 349 ;ожидание готовности результата 350 mov bx,IUvvx1x2x3; 351 m_wait_result: 352 mov al,[bx]; 353 and al,10000000b; 354 jz m_wait_result; 355 ;результат готов, осталось его считать 356 mov bx,IUvvD; 357 mov al,[bx]; 358 mov x,al; 359 pop bx; 360 pop ax; 361 endm; 362 363 print_8bit_digital_value macro y 364 push ax; 365 push bx; 366 push dx; 367 368 mov bx,IUvivE1E2; 369 mov al,00000001b; send E1=1 370 mov [bx],al; 371 372 mov bx,IUvivy4; 373 mov al, y 374 mov [bx],al; 375 376 mov bx,IUvivE1E2; 377 mov al,00000011b; send E2=1; 378 mov [bx],al; 379 380 mov al,0; 381 mov [bx],al; 382 383 pop dx; 384 pop bx; 385 pop ax; 386 endm; 387 388 ;макрос ввода данных с аналоговых датчиков 389 enter_analog_data macro 390 enter_8bit_digital_value 0 0 Nv1 391 enter_8bit_digital_value 0 1 Nv2 392 enter_8bit_digital_value 1 0 Nv3 393 ;считываем K 394 mov bx,CPK; 395 mov al,[bx]; 396 mov K,al; 397 endm; 398 399 ;макрос обработки информации с аналоговых датчиков Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 8 prog.asm 400 work_with_analog_data macro Q 401 local NV_BL,dalee1,dalee2,set_y3 402 mov al,Nv2; 403 add al,K; 404 mov bl,Nv1; 405 cmp bl,al; 406 jb NV_BL 407 mov Nv,al; 408 jmp dalee1; 409 NV_BL: 410 mov Nv,bl; 411 dalee1: 412 mov al,Nv; 413 cmp al,Q; 414 ja set_y3; 415 print_digital_value IUvivGy1y2y3_y5 1 1 416 jmp dalee2; 417 set_y3: 418 print_digital_value IUvivGy1y2y3_y5 2 1 419 dalee2: 420 mov al,a1 421 mul Nv3; 422 423 add ah,a0; 424 mov y4,ah; 425 print_8bit_digital_value y4; 426 endm 427 428 429 430 CHECK_STOP MACRO 431 local stop,not_stop; 432 push ax; 433 push bx; 434 mov bx,CPSTOP; 435 mov al,[bx]; 436 and al,al; 437 jz not_stop; 438 stop: 439 HLT; остановка 440 not_stop: 441 pop bx; 442 pop ax; 443 ENDM; 444 445 OUT_USAPP macro symbol 446 local WAIT_READY_TO_SEND 447 push ax; 448 push bx; 449 mov bx,PPLSR; 450 wait_ready_to_send: 451 mov al,[bx]; 452 TEST al,00010000b;проверка на готовность передачи 453 jz wait_ready_to_send; 454 455 ;передачи символа 456 mov bx,PPTHR; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 9 prog.asm 457 mov al,symbol; 458 mov [bx],al; 459 pop bx; 460 pop ax; 461 endm; 462 463 myprint macro message 464 mov ah,09h; 465 mov dx,offset message 466 int 21h; 467 endm; 468 469 STOP_SYSTEM MACRO 470 HLT; ОСТАНОВКА СИСТЕМЫ 471 ENDM 472 0000 .model small ; модель памяти, используемая для ЕХЕ 473 0000 .code 474 475 org 0000h ; начало ОЗУ 476 0000 08*(????????) dd 8 dup(?) 477 0020 00 x1 db 0; 478 0021 00 x2 db 0; 479 0022 00 x3 db 0; 480 0023 00 y1 db 0; значение функции f(x1,x2,x3) 481 0024 00 Nv1 db 0; 482 0025 00 Nv2 db 0; 483 0026 00 Nv3 db 0; 484 0027 00 K db 0; 485 0028 00 Nv db 0; 486 0029 00 y4 db 0; 487 002A 00 temp db 0; 488 org 100000000000000b; начало ПЗУ 489 4000 64 Q db 100; 490 4001 50 a0 db 80; 491 4002 78 a1 db 120; 492 4003 start: 493 ;настройка сегментных регистров 494 4003 BC 007F mov sp,7Fh; 495 ;запрет прерываний 496 disable_int; 1 497 4006 B0 FF mov al,11111111b;запрет прерываний; 1 498 4008 BB 1001 mov bx,IC1; 1 499 400B 88 07 mov [bx],al; 500 ;инииализация устройств ввода 501 init_IUvv; 1 502 400D BB 2803 mov bx,IUvvK; 1 503 4010 B0 9A mov al,10011010b; 1 504 4012 88 07 mov [bx],al; 1 505 4014 B0 00 mov al,00000000b; Обнуляем ST 1 506 4016 88 07 mov [bx],al; 507 ;инициализация устройств вывода 508 init_IUviv; 1 509 4018 B0 80 mov al,10000000b; 1 510 401A BB 3003 mov bx,IUvivK; 1 511 401D 88 07 mov [bx],al; 1 512 401F 32 C0 xor al,al; 1 513 4021 BB 3002 mov bx,IUvivE1E2; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 10 prog.asm 1 514 4024 88 07 mov [bx],al; 1 515 4026 BB 2001 mov bx,IUvivGy1y2y3_y5; 1 516 4029 88 07 mov [bx],al; 517 ;инициализация УСАПП 518 init_USAPP; 1 519 402B B0 80 mov al,10000000b; устанавлваем бит 7 (доступ к делителю) 1 520 402D BB 3803 mov bx,PPLCR; 1 521 4030 88 07 mov [bx],al; 1 522 4032 B0 00 mov al,00h; установка делителя 1 523 4034 BB 3801 mov bx,PPDLH; 1 524 4037 88 07 mov [bx],al; 1 525 4039 B0 30 mov al,30h; 1 526 403B BB 3800 mov bx,PPDLL; 1 527 403E 88 07 mov [bx],al; 1 528 4040 B0 0A mov al,00001010b; устанавливаем бит 7 обратно в 0 1 529 4042 BB 3803 mov bx,PPLCR; 1 530 4045 88 07 mov [bx],al; 1 531 4047 B0 01 mov al,00000001b;разрешаем прерывания по приёму символа + 532 //и по ошибке линии 1 533 4049 BB 3801 mov bx,PPIER; 1 534 404C 88 07 mov [bx],al; 1 535 404E B0 01 mov al,00000001b;установка RTS и DTR 1 536 4050 BB 3804 mov bx,PPMCR; 1 537 4053 88 07 mov [bx],al; 1 538 4055 BB 3806 mov bx,PPMSR; 1 539 4058 8A 07 mov al,[bx]; анализ входных сигналов готовности DSR и CTS 1 540 405A 0C 30 or al,00110000b; 541 ;инициализация пульта управления 542 init_CP; 1 543 405C B0 80 mov al, 10000000b; Все на простой вывод 1 544 405E BB 1803 mov bx,CPK0; 1 545 4061 88 07 mov [bx],al; 1 546 4063 32 C0 xor al,al; 1 547 4065 BB 1800 mov bx,CPNv1; 1 548 4068 88 07 mov [bx],al; обнуление данных 1 549 406A BB 1801 mov bx,CPy4; 1 550 406D 88 07 mov [bx],al; 1 551 406F BB 1802 mov bx,CPx1x2x3_y1y2y3_; 1 552 4072 88 07 mov [bx],al; 1 553 4074 BB 1800 mov bx,CPNv1; 1 554 4077 88 07 mov [bx],al; 1 555 4079 B0 91 mov al,10010001b; 1 556 407B BB 1807 mov bx,CPK1; 1 557 407E 88 07 mov [bx],al; 1 558 4080 BB 1805 mov bx,CPZUMMER; 1 559 4083 B0 00 mov al,00000000b;Остановка зуммера 1 560 4085 88 07 mov [bx],al; 561 ;инициализация отладочного пульта 562 init_DP; 1 563 4087 B0 9B mov al,10011011b; 1 564 4089 BB 2003 mov bx,DPK0; 1 565 408C 88 07 mov [bx],al; 1 566 408E B0 90 mov al,10010000b; 1 567 4090 BB 2007 mov bx,DPK1; 1 568 4093 88 07 mov [bx],al; 1 569 4095 B0 80 mov al,10000000b; 1 570 4097 BB 200B mov bx,DPK2; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 11 prog.asm 1 571 409A 88 07 mov [bx],al; 1 572 409C 33 C0 xor ax,ax; 1 573 409E BB 2008 mov bx,DPRIA0; 1 574 40A1 89 07 mov [bx],ax; 1 575 40A3 BB 200A mov bx,DPRIA1; 1 576 40A6 89 07 mov [bx],ax; 1 577 40A8 BB 2009 mov bx, DPRID; 1 578 40AB 88 07 mov [bx],al; 579 ;инициализация таймера 580 init_T; 1 581 40AD B0 36 mov al, 00110110b; режим 3 генератор импульсов скважностью 2 1 582 40AF BB 0803 mov bx,T0K; 1 583 40B2 88 07 mov [bx],al; ; 1 584 40B4 B0 0A mov al,10; загрузка константы пересчёта 1 585 40B6 BB 0800 mov bx,T0K0; 1 586 40B9 88 07 mov [bx],al 1 587 40BB 32 C0 xor al,al; 1 588 40BD 88 07 mov [bx],al; 1 589 40BF B0 76 mov al, 01110110b; 1 590 40C1 BB 0803 mov bx,T0K; 1 591 40C4 88 07 mov [bx],al; 1 592 40C6 B0 88 mov al,88h; загрузка константы пересчёта 1 593 40C8 BB 0801 mov bx,T0K1; 1 594 40CB 88 07 mov [bx],al; 1 595 40CD B0 13 mov al,13h; 1 596 40CF 88 07 mov [bx],al; 1 597 40D1 B0 B2 mov al, 10110010b; 1 598 40D3 BB 0803 mov bx,T0K; 1 599 40D6 88 07 mov [bx],al; 1 600 40D8 B0 4B mov al,75; 1 601 40DA BB 0802 mov bx,T0K2; 1 602 40DD 88 07 mov [bx],al; 1 603 40DF 32 C0 xor al,al; 1 604 40E1 88 07 mov [bx],al; 1 605 40E3 B0 32 mov al, 00110010b; канал 0 длительность t1=20 мкс 1 606 40E5 BB 0807 mov bx,T1K; 1 607 40E8 88 07 mov [bx],al; 1 608 40EA B0 32 mov al,50; загрузка константы пересчёта 50 1 609 40EC BB 0804 mov bx,T1K0; 1 610 40EF 88 07 mov [bx],al; 1 611 40F1 32 C0 xor al,al; 1 612 40F3 88 07 mov [bx],al; 1 613 40F5 B0 72 mov al, 01110010b; 1 614 40F7 BB 0807 mov bx,T1K; 1 615 40FA 88 07 mov [bx],al; 1 616 40FC B0 4B mov al,75; 1 617 40FE BB 0805 mov bx,T1K1; 1 618 4101 88 07 mov [bx],al; 1 619 4103 32 C0 xor al,al; 1 620 4105 88 07 mov [bx],al; 1 621 4107 B0 B2 mov al,10110010b; 1 622 4109 BB 0807 mov bx,T1K; 1 623 410C 88 07 mov [bx],al; 1 624 410E B0 4B mov al,75; 1 625 4110 BB 0806 mov bx,T1K2; 1 626 4113 88 07 mov [bx],al; 1 627 4115 32 C0 xor al,al; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 12 prog.asm 1 628 4117 88 07 mov [bx],al; 629 ;инициализация контроллера прерываний 630 init_IC; 1 631 4119 B0 17 mov al,ICICW1; 1 632 411B BB 1000 mov bx,IC0; 1 633 411E 88 07 mov [bx],al; 1 634 4120 B0 00 mov al,ICICW2; 1 635 4122 BB 1001 mov bx,IC1; 1 636 4125 88 07 mov [bx],al; 1 637 4127 B0 00 mov al,ICICW3; 1 638 4129 88 07 mov [bx],al; 1 639 412B B0 01 mov al,ICICW4; 1 640 412D 88 07 mov [bx],al; 641 ;создание таблицы прерыаний 642 412F E8 01D0 call Create_ivt; 643 ;разрешение прерываний 644 enable_int; 1 645 4132 B0 E0 mov al,ICOCW1; 1 646 4134 BB 1001 mov bx,IC1; 1 647 4137 88 07 mov [bx],al; 648 4139 main_loop: 649 enter_digital_data; 1 650 enter_digital_value IUvvx1x2x3 0 x1; 2 651 4139 50 push ax; 2 652 413A 53 push bx; 2 653 413B 51 push cx; 2 654 413C BB 2801 mov bx,IUvvx1x2x3; 2 655 413F 8A 07 mov al,[bx]; 2 656 4141 B9 0000 mov cx,0; 2 657 4144 83 F9 00 cmp cx,0; 2 658 4147 74 04 je ??0003; 2 659 4149 ??0002: 2 660 4149 D0 E8 shr al,1; 2 661 414B E2 FC loop ??0002; 2 662 414D ??0003: 2 663 414D 24 01 and al,00000001b; 2 664 414F 2E: A2 0020r mov x1,al; 2 665 4153 59 pop cx; 2 666 4154 5B pop bx; 2 667 4155 58 pop ax; 1 668 enter_digital_value IUvvx1x2x3 1 x2; 2 669 4156 50 push ax; 2 670 4157 53 push bx; 2 671 4158 51 push cx; 2 672 4159 BB 2801 mov bx,IUvvx1x2x3; 2 673 415C 8A 07 mov al,[bx]; 2 674 415E B9 0001 mov cx,1; 2 675 4161 83 F9 00 cmp cx,0; 2 676 4164 74 04 je ??0007; 2 677 4166 ??0006: 2 678 4166 D0 E8 shr al,1; 2 679 4168 E2 FC loop ??0006; 2 680 416A ??0007: 2 681 416A 24 01 and al,00000001b; 2 682 416C 2E: A2 0021r mov x2,al; 2 683 4170 59 pop cx; 2 684 4171 5B pop bx; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 13 prog.asm 2 685 4172 58 pop ax; 1 686 enter_digital_value IUvvx1x2x3 2 x3; 2 687 4173 50 push ax; 2 688 4174 53 push bx; 2 689 4175 51 push cx; 2 690 4176 BB 2801 mov bx,IUvvx1x2x3; 2 691 4179 8A 07 mov al,[bx]; 2 692 417B B9 0002 mov cx,2; 2 693 417E 83 F9 00 cmp cx,0; 2 694 4181 74 04 je ??000B; 2 695 4183 ??000A: 2 696 4183 D0 E8 shr al,1; 2 697 4185 E2 FC loop ??000A; 2 698 4187 ??000B: 2 699 4187 24 01 and al,00000001b; 2 700 4189 2E: A2 0022r mov x3,al; 2 701 418D 59 pop cx; 2 702 418E 5B pop bx; 2 703 418F 58 pop ax; 704 work_with_digital_data; 1 705 4190 2E: A0 0020r mov al,x1; 1 706 4194 2E: 22 06 0021r and al,x2; 1 707 4199 2E: 22 06 0022r and al,x3; 1 708 419E 2E: A2 0023r mov y1,al; 1 709 print_digital_value IUvivGy1y2y3_y5 0 y1 2 710 41A2 50 push ax; 2 711 41A3 53 push bx; 2 712 41A4 51 push cx; 2 713 41A5 BB 2001 mov bx,IUvivGy1y2y3_y5; 2 714 41A8 2E: A0 0023r mov al,y1; 2 715 41AC B9 0000 mov cx,0; 2 716 41AF 83 F9 00 cmp cx,0; 2 717 41B2 74 04 je ??000E 2 718 41B4 ??000D: 2 719 41B4 D0 E0 shl al,1; 2 720 41B6 E2 FC loop ??000D; 2 721 41B8 ??000E: 2 722 41B8 88 07 mov [bx],al; 2 723 41BA 32 C0 xor al,al; 2 724 41BC 88 07 mov [bx],al; 2 725 41BE 59 pop cx; 2 726 41BF 5B pop bx; 2 727 41C0 58 pop ax; 728 enter_analog_data; 1 729 enter_8bit_digital_value 0 0 Nv1 2 730 41C1 50 push ax; 2 731 41C2 53 push bx; 2 732 41C3 BB 2803 mov bx,IUvvK; 2 733 41C6 B0 00 mov al,0; 2 734 41C8 0C 04 or al,00000100b; 2 735 41CA 88 07 mov [bx],al; 2 736 41CC B0 00 mov al,0; 2 737 41CE 0C 02 or al,00000010b; 2 738 41D0 88 07 mov [bx],al; 2 739 41D2 90 nop; 2 740 41D3 90 nop; 2 741 41D4 B0 01 mov al,00000001b; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 14 prog.asm 2 742 41D6 88 07 mov [bx],al; 2 743 41D8 B0 00 mov al,00000000b; 2 744 41DA 88 07 mov [bx],al; 2 745 41DC BB 2801 mov bx,IUvvx1x2x3; 2 746 41DF ??000F: 2 747 41DF 8A 07 mov al,[bx]; 2 748 41E1 24 80 and al,10000000b; 2 749 41E3 74 FA jz ??000F; 2 750 41E5 BB 2800 mov bx,IUvvD; 2 751 41E8 8A 07 mov al,[bx]; 2 752 41EA 2E: A2 0024r mov Nv1,al; 2 753 41EE 5B pop bx; 2 754 41EF 58 pop ax; 1 755 enter_8bit_digital_value 0 1 Nv2 2 756 41F0 50 push ax; 2 757 41F1 53 push bx; 2 758 41F2 BB 2803 mov bx,IUvvK; 2 759 41F5 B0 00 mov al,0; 2 760 41F7 0C 04 or al,00000100b; 2 761 41F9 88 07 mov [bx],al; 2 762 41FB B0 01 mov al,1; 2 763 41FD 0C 02 or al,00000010b; 2 764 41FF 88 07 mov [bx],al; 2 765 4201 90 nop; 2 766 4202 90 nop; 2 767 4203 B0 01 mov al,00000001b; 2 768 4205 88 07 mov [bx],al; 2 769 4207 B0 00 mov al,00000000b; 2 770 4209 88 07 mov [bx],al; 2 771 420B BB 2801 mov bx,IUvvx1x2x3; 2 772 420E ??0010: 2 773 420E 8A 07 mov al,[bx]; 2 774 4210 24 80 and al,10000000b; 2 775 4212 74 FA jz ??0010; 2 776 4214 BB 2800 mov bx,IUvvD; 2 777 4217 8A 07 mov al,[bx]; 2 778 4219 2E: A2 0025r mov Nv2,al; 2 779 421D 5B pop bx; 2 780 421E 58 pop ax; 1 781 enter_8bit_digital_value 1 0 Nv3 2 782 421F 50 push ax; 2 783 4220 53 push bx; 2 784 4221 BB 2803 mov bx,IUvvK; 2 785 4224 B0 01 mov al,1; 2 786 4226 0C 04 or al,00000100b; 2 787 4228 88 07 mov [bx],al; 2 788 422A B0 00 mov al,0; 2 789 422C 0C 02 or al,00000010b; 2 790 422E 88 07 mov [bx],al; 2 791 4230 90 nop; 2 792 4231 90 nop; 2 793 4232 B0 01 mov al,00000001b; 2 794 4234 88 07 mov [bx],al; 2 795 4236 B0 00 mov al,00000000b; 2 796 4238 88 07 mov [bx],al; 2 797 423A BB 2801 mov bx,IUvvx1x2x3; 2 798 423D ??0011: Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 15 prog.asm 2 799 423D 8A 07 mov al,[bx]; 2 800 423F 24 80 and al,10000000b; 2 801 4241 74 FA jz ??0011; 2 802 4243 BB 2800 mov bx,IUvvD; 2 803 4246 8A 07 mov al,[bx]; 2 804 4248 2E: A2 0026r mov Nv3,al; 2 805 424C 5B pop bx; 2 806 424D 58 pop ax; 1 807 424E BB 1804 mov bx,CPK; 1 808 4251 8A 07 mov al,[bx]; 1 809 4253 2E: A2 0027r mov K,al; 810 work_with_analog_data Q; 1 811 4257 2E: A0 0025r mov al,Nv2; 1 812 425B 2E: 02 06 0027r add al,K; 1 813 4260 2E: 8A 1E 0024r mov bl,Nv1; 1 814 4265 3A D8 cmp bl,al; 1 815 4267 72 07 jb ??0012 1 816 4269 2E: A2 0028r mov Nv,al; 1 817 426D EB 06 90 jmp ??0013; 1 818 4270 ??0012: 1 819 4270 2E: 88 1E 0028r mov Nv,bl; 1 820 4275 ??0013: 1 821 4275 2E: A0 0028r mov al,Nv; 1 822 4279 2E: 3A 06 4000r cmp al,Q; 1 823 427E 77 20 ja ??0015; 1 824 print_digital_value IUvivGy1y2y3_y5 1 1 2 825 4280 50 push ax; 2 826 4281 53 push bx; 2 827 4282 51 push cx; 2 828 4283 BB 2001 mov bx,IUvivGy1y2y3_y5; 2 829 4286 B0 01 mov al,1; 2 830 4288 B9 0001 mov cx,1; 2 831 428B 83 F9 00 cmp cx,0; 2 832 428E 74 04 je ??0017 2 833 4290 ??0016: 2 834 4290 D0 E0 shl al,1; 2 835 4292 E2 FC loop ??0016; 2 836 4294 ??0017: 2 837 4294 88 07 mov [bx],al; 2 838 4296 32 C0 xor al,al; 2 839 4298 88 07 mov [bx],al; 2 840 429A 59 pop cx; 2 841 429B 5B pop bx; 2 842 429C 58 pop ax; 1 843 429D EB 1E 90 jmp ??0014; 1 844 42A0 ??0015: 1 845 print_digital_value IUvivGy1y2y3_y5 2 1 2 846 42A0 50 push ax; 2 847 42A1 53 push bx; 2 848 42A2 51 push cx; 2 849 42A3 BB 2001 mov bx,IUvivGy1y2y3_y5; 2 850 42A6 B0 01 mov al,1; 2 851 42A8 B9 0002 mov cx,2; 2 852 42AB 83 F9 00 cmp cx,0; 2 853 42AE 74 04 je ??0019 2 854 42B0 ??0018: 2 855 42B0 D0 E0 shl al,1; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 16 prog.asm 2 856 42B2 E2 FC loop ??0018; 2 857 42B4 ??0019: 2 858 42B4 88 07 mov [bx],al; 2 859 42B6 32 C0 xor al,al; 2 860 42B8 88 07 mov [bx],al; 2 861 42BA 59 pop cx; 2 862 42BB 5B pop bx; 2 863 42BC 58 pop ax; 1 864 42BD ??0014: 1 865 42BD 2E: A0 4002r mov al,a1 1 866 42C1 2E: F6 26 0026r mul Nv3; 1 867 42C6 2E: 02 26 4001r add ah,a0; 1 868 42CB 2E: 88 26 0029r mov y4,ah; 1 869 print_8bit_digital_value y4; 2 870 42D0 50 push ax; 2 871 42D1 53 push bx; 2 872 42D2 52 push dx; 2 873 42D3 BB 3002 mov bx,IUvivE1E2; 2 874 42D6 B0 01 mov al,00000001b; send E1=1 2 875 42D8 88 07 mov [bx],al; 2 876 42DA BB 3000 mov bx,IUvivy4; 2 877 42DD 2E: A0 0029r mov al, y4 2 878 42E1 88 07 mov [bx],al; 2 879 42E3 BB 3002 mov bx,IUvivE1E2; 2 880 42E6 B0 03 mov al,00000011b; send E2=1; 2 881 42E8 88 07 mov [bx],al; 2 882 42EA B0 00 mov al,0; 2 883 42EC 88 07 mov [bx],al; 2 884 42EE 5A pop dx; 2 885 42EF 5B pop bx; 2 886 42F0 58 pop ax; 887 CHECK_STOP; 1 888 42F1 50 push ax; 1 889 42F2 53 push bx; 1 890 42F3 BB 1806 mov bx,CPSTOP; 1 891 42F6 8A 07 mov al,[bx]; 1 892 42F8 22 C0 and al,al; 1 893 42FA 74 01 jz ??001B; 1 894 42FC ??001A: 1 895 42FC F4 HLT; остановка 1 896 42FD ??001B: 1 897 42FD 5B pop bx; 1 898 42FE 58 pop ax; 899 42FF E9 FE37 jmp main_loop; 900 901 ; формирование таблицы векторов прерываний 902 4302 create_ivt proc 903 4302 33 C0 xor ax, ax 904 4304 8E C0 mov es, ax 905 4306 26: C7 06 0000 4343r mov word ptr es:[0*4], offset int0_proc 906 430D 26: 8C 0E 0002 mov es:[0*2 + 2], cs 907 4312 26: C7 06 0004 4397r mov word ptr es:[1*4], offset int1_proc 908 4319 26: 8C 0E 0006 mov es:[1*4 + 2], cs 909 910 431E 26: C7 06 0008 43C2r mov word ptr es:[2*4], offset int2_proc 911 4325 26: 8C 0E 000A mov word ptr es:[2*4 + 2], cs 912 Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 17 prog.asm 913 432A 26: C7 06 000C 43C3r mov word ptr es:[3*4], offset int3_proc 914 4331 26: 8C 0E 000E mov es:[3*4 + 2], cs 915 4336 26: C7 06 0010 4431r mov word ptr es:[4*4], offset int4_proc 916 433D 26: 8C 0E 0012 mov es:[4*4+2],cs; 917 4342 C3 ret 918 4343 create_ivt endp 919 920 4343 int0_proc proc 921 print_digital_value IUvivGy1y2y3_y5 4 1; 1 922 4343 50 push ax; 1 923 4344 53 push bx; 1 924 4345 51 push cx; 1 925 4346 BB 2001 mov bx,IUvivGy1y2y3_y5; 1 926 4349 B0 01 mov al,1; 1 927 434B B9 0004 mov cx,4; 1 928 434E 83 F9 00 cmp cx,0; 1 929 4351 74 04 je ??001D 1 930 4353 ??001C: 1 931 4353 D0 E0 shl al,1; 1 932 4355 E2 FC loop ??001C; 1 933 4357 ??001D: 1 934 4357 88 07 mov [bx],al; 1 935 4359 32 C0 xor al,al; 1 936 435B 88 07 mov [bx],al; 1 937 435D 59 pop cx; 1 938 435E 5B pop bx; 1 939 435F 58 pop ax; 940 4360 B9 0011 mov cx,17; 941 4363 m_wait_30mks: 942 4363 E2 FE loop m_wait_30mks; 943 print_digital_value IUvivGy1y2y3_y5 4 1; 1 944 4365 50 push ax; 1 945 4366 53 push bx; 1 946 4367 51 push cx; 1 947 4368 BB 2001 mov bx,IUvivGy1y2y3_y5; 1 948 436B B0 01 mov al,1; 1 949 436D B9 0004 mov cx,4; 1 950 4370 83 F9 00 cmp cx,0; 1 951 4373 74 04 je ??001F 1 952 4375 ??001E: 1 953 4375 D0 E0 shl al,1; 1 954 4377 E2 FC loop ??001E; 1 955 4379 ??001F: 1 956 4379 88 07 mov [bx],al; 1 957 437B 32 C0 xor al,al; 1 958 437D 88 07 mov [bx],al; 1 959 437F 59 pop cx; 1 960 4380 5B pop bx; 1 961 4381 58 pop ax; 962 963 OUT_USAPP '!' 1 964 4382 50 push ax; 1 965 4383 53 push bx; 1 966 4384 BB 3805 mov bx,PPLSR; 1 967 4387 ??0020: 1 968 4387 8A 07 mov al,[bx]; 1 969 4389 A8 10 TEST al,00010000b;проверка на готовность передачи Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 18 prog.asm 1 970 438B 74 FA jz ??0020; 1 971 438D BB 3800 mov bx,PPTHR; 1 972 4390 B0 21 mov al,'!'; 1 973 4392 88 07 mov [bx],al; 1 974 4394 5B pop bx; 1 975 4395 58 pop ax; 976 ;ОСТАНОВ СИСТЕМЫ 977 STOP_SYSTEM 1 978 4396 F4 HLT; ОСТАНОВКА СИСТЕМЫ 979 4397 int0_proc endp 980 981 4397 int1_proc proc 982 ;запуск зуммера 983 4397 BB 1805 mov bx, CPZUMMER; 984 439A B0 01 mov al,00000001b; 985 439C 88 07 mov [bx],al; 986 987 439E BB 1802 mov bx,CPx1x2x3_y1y2y3_ 988 43A1 32 C0 xor al,al; 989 43A3 2E: 0A 06 0022r or al,x3; 990 43A8 D0 E0 shl al,1; 991 43AA 2E: 0A 06 0021r or al,x2; 992 43AF D0 E0 shl al,1; 993 43B1 2E: 0A 06 0020r or al,x1; 994 43B6 88 07 mov [bx],al; 995 996 ;выдача Nv1 997 43B8 BB 1800 mov bx,CPNv1; 998 43BB 2E: A0 0024r mov al,Nv1; 999 43BF 88 07 mov [bx],al; 1000 STOP_SYSTEM 1 1001 43C1 F4 HLT; ОСТАНОВКА СИСТЕМЫ 1002 43C2 int1_proc endp; 1003 1004 43C2 int2_proc proc 1005 1006 43C2 CF iret; 1007 43C3 int2_proc endp; 1008 1009 1010 43C3 int3_proc proc; 1011 43C3 FB sti; 1012 43C4 50 push ax; 1013 43C5 53 push bx; 1014 1015 43C6 NEXT_INT: 1016 43C6 BB 3802 mov bx,PPISR; 1017 43C9 8A 07 mov al,[bx]; 1018 43CB A8 06 TEST al,110b; 1019 43CD 74 16 jz NOT_ERROR; 1020 OUT_USAPP 'R' 1 1021 43CF 50 push ax; 1 1022 43D0 53 push bx; 1 1023 43D1 BB 3805 mov bx,PPLSR; 1 1024 43D4 ??0021: 1 1025 43D4 8A 07 mov al,[bx]; 1 1026 43D6 A8 10 TEST al,00010000b;проверка на готовность передачи Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 19 prog.asm 1 1027 43D8 74 FA jz ??0021; 1 1028 43DA BB 3800 mov bx,PPTHR; 1 1029 43DD B0 52 mov al,'R'; 1 1030 43DF 88 07 mov [bx],al; 1 1031 43E1 5B pop bx; 1 1032 43E2 58 pop ax; 1033 43E3 EB 39 jmp short ANOTHER; 1034 43E5 NOT_ERROR: 1035 1036 43E5 RECEIVE: 1037 43E5 BB 3800 mov bx,PPRHR; 1038 43E8 8A 07 mov al,[bx]; 1039 43EA 3C 44 cmp al,'D' 1040 43EC 75 16 jne NOT_D; 1041 OUT_USAPP y1 1 1042 43EE 50 push ax; 1 1043 43EF 53 push bx; 1 1044 43F0 BB 3805 mov bx,PPLSR; 1 1045 43F3 ??0022: 1 1046 43F3 8A 07 mov al,[bx]; 1 1047 43F5 A8 10 TEST al,00010000b;проверка на готовность передачи 1 1048 43F7 74 FA jz ??0022; 1 1049 43F9 BB 3800 mov bx,PPTHR; 1 1050 43FC 2E: A0 0023r mov al,y1; 1 1051 4400 88 07 mov [bx],al; 1 1052 4402 5B pop bx; 1 1053 4403 58 pop ax; 1054 4404 NOT_D: 1055 1056 4404 3C 41 cmp al, 'A' 1057 4406 75 16 jne NOT_A; 1058 OUT_USAPP y4; 1 1059 4408 50 push ax; 1 1060 4409 53 push bx; 1 1061 440A BB 3805 mov bx,PPLSR; 1 1062 440D ??0023: 1 1063 440D 8A 07 mov al,[bx]; 1 1064 440F A8 10 TEST al,00010000b;проверка на готовность передачи 1 1065 4411 74 FA jz ??0023; 1 1066 4413 BB 3800 mov bx,PPTHR; 1 1067 4416 2E: A0 0029r mov al,y4; 1 1068 441A 88 07 mov [bx],al; 1 1069 441C 5B pop bx; 1 1070 441D 58 pop ax; 1071 441E NOT_A: 1072 1073 441E ANOTHER: 1074 441E BB 3802 mov bx,PPISR; 1075 4421 8A 07 mov al,[bx]; 1076 4423 A8 01 TEST al,1; 1077 4425 75 9F jnz NEXT_INT; 1078 1079 4427 B0 20 mov al, EOI; 1080 4429 BB 1001 mov bx,IC1 1081 442C 88 07 mov [bx],al; 1082 442E 5B pop bx; 1083 442F 58 pop ax; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 20 prog.asm 1084 4430 CF iret; 1085 4431 int3_proc endp; 1086 1087 4431 int4_proc proc 1088 4431 FB sti; 1089 4432 50 push ax; 1090 4433 53 push bx; 1091 4434 51 push cx; 1092 4435 52 push dx; 1093 4436 2E: 8A 16 0023r mov dl,y1; 1094 443B D0 E2 shl dl,1; 1095 1096 1097 443D 2E: A0 0020r mov al,x1; 1098 4441 2E: 22 06 0021r and al,x2; 1099 4446 2E: 22 06 0022r and al,x3; 1100 1101 444B 0A D0 or dl,al; 1102 444D D0 E2 shl dl,1; 1103 1104 444F 2E: A0 0020r mov al,x1; 1105 4453 2E: 0A 06 0021r or al,x2; 1106 4458 2E: 0A 06 0022r or al,x3; 1107 1108 445D 0A D0 or dl,al; 1109 445F D0 E2 shl dl,1; 1110 1111 4461 B1 01 mov cl,1; 1112 4463 2E: A0 0028r mov al,Nv; 1113 4467 2E: 3A 06 4000r cmp al,Q; 1114 1115 446C 76 02 jbe metka_dalee; 1116 446E 32 C9 xor cl,cl; 1117 4470 metka_dalee: 1118 4470 0A D1 or dl,cl; 1119 1120 4472 BB 1802 mov bx,CPx1x2x3_y1y2y3_; 1121 4475 88 17 mov [bx],dl; 1122 1123 4477 BB 1800 mov bx,CPNv1; 1124 447A 2E: A0 4000r mov al,Q; 1125 447E 88 07 mov [bx],al; 1126 1127 1128 4480 B0 20 mov al, EOI; 1129 4482 BB 1001 mov bx,IC1 1130 4485 88 07 mov [bx],al; 1131 4487 5A pop dx; 1132 4488 59 pop cx; 1133 4489 5B pop bx; 1134 448A 58 pop ax; 1135 448B 83 C4 04 add sp,4; 1136 448E E9 FCA8 jmp main_loop 1137 4491 int4_proc endp; 1138 1139 org 7ff0h 1140 7FF0 E9 C010 jmp start; Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 21 prog.asm 1141 end start Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 22 Symbol Table Symbol Name Type Value ??0002 Near _TEXT:4149 ??0003 Near _TEXT:414D ??0006 Near _TEXT:4166 ??0007 Near _TEXT:416A ??000A Near _TEXT:4183 ??000B Near _TEXT:4187 ??000D Near _TEXT:41B4 ??000E Near _TEXT:41B8 ??000F Near _TEXT:41DF ??0010 Near _TEXT:420E ??0011 Near _TEXT:423D ??0012 Near _TEXT:4270 ??0013 Near _TEXT:4275 ??0014 Near _TEXT:42BD ??0015 Near _TEXT:42A0 ??0016 Near _TEXT:4290 ??0017 Near _TEXT:4294 ??0018 Near _TEXT:42B0 ??0019 Near _TEXT:42B4 ??001A Near _TEXT:42FC ??001B Near _TEXT:42FD ??001C Near _TEXT:4353 ??001D Near _TEXT:4357 ??001E Near _TEXT:4375 ??001F Near _TEXT:4379 ??0020 Near _TEXT:4387 ??0021 Near _TEXT:43D4 ??0022 Near _TEXT:43F3 ??0023 Near _TEXT:440D ??DATE Text "03/05/07" ??FILENAME Text "prog " ??TIME Text "21:09:17" ??VERSION Number 040A @32BIT Text 0 @CODE Text _TEXT @CODESIZE Text 0 @CPU Text 0101H @CURSEG Text _TEXT @DATA Text DGROUP @DATASIZE Text 0 @FILENAME Text PROG @INTERFACE Text 000H @MODEL Text 2 @STACK Text DGROUP @WORDSIZE Text 2 A0 Byte _TEXT:4001 A1 Byte _TEXT:4002 ANOTHER Near _TEXT:441E CPK Number 1804 CPK0 Number 1803 CPK1 Number 1807 CPNV1 Number 1800 CPSTOP Number 1806 CPX1X2X3_Y1Y2Y3_ Number 1802 Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 23 Symbol Table CPY4 Number 1801 CPZUMMER Number 1805 CREATE_IVT Near _TEXT:4302 DPK0 Number 2003 DPK1 Number 2007 DPK2 Number 200B DPKRA0 Number 2002 DPKRA1 Number 2001 DPKRD Number 2004 DPKRK Number 2000 DPRIA0 Number 2008 DPRIA1 Number 200A DPRID Number 2009 EOI Number 0020 IC0 Number 1000 IC1 Number 1001 ICICW1 Number 0017 ICICW2 Number 0000 ICICW3 Number 0000 ICICW4 Number 0001 ICOCW1 Number 00E0 INT0_PROC Near _TEXT:4343 INT1_PROC Near _TEXT:4397 INT2_PROC Near _TEXT:43C2 INT3_PROC Near _TEXT:43C3 INT4_PROC Near _TEXT:4431 IUVIVE1E2 Number 3002 IUVIVGY1Y2Y3_Y5 Number 2001 IUVIVK Number 3003 IUVIVY4 Number 3000 IUVVD Number 2800 IUVVK Number 2803 IUVVSTA0A1 Number 2802 IUVVX1X2X3 Number 2801 K Byte _TEXT:0027 MAIN_LOOP Near _TEXT:4139 METKA_DALEE Near _TEXT:4470 M_WAIT_30MKS Near _TEXT:4363 NEXT_INT Near _TEXT:43C6 NOT_A Near _TEXT:441E NOT_D Near _TEXT:4404 NOT_ERROR Near _TEXT:43E5 NV Byte _TEXT:0028 NV1 Byte _TEXT:0024 NV2 Byte _TEXT:0025 NV3 Byte _TEXT:0026 PPDLH Number 3801 PPDLL Number 3800 PPFCR Number 3802 PPIER Number 3801 PPISR Number 3802 PPLCR Number 3803 PPLSR Number 3805 PPMCR Number 3804 PPMSR Number 3806 PPRHR Number 3800 PPSPR Number 3807 Turbo Assembler Version 4.1 03/05/07 21:09:17 Page 24 Symbol Table PPTHR Number 3800 Q Byte _TEXT:4000 RECEIVE Near _TEXT:43E5 START Near _TEXT:4003 T0K Number 0803 T0K0 Number 0800 T0K1 Number 0801 T0K2 Number 0802 T1K Number 0807 T1K0 Number 0804 T1K1 Number 0805 T1K2 Number 0806 TEMP Byte _TEXT:002A X1 Byte _TEXT:0020 X2 Byte _TEXT:0021 X3 Byte _TEXT:0022 Y1 Byte _TEXT:0023 Y4 Byte _TEXT:0029 Macro Name CHECK_STOP DISABLE_INT ENABLE_INT ENTER_8BIT_DIGITAL_VALUE ENTER_ANALOG_DATA ENTER_DIGITAL_DATA ENTER_DIGITAL_VALUE INIT_CP INIT_DP INIT_IC INIT_IUVIV INIT_IUVV INIT_T INIT_USAPP MYPRINT OUT_USAPP PRINT_8BIT_DIGITAL_VALUE PRINT_DIGITAL_VALUE STOP_SYSTEM WORK_WITH_ANALOG_DATA WORK_WITH_DIGITAL_DATA Groups & Segments Bit Size Align Combine Class DGROUP Group _DATA 16 0000 Word Public DATA _TEXT 16 7FF3 Word Public CODE |
ПРИЛОЖЕНИЕ 2. ПРОТОКОЛ ОТЛАДКИ
Адреса памяти приведены в шестнадцатеричной системе исчисления.
Протокол отладки ввода данных с цифровых датчиков:
Адрес памяти | Команда | Данные | Комментарий |
Enter_digital_value IUvvx1x2x3 0 x1 | Макрос ввода данных с аналогового датчика x1 | ||
4139 | Push ax | Стек<-ax | Сохранение регистров |
413A | Push bx | Стек<-bx | |
413B | Push cx | Стек<-cx | |
413C | Mov bx,IUvvx1x2x3 | Bx=2801h | Занесение адреса порта в регистр |
413F | Mov al,[bx] | Al=5h | Считываем с порта |
4141 | Mov cx,0 | Cx=0 | Обнуление CX |
4144 | Cmp cx,0 | Проверка, нужно ли сдвигать для получения нужного бита | |
4147 | Je not_shr | ||
414D | And al,00000001b | AL=1 | Получаем младший бит |
414F | Mov x1,a1 | X1=1 | Сохранение в ОХУ |
4153 | Pop cx | Восстановление регистров | |
4154 | Pop bx | ||
4155 | Pop ax | ||
Enter_digital_value IUvvx1x2x3 1 x2 | Макрос ввода данных с аналогового датчика x2 | ||
4156 | Push ax | Стек<-ax | Сохранение регистров |
4157 | Push bx | Стек<-bx | |
4158 | Push cx | Стек<-cx | |
4159 | Mov bx,IUvvx1x2x3 | Bx=2801h | Занесение адреса порта в регистр |
415C | Mov al,[bx] | Al=5h | Считываем с порта |
415E | Mov cx,1 | Cx=1 | Обнуление CX |
4161 | Cmp cx,0 | Проверка, нужно ли сдвигать для получения нужного бита | |
4164 | Je not_shr | ||
4166 | LOOP_SHL:
Shr al,1 |
Al=00000010b; | |
4168 | Loop loop_shl | ||
416A | And al,00000001b | AL=0 | Получаем младший бит |
416C | Mov x2,a1 | X2=0 | Сохранение в ОХУ |
4170 | Pop cx | Восстановление регистров | |
4171 | Pop bx | ||
4172 | Pop ax | ||
Enter_digital_value IUvvx1x2x3 2 x3 | Макрос ввода данных с аналогового датчика x3 | ||
4173 | Push ax | Стек<-ax | Сохранение регистров |
4174 | Push bx | Стек<-bx | |
4175 | Push cx | Стек<-cx | |
4176 | Mov bx,IUvvx1x2x3 | Bx=2801h | Занесение адреса порта в регистр |
4179 | Mov al,[bx] | Al=5h | Считываем с порта |
417B | Mov cx,2 | Cx=2 | Обнуление CX |
417E | Cmp cx,0 | Проверка, нужно ли сдвигать для получения нужного бита | |
4181 | Je not_shr | ||
4183 | LOOP_SHL:
Shr al,1 |
Al=00000010b; | |
4185 | Loop loop_shl | ||
4183 | Shr al,1 | Al=0000001b; | |
4185 | Loop loop_shl | ||
4187 | And al,00000001b | AL=1 | Получаем младший бит |
4189 | Mov x3,a1 | X3=1 | Сохранение в ОХУ |
418D | Pop cx | Восстановление регистров | |
418E | Pop bx | ||
418F | Pop ax | ||
Протокол отладки обработки данных с цифровых датчиков:
(при x1=1,x2=0,x3=1)
Адрес памяти | Команда | Данные | Комментарий |
4190 | mov al,x1; | AL=1 | Чтение x1 |
4194 | And al,x2 | AL=0 | Поразрядное и c x2 |
4199 | And al,x3 | AL=0 | Поразрядное и c x3 |
419E | Mov y1,al | Y1=0 | Сохранение в ОЗУ |
Print_digital_value IUvivGy1y2y3_y5 0 y1 | Макрос выработки сигнала y1 | ||
41A2 | Push ax | Сохранение регистров | |
41A3 | Push bx; | ||
41A4 | Push cx; | ||
41A5 | Mov bx,IUvivGy1y2y3_y5; | BX=2001h | Загрузка в регистр адреса порта вывода |
41A8 | Mov al,y1 | AL=0 | Загрузка в регистр передаваемого сигнала |
41AC | Mov cx,0 | CX=0 | Обнуление СХ |
41AF | Cmp cx,0 | Если СХ=1, то сдвиг не нужен | |
41B2 | Je not_shl | ||
41B8 | NOT_SHL:
Mov [BX],AL |
Устанавливаем бит | |
41BA | Xor al,al | AL=0 | |
41BC | Mov [BX],al | Снятие бита | |
41BE | Pop cx | Восстановление регистров | |
41BF | Pop bx | ||
41C0 | Pop ax |
41BF
41C0
Протокол отладки ввода данных с аналоговых датчиков:
Адрес памяти | Команда | Данные | Комментарий |
Enter_8bit_digital_value 0 0 Nv1 | Макрос ввода Nv1 с аналоговых датчиков | ||
41C1 | Push ax | Сохранение регистров | |
41C2 | Push bx | ||
41C3 | Mov bx,IUvvK | Bx=2803h | Занесение в регистр адреса регистра команд порта ввода |
41C6 | Mov al,0 | Al=0 | Загрузка в AL адреса аналогового сигнала (A1) |
41C8 | Or al,00000100b | Al=00000100b | Создание команды |
41CA | Mov [bx],al; | Установка бита А1 порта ввода | |
41CC | Mov al,0; | Al=0 | Загрузка в AL адреса аналогового сигнала (А0) |
41CE | Or al,00000010b | Al=00000010b | Создание команды |
41D0 | Mov [bx],al | Установка бита А0 порта ввода | |
41D2 | Nop | Ожидание 1000 нс. | |
41D3 | Nop | ||
41D4 | Mov al,00000001b | Al=1 | Запуск АЦП |
41D6 | Mov [bx],al; | ||
41D8 | Mov al,00000000b | Al=0 | |
41DA | Mov [bx],al | ||
41DC | Mov bx,IUvvx1x2x3 | Bx=2801h | |
41DF | M_wait_result:
Mov al,[bx]; |
Al=10000000b | Проверка на окончание преобразования |
41E1 | And al,10000000b; | ||
41E3 | Jz m_wait_result | ||
41E5 | Mov bx,IUvvD; | Bx=2800h | Загрузка в регистр адреса порта ввода D |
41E8 | Mov al,[bx] | Al=34h | Считывание данных |
41EA | Mov Nv1,al; | Nv1=34h; | Сохранение в ОЗУ |
41EE | Pop bx | Восстановление регистров | |
41EF | Pop ax; | ||
Enter_8bit_digital_value 0 1 Nv2 | Макрос считывания данных Nv2 | ||
41F0 | Push ax | Сохранение регистров | |
41F1 | Push bx | ||
41F2 | Mov bx,IUvvK | Bx=2803h | Занесение в регистр адреса регистра команд порта ввода |
41F5 | Mov al,0 | Al=0 | Загрузка в AL адреса аналогового сигнала (A1) |
41F7 | Or al,00000100b | Al=00000100b | Создание команды |
41F9 | Mov [bx],al; | Установка бита А1 порта ввода | |
41FB | Mov al,1; | Al=1 | Загрузка в AL адреса аналогового сигнала (А0) |
41FD | Or al,00000010b | Al=00000011b | Создание команды |
41FF | Mov [bx],al | Установка бита А0 порта ввода | |
4201 | Nop | Ожидание 1000 нс. | |
4202 | Nop | ||
4203 | Mov al,00000001b | Al=1 | Запуск АЦП |
4205 | Mov [bx],al; | ||
4207 | Mov al,00000000b | Al=0 | |
4209 | Mov [bx],al | ||
420B | Mov bx,IUvvx1x2x3 | Bx=2801h | |
420E | M_wait_result:
Mov al,[bx]; |
Al=10000000b | Проверка на окончание преобразования |
4210 | And al,10000000b; | ||
4212 | Jz m_wait_result | ||
4214 | Mov bx,IUvvD; | Bx=2800h | Загрузка в регистр адреса порта ввода D |
4217 | Mov al,[bx] | Al=70h | Считывание данных |
4219 | Mov Nv2,al; | Nv2=70h; | Сохранение в ОЗУ |
421D | Pop bx | Восстановление регистров | |
421E | Pop ax; | ||
Enter_8bit_digital_value 1 0 Nv3 | Макрос считывания данных с Nv3 | ||
421F | Push ax | Сохранение регистров | |
4221 | Push bx | ||
4224 | Mov bx,IUvvK | Bx=2803h | Занесение в регистр адреса регистра команд порта ввода |
4226 | Mov al,1 | Al=1 | Загрузка в AL адреса аналогового сигнала (A1) |
4228 | Or al,00000100b | Al=00000101b | Создание команды |
422A | Mov [bx],al; | Установка бита А1 порта ввода | |
422C | Mov al,0; | Al=0 | Загрузка в AL адреса аналогового сигнала (А0) |
422E | Or al,00000010b | Al=00000010b | Создание команды |
4230 | Mov [bx],al | Установка бита А0 порта ввода | |
4231 | Nop | Ожидание 1000 нс. | |
4231 | Nop | ||
4232 | Mov al,00000001b | Al=1 | Запуск АЦП |
4234 | Mov [bx],al; | ||
4236 | Mov al,00000000b | Al=0 | |
4238 | Mov [bx],al | ||
423A | Mov bx,IUvvx1x2x3 | Bx=2801h | |
423D | M_wait_result:
Mov al,[bx]; |
Al=10000000b | Проверка на окончание преобразования |
423F | And al,10000000b; | ||
4241 | Jz m_wait_result | ||
4243 | Mov bx,IUvvD; | Bx=2800h | Загрузка в регистр адреса порта ввода D |
4246 | Mov al,[bx] | Al=1h | Считывание данных |
4248 | Mov Nv3,al; | Nv3=1h; | Сохранение в ОЗУ |
424C | Pop bx | Восстановление регистров | |
424D | Pop ax; | ||
424E | Mov bx,CPK | BX=1803h | |
4251 | Mov al,[bx] | Al=03h | Считывание К |
4253 | Mov K,al | K=03h | |
Протокол отладки обработки данных с аналоговых датчиков:
(Nv1=34h,Nv2=70h, Nv3=1,K=03h, Q=64h, a1=10h,a0=5h)
Адрес памяти | Команда | Данные | Комментарий |
4257 | mov al,Nv2; | AL=70h | Запись в AL Nv2 |
425B | add al,K; | AL=73h | Прибавление K |
4260 | mov bl,Nv1; | BL=34h | |
4265 | cmp bl,al; | Сравниваем Nv1 и Nv2+k | |
4267 | jb NV_BL | Переход на NV_BL | |
NV_BL: | |||
4270 | mov Nv,bl; | Nv=34h | Nv=min(Nv1;Nv2+K) |
dalee1: | |||
4275 | mov al,Nv; | AL=34h; | |
4279 | cmp al,Q; | Сравнение Q и Nv | |
427E | ja set_y3; | ||
print_digital_value
IUvivGy1y2y3_y5 1 1 |
Макрос выдачи сигнала y2 | ||
4280 | Push ax | Сохранение регистров | |
4281 | Push bx | ||
4282 | Push cx | ||
4283 | Mov bx, IUvivGy1y2y3_y5 | BX= 2001h | Загрузка адреса порта вывода |
4286 | Mov al,1 | Al=1 | |
4288 | Mov cx,1 | CX=1 | |
428B | Cmp cx,0 | Проверка нужно ли сдвигать | |
428E | Je not_shl | ||
4294 | NOT_SHL:
Mov [bx],al |
||
4296 | Xor al,al; | AL=0 | |
4298 | Mov [bx],al | Выдача сигнала | |
429A | Pop cx | Восстановление регистров | |
429B | Pop bx | ||
429C | Pop ax | ||
429D | jmp dalee2; | ||
dalee2: | |||
42BD | mov al,a1 | AL=10h | Вычисление y4=a0+a1*Nv3 |
42C1 | mul Nv3; | AH=0, AL=10 | |
42C6 | add ah,a0; | AH=5h | |
42CB | mov y4,ah; | Y4=5h | Созранение y4 в ОЗУ |
print_8bit_digital_value y4; | Макрос выдачи управляющего сигнала y4 | ||
42D0 | Push ax | Сохранение регистров | |
42D1 | Push bx | ||
42D2 | Push dx | ||
42D3 | Mov bx,IUvivE1E1 | BX=3002h | Загрузка в регистр адреса порта вывода Е1Е2 |
42D6 | Mov al,00000001b | Установка Е1 | |
42D8 | Mov [bx],al | ||
42DA | Mov bx,IUvivy4 | Bx=3000h | |
42DD | Mov al,y4 | Al=5h | |
42E1 | Mov [bx],al | Вывод у4 в порт | |
42E3 | Mov bx,IUvivE1E2 | BX=3002h | |
42E6 | Mov al,00000011b | Al=00000011b | |
42E8 | Mov [bx],al | Преобразование сигнала в аналоговый | |
42EA | Mov al,0 | Al=0 | |
42EC | Mov [bx],al | Установка Е1Е2 в начальное состояние | |
42EE | Pop dx | Восстановление регистров | |
42EF | Pop bx | ||
42D0 | Pop ax |
ПРИЛОЖЕНИЕ 3. ОПИСАНИЕ ПРОГРАММЫ ОТЛАДКИ
Программы отладки получается из программы прошивки заменой всех операций вывода сигналов операцией вывода сигналов на экран. Для вывода на экран используется функции MS-DOS. Также в программе прошивки заменяются все операции ввода операциями ввода с клавиатуры (с помощью функций MS-DOS). Перед тем, как вывести на экран все значения преобразуются в символы. Восьми битные числа преобразуются в строку, в которой содержится число в шестнадцатеричной системе исчисления.
В конце всех операций обработки в макросе проверки на ОСТАНОВ добавляется проверка на нажатие других клавиш, приводящим к эмуляции различных прерываний. В самих прерываниях весь ввод-вывод заменяется также вышеприведённым способом.
Также в программе отладки макрос останова системы заменяется на функцию MS-DOS завершения программы.
Макросы инициализации устройств: таймеров, контроллера прерываний, пульта управления, отладочного пульта и т. д. в программе отладки не меняются, так как проверить верно ли инициализировано устройство без стопроцентного эмулятора не представляется возможным.
Скачать ZIP-архив с исходными кодами по курсовому проектированию МПСС