Адрес | Содержание |
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