| Адрес | Содержание |
| F400 | Младший адрес стека |
| F4FA-F4FC | Преобразованное значение показаний датчика. |
| F4FF | Временное хранение показаний датчика. |
| F500 | Номер опрашиваемого датчика (00h-03h) |
| F6A0-F6E0 | Хранение текущих и предельных значений для каждого датчика |
| F701 | Счетчик сканирования |
| F702 | Предварительное сохранение цифры после ввода с клавиатуры |
| F703 | (00h-02h) Определяет режим изменения информации: 00 - индикация текущего значения 01 - ввод «минимума» 02 - ввод «максимума» |
| F705 | Индикатор сброса перед записью [00h] - сброшено, [01h] - нет. |
| F706 | Запоминание последнего выбранного датчика для проверки повторного выбора. |
|
Младшие байты адресов подпрограмм клавиш хранятся по адресам:
| |
| F70E | «1» |
| F71E | «2» |
| F72E | «3» |
| F73E | «4» |
| F70D | «5» |
| F71D | «6» |
| F72D | «7» |
| F73D | «8» |
| F70B | «9» |
| F71B | «0» |
| F72B | «С» |
| F73B | «Ent» |
| F707 | «A» |
| F717 | «B» |
| F727 | «C» |
| F737 | «D» |
|
| |
| F7FE-F7FC | (00h-09h) Определяет текущее индицируемое значение. |
| F7FF | (0Ah-0Dh) Определяет датчик, показания с которого индицируются. |
ПРИЛОЖЕНИЕ 4
Распределение адресов ПЗУ.
| Адрес | Содержание |
| 0028 | JMP M1 Переход к подпрограмме обработки прерываний |
| 0600-0629 | Подпрограмма клавиши «Ent» |
| 0630 | Подпрограмма клавиши «A» |
| 0640 | Подпрограмма клавиши «B» |
| 0650 | Подпрограмма клавиши «C» |
| 0660 | Подпрограмма клавиши «D» |
| Коды символов: | |
| 06F0 | «0»=11000000=C0h |
| 06F1 | «1»= 11111001=F9h |
| 06F2 | «2»=10100100=A4h |
| 06F3 | «3»=10110000=B0h |
| 06F4 | «4»=10011001=99h |
| 06F5 | «5»=10010010=92h |
| 06F6 | «6»=10000010=82h |
| 06F7 | «7»=11111000=F8h |
| 06F8 | «8»=10000000=80h |
| 06F9 | «9»=10010000=90h |
| 06FA | «A»=10001000=88h |
| 06FB | «B»=10000011=83h |
| 06FC | «C»=11000110=C6h |
| 06FD | «D»=10100001=A1h |
| 06FE-070D | Хранение младших байтов адресов подпрограмм клавиш, которые при инициализации заносятся в ОЗУ по определенным адресам. |
| Подпрограммы клавиш хранятся по следующим адресам: | |
| 070E | «1» |
| 0713 | «2» |
| 0718 | «3» |
| 071D | «4» |
| 0722 | «5» |
| 0727 | «6» |
| 072C | «7» |
| 0731 | «8» |
| 0736 | «9» |
| 073B | «0» |
| 0740-07A9 | Подпрограмма ввода цифровых значений. |
| 07B0 | Переход на подпрограмму клавиши «A» |
| 07B3 | Переход на подпрограмму клавиши «B» |
| 07B6 | Переход на подпрограмму клавиши «C» |
| 07B9 | Переход на подпрограмму клавиши «D» |
| 07BC | Переход на подпрограмму клавиши «Ent» |
| 07D0 | Начало подпрограммы клавиши «C» |
| Остальные | Программы: инициализации, основная, вспомогательные подпрограммы. |
ПРИЛОЖЕНИЕ 5
Программа.
| Метка | Команда | Комментарий |
| MVI A, 90h | Настройка ППИ (датчики, управление). | |
| OUT F3h | ||
| MVI A, FFh | Выключаем всю сигнализацию и управление. | |
| OUT F2h | ||
| MVI A, 82h | Настройка ППИ (индикация, клавиатура). | |
| OUT FBh | ||
| LXI SP, F400h | Инициализация стека. | |
| LDA 06FEh | Перенос адресов подпрограмм из ПЗУ в ОЗУ. | |
| STA F70Eh | ||
| LDA 06FFh | ||
| STA F71Eh | ||
| LDA 0700h | ||
| STA F72Eh | ||
| LDA 0701h | ||
| STA F73Eh | ||
| LDA 0702h | ||
| STA F70Dh | ||
| LDA 0703h | ||
| STA F71Dh | ||
| LDA 0704h | ||
| STA F72Dh | ||
| LDA 0705h | ||
| STA F73Dh | ||
| LDA 0706h | ||
| STA F70Bh | ||
| LDA 0707h | ||
| STA F71Bh | ||
| LDA 0708h | ||
| STA F72Bh | ||
| LDA 0709h | ||
| STA F73Bh | ||
| LDA 070Ah | ||
| STA F707h | ||
| LDA 070Bh | ||
| STA F717h | ||
| LDA 070Ch | ||
| STA F727h | ||
| LDA 070Bh | ||
| STA F737h | ||
| MVI A, 30h | Настройка таймера. | |
| OUT 03h | ||
| MVI A, 30h | ||
| OUT 00h | ||
| MVI A, 75h | ||
| OUT 00h | ||
| JMP OPR2 | Переход к основной программе. | |
| M1 | PUSH PSW | Подпрограмма обработки прерывания. |
| PUSH B | ||
| PUSH D | ||
| PUSH H | ||
| LDA F701h | Начало ввода с клавиатуры | |
| RLC | ||
| RLC | ||
| RLC | ||
| RLC | ||
| OUT FAh | Сканирование | |
| MOV E,A | ||
| MVI D, F7h | ||
| IN F9h | Ввод с клавиатуры | |
| XRI F0h | Обнуление старших битов | |
| ADD E | ||
| MOV E, A | ||
| LDAX D | ||
| MVI H, 07h | ||
| MOV L, A | ||
| PCHL | Вызов подпрограммы конкретной клавиши | |
| M2 | LDA F701h | Начало индикации |
| MVI D,F7h | ||
| MVI E, FCh | ||
| ADD E | ||
| MOV E, A | ||
| LDAX D | Чтение символа для индикации | |
| MVI D, 06h | ||
| MVI E, F0h | ||
| ADD E | ||
| LDAX D | Чтение кода символа из ПЗУ | |
| OUT F8 | Вывод на индикаторы | |
| LDA F701h | Изменяем значение счетчика сканирования | |
| INR A | ||
| STA F701h | ||
| XRI 04h | ||
| JNZ M4 | ||
| STA F701h | Изменили | |
| M4 | MVI A, 30h | Настройка таймера. |
| OUT 03h | ||
| MVI A, 30h | ||
| OUT 00h | ||
| MVI A, 75h | ||
| OUT 00h | ||
| POP H | ||
| POP D | ||
| POP B | ||
| POP PSW | ||
| RET | Выход из подпрограммы обработки прерывания | |
| Подпрограммы клавиш | ||
| MVI A, 00h | «0» | |
| JMP M3 | ||
| MVI A, 01h | «1» | |
| JMP M3 | ||
| MVI A, 02h | «2» | |
| JMP M3 | ||
| MVI A, 03h | «3» | |
| JMP M3 | ||
| MVI A, 04h | «4» | |
| JMP M3 | ||
| MVI A, 05h | «5» | |
| JMP M3 | ||
| MVI A, 06h | «6» | |
| JMP M3 | ||
| MVI A, 07h | «7» | |
| JMP M3 | ||
| MVI A, 08h | «8» | |
| JMP M3 | ||
| MVI A, 09h | «9» | |
| JMP M3 | ||
| M3 | STA F702h | Сохранение данных из аккумулятора |
| LDA F703h | Проверка режима ввода | |
| XRI 00h | ||
| JZ M2 | Проверка окончена | |
| LDA F705h | Проверка: сброшена ли ячейка ввода. | |
| XRI 00h | ||
| JNZ M2 | Проверили. | |
| LDA F7FDh | ||
| STA F7FEh | Переписали со второй позиции в третью | |
| LDA F7FCh | ||
| STA F7FDh | Переписали с первой позиции во вторую | |
| LDA F702h | ||
| STA F7FCh | Записали в первую позицию новое число | |
| JMP M2 | Индикация | |
| «С» | ||
| LDA F703h | Проверка режима ввода | |
| XRI 00h | ||
| JZ M2 | Проверили | |
| MVI A,00h | Обнуляем: аккумулятор, | |
| STA F7FCh | первую позицию, | |
| STA F7FDh | вторую, | |
| STA F7FEh | третью, | |
| STA F705h | индикатор сброса. | |
| JMP M2 | Индикация | |
| «Ent» | ||
| JMP ENT | ||
| ENT | LDA F703h | Проверка режима ввода |
| XRI 00h | ||
| JZ M2 | Проверили | |
| LDA F703h | Идентификация адреса ввода. | |
| RLC | ||
| RLC | ||
| MOV E, A | ||
| LDA F7FFh | ||
| RLC | ||
| RLC | ||
| RLC | ||
| RLC | ||
| ADD E | ||
| MOV E, A | ||
| MVI D, F6h | Идентификация завершена. | |
| LDA F7FCh | Пересылка данных с индикаторов в память. | |
| STAX D | ||
| INR E | ||
| LDA F7FDh | ||
| STAX D | ||
| INR E | ||
| LDA F7FEh | ||
| STAX D | Пересылка окончена. | |
| MVI A, 01h | ||
| STA F705h | Установка индикатора сброса в [1] | |
| JMP M2 | Индикация. | |
| «A» | ||
| JMP A | ||
| A | MVI A, 0Ah | Фиксируем датчик |
| STA F7FFh | в памяти. | |
| CALL REPEAT | Проверка повторного выбора. | |
| JMP M2 | Индикация. | |
| «B» | ||
| JMP B | ||
| B | MVI A, 0Bh | Фиксируем датчик |
| STA F7FFh | в памяти. | |
| CALL REPEAT | Проверка повторного выбора. | |
| JMP M2 | Индикация. | |
| «C» | ||
| JMP C | ||
| C | MVI A, 0Ch | Фиксируем датчик |
| STA F7FFh | в памяти. | |
| CALL REPEAT | Проверка повторного выбора. | |
| JMP M2 | Индикация. | |
| «D» | ||
| JMP D | ||
| D | MVI A, 0Dh | Фиксируем датчик |
| STA F7FFh | в памяти. | |
| CALL REPEAT | Проверка повторного выбора. | |
| JMP M2 | Индикация. | |
| REPEAT | LDA F706h | Проверяем повторный выбор датчика. |
| MOV C, A | ||
| LDA F701h | ||
| XRA C | ||
| JZ M5 | Проверили. | |
| LDA F701h | ||
| STA F706h | ||
| MVI A, 00h | ||
| STA F703h | Обнуляем индикатор изменения информации | |
| M5 | LDA F703h | |
| INR A | Увеличиваем на единицу | |
| MOV C, A | индикатор изменения информации | |
| XRI 03h | и проверяем | |
| JNZ M6 | на переполнение. | |
| MVI A, 00h | ||
| STA F703h | ||
| JMP IDEN | ||
| M6 | MOV A, C | |
| STA F703h | ||
| IDEN | RLC | Идентификация адреса вывода информации. |
| RLC | ||
| MOV E, A | ||
| LDA F7FFh | ||
| RLC | ||
| RLC | ||
| RLC | ||
| RLC | ||
| ADD E | ||
| MOV E, A | ||
| MVI D, F6h | Идентификация завершена. | |
| LDAX D | Пересылка данных из памяти на индикаторы. | |
| STA F7FCh | ||
| INR E | ||
| LDAX D | ||
| STA F7FDh | ||
| INR E | ||
| LDAX D | ||
| STA F7FEh | Пересылка окончена. | |
| RET | Конец подпрограммы. | |
| Основная программа. | ||
| OPR2 | MVI A, F0h | Опрос датчиков. |
| STA F500h | ||
| OPR1 | LDA F500h | Читаем порядковый номер датчика |
| RLC | Сдвигаем для передачи в порт | |
| RLC | ||
| RLC | ||
| RLC | ||
| OUT F1h | Отправляем в порт | |
| XRI 01h | ||
| OUT F1h | ||
| NOP | ||
| NOP | ||
| NOP | ||
| NOP | ||
| XRI 02h | ||
| OUT F1h | ||
| IN F0h | Ввод информации с датчика. | |
| SUI 33h | ||
| JNC WREM | ||
| При обрыве датчика выводим на индикаторы [- - -]. | ||
| LDA F500h | Идентификация адреса ввода. | |
| ADI 0Ah | ||
| SUI F0h | ||
| RLC | ||
| RLC | ||
| RLC | ||
| RLC | ||
| MOV E, A | ||
| MVI D, F6h | Идентификация завершена. | |
| MVI A, BFh | Код символа [-]. | |
| STAX D | ||
| INX D | ||
| STAX D | ||
| INX D | ||
| STAX D | ||
| JMP WR1 | Переход к следующему датчику. | |
| WREM | STA F4FFh | Временно сохраняем результат в ячейке памяти. |
| CALL SRAVN | ||
| WR1 | LDA F500h | |
| INR A | Увеличиваем порядковый номер опрашиваемого датчика. | |
| STA F500h | ||
| XRI F4h | Проверяем счетчик на переполнение. | |
| JNZ OPR1 | Продолжаем опрос. | |
| JMP OPR2 | Возобновляем опрос. | |
| SRAVN | MVI D, 00h | Преобразование, сохранение и сравнение данных. |
| LDA F4FFh | ||
| MOV E, A | ||
| LDA F500h | ||
| INR A | ||
| MOV C, A | ||
| MVI B, 00h | ||
| XRA A | Программа перевода числа из 16-тиричной в 10-тичную систему. | |
| MVI D, F4h | ||
| MVI E, FCh | ||
| STAX D | ||
| DCX D | ||
| STAX D | ||
| DCX D | ||
| STAX D | ||
| BEG | DCX B | |
| LDAX D | ||
| INR A | ||
| STAX D | ||
| XRI 0Ah | ||
| JNZ B | ||
| MVI A, 00h | ||
| STAX D | ||
| INX D | ||
| LDAX D | ||
| INR A | ||
| STAX D | ||
| XRI 0Ah | ||
| JNZ B1 | ||
| MVI A, 00h | ||
| STAX D | ||
| INX D | ||
| LDAX D | ||
| INR A | ||
| STAX D | ||
| XRI 0Ah | ||
| JNZ B2 | ||
| MVI A, 86h | Символ [E] выводится на индикаторы, если число больше 999. | |
| STAX D | ||
| DCX D | ||
| STAX D | ||
| DCX D | ||
| STAX D | ||
| JMP ENDE | ||
| B2 | DCX D | |
| B1 | DCX D | |
| B | MOV A, B | |
| XRI 00h | ||
| JNZ BEG | ||
| MOV A, C | ||
| XRI 00h | ||
| JNZ BEG | ||
| Запись в соответствующую ячейку памяти | ||
| ENDE | LDA F500h | Идентификация адреса ввода. |
| ADI 0Ah | ||
| SUI F0h | ||
| RLC | ||
| RLC | ||
| RLC | ||
| RLC | ||
| MOV E, A | ||
| MVI D, F6h | Идентификация завершена. | |
| LDA F4FAh | ||
| STAX D | ||
| INX D | ||
| LDA F4FBh | ||
| STAX D | ||
| INX D | ||
| LDA F4FCh | ||
| STAX D | Запись окончена. | |
| Сравнение. | ||
| SR | LDAX D | |
| MOV H, A | ||
| MVI B, F6h | ||
| MVI A, 04h | ||
| ADD E | ||
| MOV C, A | ||
| LDAX B | Загрузка “минимума”. | |
| SUB H | Вычитаем текущее значение из “минимума”. | |
| JNC ALARM1 | Если нет переноса, значит текущее значение меньше “минимума”. | |
| MVI A, 08h | ||
| ADD E | ||
| MOV C, A | ||
| LDAX B | Загрузка “максимума”. | |
| SUB H | Вычитаем текущее значение из “максимума”. | |
| JC ALARM2 | Если есть перенос, то текущее значение больше “максимума”. | |
| MOV A, E | ||
| ANI 0Fh | ||
| JNZ PER | Если проверили все разряды и все в порядке, то отменяем сигнализацию. | |
| LDA F500h | Поиск сигнала для отмены и формирование управляющих слов. | |
| ANI 0Fh | ||
| JNZ S1 | ||
| MVI A, 01h | ||
| JMP SIG | ||
| S1 | MOV B, A | |
| XRI 01h | ||
| JNZ S2 | ||
| MVI A, 03h | ||
| JMP SIG | ||
| S2 | MOV A, B | |
| XRI 02h | ||
| JNZ S3 | ||
| MVI A, 05h | ||
| JMP SIG | ||
| S3 | MVI A, 07 | |
| PER | DCX D | Переходим к меньшему разряду. |
| JMP SR | ||
| ALARM1 | LDA F500h | |
| ANI 0Fh | ||
| JZ A11 | ||
| MOV B, A | ||
| XRI 01h | ||
| JZ A12 | ||
| MOV A, B | ||
| XRI 02h | ||
| JZ A13 | ||
| MOV A, B | ||
| XRI 03h | ||
| JZ A14 | ||
| ALARM2 | LDA F500h | |
| ANI 0Fh | ||
| JZ A11 | ||
| MOV B, A | ||
| XRI 01h | ||
| JZ A12 | ||
| MOV A, B | ||
| XRI 02h | ||
| JZ A23 | ||
| MOV A, B | ||
| XRI 03h | ||
| JZ A14 | ||
| A11 | MVI A, 00h | |
| JMP SIG | ||
| A12 | MVI A, 02h | |
| JMP SIG | ||
| A13 | MVI A, 0Bh | |
| OUT F3h | ||
| MVI A, 08h | ||
| OUT F3h | ||
| MVI A, 04h | ||
| JMP SIG | ||
| A23 | MVI A, 09h | |
| OUT F3h | ||
| MVI A, 0Ah | ||
| OUT F3h | ||
| MVI A, 04h | ||
| JMP SIG | ||
| A14 | MVI A, 06h | |
| JMP SIG | ||
| SIG | OUT F3h | Посылаем команду управления (сигнализации). |
| JMP ENDSR | ||
| ENDSR | RET | Выход из подпрограммы преобразования, сохранения и сравнения. |
ПРИЛОЖЕНИЕ 6






