Разработка микропроцессорной системы для управления объектом. Составление карты распределения адресного пространства, страница 22

; делим на 10 и выводим результат на  первый индикатор, а остаток на второй.

; Для отображения Q4 используем таблицу соответствия двоичных кодов на входах регистра

; десятичным цифрам.

Mov       A, Q4_out           ; заносим в аккумулятор Q4, считанное при последнем нажатии клавиши "Вывод"

Mov       B, #5

Div        AB

Mov       B, #2

Mul        AB

Mov       B, #10

Div        AB                                                      ; получили в А старшее число, а в В - младшее

Mov       DPTR, #TABLE

Movc     A, @A+DPTR                                  ; сопоставляем числу отображаемое значение

Mov       DPTR, #8008h                                  ; задаем адрес регистра индикации

Anl        A, 01111111b                                   ; для доступа к старшему индикатору сбрасываем 7-й бит

; (по умолчанию в соответствии с таблицей вывод на младший индикатор)

movx     @DPTR, A                                        ; выводим значение

mov       A, B                                    

mov       DPTR, #TABLE

movc     A, @A+DPTR                                  ; сопоставляем числу отображаемое значение

mov       DPTR, #8008h                                  ; задаем адрес регистра индикации

movx     @DPTR, A                                        ; выводим значение

; (по умолчанию в соответствии с таблицей вывод осуществляется

; на младший индикатор, т.е. бит 7 установлен)

RETI 

;--------------------------------------------------------------------------------------------------------------------; Обработка прерывания от аварийного датчика

INT1:

Mov       IE, #10100000                                  ; маскирование всех прерываний, кроме прерываний от

; таймера Т2

mov       Q4_OUT, Q4                                    ; выводим текущее значение Q4

set          P3.1                                                    ; устанавливаем бит управления индикацией для случая,

; если он сброшен, чтобы при следующем сбросе по спаду

; сигнала считать новые значения X1..X4

clr          P3.1                                                    ; разрешаем индикацию

setb        TR0                                                    ; запускаем таймер 0 для отсчета времени вывода

ALARM:

; вывод сигнала аварийной звуковой сигнализации с частотой 2 Гц

; f = 2 Гц, Т = 0,5 с

; 0,5 с = 2.4 мкс * 208333 - период аварийной сигнализации

; 208333=52083*4 - число инкрементирований таймера до

; переполнения для формирования периода 0,5 с

; 52083 = CB73h, FFFFh - CB73h = 348Ch

; загружаем регистры таймера

mov       TH0, #034h                      

mov       TL0, #08Ch                      

cpl         P1.0                                                    ; включение / выключение аварийного сигнала              

cjne       TF0, #4, $                                          ; ждем переполнения таймера

jmp        ALARM                                            ; переход на начало цикла аварийной сигнализации

; выход из подпрограммы обработки аварийного прерывания - только по сбросу

;--------------------------------------------------------------------------------------------------------------------; Обработка прерывания по сигналу отказа источника питания

INT2:

Push      ACC                                                   ; сохраняем аккумулятор в стек  

Push      R0                                                      ; сохраняем регистр R0 в стек

Push      R1                                                      ; сохраняем регистр R1 в стек

; сохраняем регистры специальных функций        

mov       R0, 0F0h                                           ; адрес регистра с самым старшим адресом

mov       R1, 0F0h                                           ; адрес во внешнем ОЗУ

SAVE_SFR: