INIT:
;инициализация переменных
mov INPUT_MODE,#0
;инициализация IOP
mov DPTR,#8041H ;
mov A,#0DBH ;11011011B-очистка памяти дисплея, код
;бланкирования 20H(пробел "_"), сброс байта ;состояния и cигнала прерывания
movx @DPTR,A ;
mov A,#01H ;00000001B-установка режима 1-клавишного
;нажатия, сканирования в режиме инверсного
;дешифратора на 4 выхода
movx @DPTR,A ;
mov A,#28H ;00101000B-инициализация опорной частоты
movx @DPTR,A ;
;инициализация таймеров-счетчиков
mov TMOD,22H ;установка режима 2 таймеров 0,1
mov TCON,50H ;запуск таймеров 0,1
mov SYS_CLOCK_LOW,#0
mov SYS_CLOCK_HIGH,#0
;инициализация системы прерываний
setb EX0 ;разрешить прерывания от внешнего источника 0
setb ET0 ;разрешить прерывания от таймера 0
setb ET1 ;разрешить прерывания от таймера 1
RET
В соответствии с заданием Y1=X1+X2X3X4. Ниже приведен исходный текст программного модуля PROCESS_BOOLEAN, производящего логическую обработку сигналов:
PROCESS_BOOLEAN:
mov C,P1.4
anl C,P1.5
anl C,P1.6
orl C,P1.3
mov P1.7,C
mov R3,#2*TM1
call DELAY
clr P1.7
RET
PROCESS_ANALOG_1:
;получить цифровой эквивалент X6 от АЦП
mov DPTR,#8001H ;канал 2 АЦП
movx @DPTR,A ;занести в регистр АЦП номер читаемого канала
movx A,@DPTR ;прочитать N6
mov R0,A ;сохранить в R0
;получить цифровой эквивалент X5 от АЦП
mov DPTR,#8000H ;канал 1 АЦП
movx @DPTR,A
movx A,@DPTR
clr C ;подготовить бит переноса к вычитанию
subb A,R0 ;A=N5-N6
add A,K ;A=N5-N6+K=Q2
clr C
subb A,Q0 ;сравнить A с Q0. Если A<Q0, то бит переноса C=1
jc L1 ;на формирование Y2
;формирование сигнала Y3
setb P3.1
mov R3,#TM3*2
acall DELAY
clr P3.1
sjmp L2
;формирование сигнала Y2
L1: setb P3.0
mov R3,#TM2*2
acall DELAY
clr P3.0
L2: RET
DELAY:
push ACC
;перезагрузить тймер-счетчик 1
clr TR1
setb TR1
mov TIMER,#0
mov A,R3
DELAY_L1:
cjne A,TIMER,DELAY_L2
sjmp DELAY_L1
DELAY_L2:
pop ACC
RET
PROCESS_ANALOG_2:
mov DPTR,#8002H
movx @DPTR,A
movx A,@DPTR
;вычислить N7*A1=N7*0.125=N7/8, т.е сдвинуть N7 вправо на 3 разряда
;используем циклический сдвиг через бит переноса, обнуляя последний
;перед каждым сдвигом
clr C
rrc A
clr C
rrc A
clr C
rrc A
add A,A0
mov Q4,A ;сохранить Q4
mov DPTR,#8020H
movx @DPTR,A
RET
IE0_HANDLER:
jnb P1.0, INT1_PROC
jnb P1.1, INT2_PROC
jnb P1.2, INT3_PROC
reti
INT1_PROC: ;Обработка прерывания от аварийного датчика (INT1).
acall DISPLAY_ALL
;включить аварийную сигнализацию на ПУ
mov R3,#2 ;загрузить в R3 значение для формирования задержки 1мс
L3: clr P3.3 ;включить динамик
acall DELAY
setb
P3.23 ;выключить
динамик
acall DELAY
sjmp L3 ;крутиться в бесконечном цикле, ожидая сброса
INT2_PROC:
;сохранить в NVRAM содержимое внутреннего ОЗУ CPU и значения регистров ;специального назначения
push 0
push ACC
push DPL
push DPH
mov R0,#0F0H ;начать с области РСН и спускаться вниз
L4: mov A,@R0 ;прочитать содержимое ячейки внутреннего ОЗУ
movx @R0,A ;переслать значение по одноименному адресу в NVRAM
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.