add A,0071h ; N6+K
mov R1,A
sub A,R0 ; Если N6 меньше N5, то переход по метке
jc GN6K
mov A,R1;A:=N5
ljmp COMPQ
GN6K: mov A, R0;A:=N6+K
mov DPTR,FF00h; адрес регистра
COPMPQ: subb A, Q0
jc GQ0 ; то переход по метке
mov A,00100000b;установить У2
movx @DPTR,A; вывод в регистр
Y2: mov R2, #4
mov R1, #100
DELY2: mov R0, #0
mov R0,#48
DEСR0Y2: DJNZ R0, DELY2
DJNZ R1, DELY2
mov R1, #0
mov R1, #100
DJNZ R2, DELY2
mov R0, #0
mov R0, #194
RESY2: DJNZ R0, RESY2
mov A,0h ; выключение Y2
movx @DPTR,A
ljmp endy
GQ0: mov A, 00100000b;установить У3
movx @DPTR,A; вывод в регистр
Y3: mov R2, #4
mov R1, #50
DELY3: mov R0, #0
mov R0, #48
DEСR0Y3: DJNZ R0, DELY3
DJNZ R1, DELY3
mov R1, #0
mov R1, #100
DJNZ R2, DELY3
mov R0, #0
mov R0, #94
RESY3: DJNZ R0, RESY2
mov A, 0h ; выключение Y3
movx @DPTR, A
endy:
3.2.4. Разработка блока формирования Y4
Для формирования Y4 необходимо осуществлять ввод аналогового сигнала X7. Ввод осуществляется аналогично X5 и X6. Полученный в результате этой операции код N7, используется для получения цифрового значения Q4 по следующей формуле:
, где А0=0.17 и А1=0.125 – коэффициенты, хранящиеся в ПЗУ.
Полученный цифровой код выводиться во внутренний регистр микросхемы ЦАП, для преобразования в аналоговую форму.
Текст программы формирования Y4:
; ввод аналогового сигнала X7
mov R3,12
mov DPTR, #FF04h ; адрес АЦП канал U1
setb P3.0 ;установить AADC
movx A,@DPTR
DELN7: djnz R3, DELN7; задержка 25мкс
mov R3,#0
clr P3.0
mov R0,A; R0:=X5
inc DPTR
setb P3.0 ;установить AADC
movx A,@DPTR;A:=N7
; умножение N7 на A1
mov B, A1
mul A, B;A:=A*125
mov B, 100
div A, B;A:=A/100
mov B, 10
div A, B;A:=A/1000=>A=N7*0.125
add A, A0;A:=A+0.17
mov DPTR, FF10h;Адрес ЦАП
movx @DPTR,A; вывод цифрового значения в ЦАП
mov 0071h, A ; Сохранение текущего значения Q4
; для вывода на индикаторы
ljmp beg ; Возврат к началу цикла управления
3.2.5. Разработка обработчиков прерываний
При поступлении какого-либо сигнала прерывания он попадает на вход внешнего прерывания Р3.2 и инициирует запуск одной из трех подпрограмм.
0003h jb P1.0, failcall; вызов обработки аварии
jb P1.1, pwrcall; вызов обработки питания
jb P1.2, keycall;вызов обработки клав.
reti
3.2.5.1. Разработка обработчика прерывания от аварийного датчика
При поступлении прерывания от аварийного датчика, необходимо осуществить вывод текущих значений X1 – X4, и цифрового кода Q4. Текущие значения хранятся в ОЗУ по адресам 0070h – X1-X4, и 0071h – Q4.
Вывод значений X1 – X4 на индикацию осуществляется путем занесения в соответствующие разряды регистра КР1554ИР22 из текущих значений. Единичное значение отображается свечением соответствующего светодиода.
Вывод Q4 на индикаторы осуществляется в подпрограмме displ.
Сигнал аварии выдается путем занесения 7 в 4-ый разряд индикаторного регистра. Выбор именно этого разряда избавляет от необходимости изменения программы в случае увеличения числа индикаторов.
После выдачи сигналов, переводим систему в состояние ожидания командой HLT.
Текст обработчика прерывания от аварийного датчика:
org addr_failure
push ACC; Сохранение A
mov A, 0070h; Текущие значения X1 – X4
setb TR0; Включение аварийной сигнализации
mov DPTR, FF14h; Адрес регистра со светодиодами
movx @DPTR, A
; Вызов процедуры вывода на дисплей
mov A,0071h; A:=Q4
mov b,#10
div ab; a:=a div b; b:=a mod b
mov DPTR, #tbl
mov A, R0
movc A, @A+DPTRr;a:=[dptr+<a>]
push DPTR
push ACC
mov A,10000000b;1-ый символ дисплея
mov DPTR, #FF0Ch
mov @DPTR, A
pop ACC
mov DPTR, #FF0Dh
mov @DPTR, A
pop DPTR
mov A, R1
movc A,@A+DPTR
push DPTR
push ACC
mov A,10000001b;2-ой символ дисплея
mov DPTR, #FF0Ch
mov @DPTR, A
pop ACC
mov DPTR, #FF0Dh
mov @DPTR, A
pop DPTR
pop ACC
clr P1.0
hlt; Останов процессора
ret ; Возврат из прерывания
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.