Приложение 2: Листинг программы
Адрес |
Метка |
Команда |
Комментарий |
|
0000h |
Di |
; Запрет прерываний |
||
0001h |
Lxi SP,03FFh |
; Инициализация стека |
||
; Инициализация ППА: |
||||
; канал A – режим 0, ввод; |
||||
; канал B – режим 0, вывод |
||||
0004h |
Mvi A,91h |
; канал CH – режим 0,вывод |
||
0006h |
Out F3h |
; канал CL – режим 0, ввод |
||
0008h |
Mvi A,12h |
; Инициализация таймера 1 |
||
000Ah |
Out E3h |
; Канал 0 в режим 1 |
||
000Ch |
Out E7h |
; Таймер 2, канал 0 тот же |
||
000Eh |
Mvi A,52h |
; режим |
||
0010h |
Out E3h |
; Канал 1 в режим 1 |
||
0012h |
Mvi A,92h |
; Канал 2 в режим 1 |
||
0014h |
Out E3h |
|||
0016h |
Mvi A,87h |
; Инициализация таймера 2 |
||
0018h |
Out E7h |
; Канал 1 в режим 3 |
||
001Ah |
Mvi A,97h |
; Канал 2 в режим 3 для |
||
001Ch |
Out E7h |
; синхронизации ПСА |
||
; Инициализация ПСА |
||||
001Eh |
Xra A |
; Программный сброс |
||
001Fh |
Out F9h |
|||
0021h |
Out F9h |
|||
0023h |
Out F9h |
|||
; Стоп-бит длиной 1.5 бита, |
||||
; контроль паритета – на чет- |
||||
0025h |
Mvi A,BEh |
; ность, длина символа 8 бит, |
||
0027h |
Out F9h |
; ассинхронный режим 1:16 |
||
; Инициализация ПКП |
||||
0029h |
Mvi A,D6h |
; Начальный адрес таблицы |
||
002Bh |
Out FCh |
; векторов – 01C0h, 4хбайтныйррhррр |
||
002Dh |
Mvi A,01h |
; формат команды, ПКП в сис- |
||
002Fh |
Out FDh |
; теме один, разрешить только |
||
0031h |
Mvi A,0Fh |
; 4 первых прерывания |
||
0033h |
Out FDh |
|||
0035h |
Ei |
|||
; Обработка цифровой инфор- |
||||
; мации |
||||
0036h |
BEGIN: |
In F2h |
; Опрос датчиков x1 - x4 |
|
0038h |
Ani 0Fh |
|||
003Ah |
Sta ADR_X |
; Сохранение значений x1-x4 |
||
003Dh |
Cpi 01h |
; Сравнение с комбинацией, |
||
003Fh |
Jz M1 |
; при которой Y1=0 |
||
0042h |
Xra A |
; Если не равно, то Y1=0 |
||
0043h |
Jmp EXIT |
|||
0046h |
M1: |
Mvi A,B4h |
; Иначе выдать сигнал Y1 дли- |
|
0048h |
Out E0h |
; тельностью 90 мкс (180 так- |
||
004Ah |
Mvi A,01h |
; тов). |
||
004Ch |
EXIT: |
Sta ADR_Y1 |
; Сохранение Y1 |
|
; Обработка аналоговой ин- |
||||
; формации |
||||
004Fh |
Mvi A,02h |
; Выбор V1 и старт АЦП |
||
0051h |
Out F2h |
|||
0053h |
Xra A |
; Снятие сигнала старта |
||
0054h |
Out F2h |
|||
0056h |
In F0h |
; Чтение N1 |
||
0058h |
Sta ADR_N1 |
; Сохранение N1 |
||
005Bh |
Mov B,A |
|||
005Dh |
Mvi A,06h |
; Выбор V2 и старт АЦП |
||
005Fh |
Out F2h |
|||
0061h |
Xra A |
; Снятие сигнала старта |
||
0062h |
Out F2h |
|||
0064h |
In F0h |
; Чтение N2 |
||
0066h |
Cmp B |
; Сравнение N1 и N2 |
||
0067h |
Jnc M2 |
|||
006Ah |
Mov A,B |
; Если N1>N2, то (A)¬(N1) |
||
006Ch |
M2: |
Sta ADR_N |
; Сохранение N |
|
006Fh |
Mov B,A |
|||
0071h |
Lda ADR_Q |
; Загрузка константы Q |
||
0074h |
Cmp B |
; и сравнение ее с N |
||
0075h |
Jnc M3 |
|||
0078h |
Mov A,B |
; Если N>Q, то |
||
007Ah |
Sta ADR_NQ |
; сохранить результат и |
||
007Dh |
Mvi A,A0h |
; выдать сигнал Y3 длитель- |
||
007Fh |
Out E2h |
; ностью 80 мкс (160 тактов) |
||
0081h |
Jmp M4 |
|||
0084h |
M3: |
Sta ADR_NQ |
; Если Q>N, то сохранить ре- |
|
0087h |
Mvi A,50h |
; зультат и выдать сигнал Y2 |
||
0089h |
Out E1h |
; длительностью 40 мкс. |
||
008Bh |
M4: |
Mvi A,0Ah |
; Выбор V3 и старт АЦП |
|
008Dh |
Out F2h |
|||
008Fh |
Xra A |
; Снятие сигнала старта |
||
0090h |
Out F2h |
|||
0092h |
In F0h |
; Чтение N3 |
||
0094h |
Mov B,A |
|||
0096h |
Lda ADR_A1 |
; Чтение А1 |
||
0099h |
Mov C,A |
|||
009Bh |
Call MULT |
; Умножение А1 на N3 |
||
009Eh |
Lda ADR_A0 |
; Чтение А0 |
||
00A1h |
Add H |
; Сложение А0+А1*N3 |
||
00A2h |
Sta ADR_Y4 |
; Сохранение Y4 |
||
00A5h |
Out F1h |
; Выдача в ЦАП |
||
00A7h |
Mvi A,99h |
; Перенастройка ППА: |
||
00A9h |
Out F3h |
; CH на ввод |
||
00ABh |
In F2h |
; Чтение сигнала с кнопки |
||
00ADh |
Ani 80h |
; “Останов” |
||
00AFh |
Cpi 80h |
; Если кнопка нажата, то |
||
00B1h |
Jz STOP |
; останов |
||
00B4h |
Mvi A,91h |
; Иначе – перенастройка ППА |
||
00B6h |
Out F3h |
|||
00B8h |
Jmp BEGIN |
; и переход в начало |
||
00BBh |
STOP: |
Hlt |
||
00C0h |
ADR_A0: |
; Константа А0 |
||
00C1h |
ADR_A1: |
; Константа А1 |
||
00C2h |
ADR_Q: |
; Константа Q |
||
00C3h |
MULT: |
; Подпрограмма умножения |
||
00E1h |
||||
;Обработка прерываний |
||||
;Прерывание от источника питания INT0 |
||||
0100h |
Lda ADR_ON |
; Проверка активности канала |
||
0103h |
Rar |
; связи |
||
0104h |
Jnc M5 |
; При его активности выдать |
||
0107h |
Mvi A,”!” |
; код “!” |
||
0109h |
Out F8h |
|||
010Bh |
M5: |
Mvi A,02h |
; Сохранение константы для |
|
010Dh |
Sta ADR_WT |
; пустого цикла |
||
0110h |
Mvi A,36h |
; Запуск таймера – импульс с |
||
0112h |
Out E6h |
; длительностью 30 мкс |
||
0114h |
Lda ADR_WT |
|||
0117h |
M6: |
Dcr A |
; Пустой цикл общей длитель- |
|
0118h |
Jnz M6 |
; ностью 43 такта |
||
011Bh |
Mvi A,36h |
; Вместе с Mvi и Out – 60 тактов |
||
011Dh |
Out E6h |
; Запуск таймера – импульс с |
||
011Fh |
Hlt |
; длительностью 30 мкс |
||
;Прерывание от аварийного датчика INT1 |
||||
0120h |
Di |
|||
0121h |
Mvi A,A0h |
; Запуск таймера для генерации |
||
0123h |
Out E5h |
; меандра с частотой 500 Гц |
||
0125h |
Mvi A,0Fh |
|||
0127h |
Out E5h |
|||
0129h |
Ei |
|||
012Ah |
Lda ADR_X |
; Выдача значений x1-x4 в |
||
012Dh |
Out E8h |
; регистр индикации RG1 |
||
012Fh |
Lda ADR_N1 |
; Выдача значения N1 в регистр |
||
0132h |
Out Ech |
; индикации RG2 |
||
0134h |
Hlt |
|||
;Прерывание от внешней ЭВМ INT2 |
||||
0135h |
Di |
|||
0136h |
Push PSW |
; Сохранение всех регистров, |
||
0137h |
Push H |
; которые использует основ- |
||
0138h |
Push B |
; ная программа |
||
0139h |
Mvi A,01 |
; Установка флага активности |
||
013Bh |
Sta ADR_ON |
; канала связи |
||
013Eh |
Ei |
|||
013Fh |
L1: |
In F9h |
; Чтение слова состояния SW |
|
0141h |
Ani 30h |
; Проверка наличия ошибок |
||
0143h |
Jz M7 |
|||
0146h |
Mvi A,”R” |
; Уведомление внешней ЭВМ |
||
0148h |
Out F8h |
; об ошибке |
||
014Ah |
Mvi A,15h |
; Разрешение приема и передачи |
||
014Ch |
Out F9h |
; и сброс флагов |
||
014Eh |
Jmp L1 |
|||
0151h |
M7: |
Mvi A,02h |
; Запрос готовности приемника |
|
0153h |
Out F9h |
|||
0155h |
In F9h |
|||
0157h |
Ral |
|||
0158h |
Jnc M7 |
; Цикл ожидания готовности |
||
015Bh |
In F8h |
; Чтение данных с ЭВМ |
||
015Dh |
Cpi “D” |
|||
015Fh |
Jnz M8 |
|||
0162h |
Lda ADR_Y1 |
; Если принт символ “D”-выдать |
||
0165h |
Out F8h |
; значение Y1 |
||
0167h |
Jmp M9 |
|||
016Ah |
M8: |
Cpi “A” |
||
016Ch |
Jnz M9 |
|||
016Fh |
Lda ADR_Y4 |
; Если принят символ “A”-выдать |
||
0172h |
Out F8h |
; значение Y4 |
||
0174h |
M9: |
Mvi A,15h |
; Сброс флагов, разрешение |
|
0176h |
Out F9h |
; приема и передачи |
||
0178h |
Mvi A,20h |
; Снятие флага отработавшего |
||
017Ah |
Out FCh |
; прерывания |
||
017Ch |
Xra A |
; Сброс флага активности |
||
017Dh |
Sta ADR_ON |
; канала связи |
||
0180h |
Pop B |
; Восстановление содержимого |
||
0181h |
Pop H |
; регистров прерванной |
||
0182h |
Pop PSW |
; программы |
||
0183h |
Ret |
; Возврат в программу |
||
;Прерывание от оператора INT3 |
||||
0184h |
Lda ADR_Y4 |
; Выдача значения Y4 в регистр |
||
0187h |
Out E8h |
; РИ1 |
||
0189h |
Lda ADR_NQ |
; Выдача результата сравнения |
||
018Ch |
Out E8h |
; (N,Q) в регистр РИ1 |
||
018Eh |
Lda ADR_X |
; Загрузка значений датчиков X |
||
0191h |
Cpi 0Fh |
;Их произведение равно единице |
||
; если все x равны единице |
||||
0193h |
Jnz M10 |
; иначе их произведение |
||
0196h |
Mvi A,01h |
; равно нулю |
||
0198h |
Jmp M11 |
|||
019Bh |
M10: |
Xra A |
; Выдача произведения |
|
019Ch |
M11: |
Out E8h |
; в регистр РИ1 |
|
019Eh |
Lda ADR_X |
; Загрузка значений датчиков X |
||
01A1h |
CPI 00h |
; Их сумма равна нулю если все |
||
01A3h |
Jnz M12 |
; x равны нулю, иначе их сумма |
||
01A6h |
Xra A |
; равна единице |
||
01A7h |
Jmp M13 |
|||
01AAh |
M12: |
Mvi A,01h |
||
01ACh |
M13: |
Out E8h |
; Выдача суммы в РИ1 |
|
01AEh |
Lda ADR_Q |
; Загрузка константы Q и ее |
||
01B1h |
Out Ech |
; выдача в регистр РИ2 |
||
01B3h |
Mvi A,20h |
; Снятие флага отработавшего |
||
01B5h |
Out FCh |
; прерывания |
||
01B7h |
Jmp BEGIN |
; Возврат к началу обработки |
||
01BAh |
||||
;Таблица векторов прерываний |
||||
01C0h |
INT0: |
Jmp 0100h |
||
01C4h |
INT1: |
Jmp 0120h |
||
01C8h |
INT2: |
Call 0135h |
||
01CCh |
INT3: |
Jmp 0175h |
||
;Переменные, хранящиеся в ОЗУ |
||||
0300h |
Db ADR_X |
; Значение датчиков x1 – x4 |
||
0301h |
Db ADR_Y1 |
; Значение сигнала Y1 |
||
0302h |
Db ADR_N1 |
; Значение N1 |
||
0303h |
Db ADR_N |
; Значение N |
||
0304h |
Db ADR_NQ |
; Результат сравнения N и Q |
||
0305h |
Db ADR_Y4 |
; Значение Y4 |
||
0306h |
Db ADR_ON |
; Флаг активности канала связи |
||
0307h |
Db ADR_WT |
; Константа для организации |
||
; цикла 30 мкс |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.