Распределение адресов ОЗУ

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: