;Обработчик прерывания от 3х командных клавиш
INT3_K:
MOV dptr,#A000H
MOVX A,@dptr
JNB ACC.6, K_UST
JNB ACC.5, PUSK
JNB ACC.7, MENU
K_UST:
CLR PCON.2 ;Обнуляем бит окончания считывания К
;Сканируем первую линию
SB1:
MOV dptr,#0A000h ;Адрес регистра клавиатуры и первой линии ;сканирования
MOVX A,@DPTR ;Считываем данные из регистра
JB АСС.0,SB5 ;если SB1 не нажата, проверяем следующую ;клавишу
JB PCON.2, LAST_SB1 ;если PCON.2=1, определяем второе ;слово
MOV R0, #0h ;заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB2 ;Cканируем следующую линию
LAST_SB1:
MOV R1, #0h ;Заносим в R1 второе слово
JMP END_SCAN ;конец сканирования
SB5:
JB ACC.1,SB9 ;если SB5 не нажата, проверяем следующую ;клавишу
JB PCON.2, LAST_SB5 ;если PCON.2=1, определяем второе слово
MOV R0, #4h ;заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB2 ;сканируем следующую линию
LAST_SB5:
MOV R1, #4h ;заносим в R1 второе слово
JMP END_SCAN ;конец сканирования
SB9:
JB ACC.2, SB13 ;Если SB9 не нажата, проверяем следующую ;клавишу
JB PCON.2,LAST_SB9 ;если PCON.2=1, определяем второе слово
MOV R0, #8h ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB2 ;Сканируем следующую линию
LAST_SB9:
MOV R1, #8h ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
SB13:
JB ACC.3, SB2 ;если SB13 не нажата, сканируем следующую ;линию
JB PCON.2,LAST_SB13 ;Если PCON.2=1, определяем второе слово
MOV R0, #0Сh ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB2 ;Сканируем следующую линию
LAST_SB13:
MOV R1, #0Сh ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
;Сканируем вторую линию
SB2:
MOV dptr, #0А100h ;Адрес регистра клавиатуры и второй линии ;сканирования
MOVX A, @dptr ;считываем данные из регистра
JB ACC.0,SB6 ;если SB2 не нажата, проверяем следующую ;клавишу
JB PCON.2,LAST_SB2 ;Если PCON.2=1, определяем второе слово
MOV R0, #1h ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB3 ;Сканируем следующую линию
LAST_SB2:
MOV R1, #1h ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
SB6:
JB ACC.1,SB10 ;Если SB6 не нажата, проверяем следующую ;клавишу
JB PCON.2, LAST_SB6 ;Если PCON.2=1, определяем второе слово
MOV R0, #5h ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB3 ;Сканируем следующую линию
LAST_SB6:
MOV R1, #5h ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
SB10:
JB ACC.2, SB14 ;Если SB10 не нажата, проверяем следующую ;клавишу
JB PCON.2, LAST_SB10 ;Если PCON.2=1, определяем второе слово
MOV R0, #9h ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB3 ;Сканируем следующую линию
LAST_SB10:
MOV R1, #9h ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
SB14:
JB ACC.3,SB3 ;Если SB14 не нажата, сканируем следующую ;линию
JB PCON.2,LAST_SB14 ;Если PCON.2=1, определяем второе слово
MOV R0, #0Dh ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB3 ;Сканируем следующую линию
LAST_SB14:
MOV R1 #0Dh ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
;Сканируем третью линию
SB3:
MOV dptr, #0А200h ;адрес регистра клавиатуры и третьей ;линии сканирования
MOVX A, @dptr ;Считываем данные из регистра
JB ACC.0, SB7 ;Если SB3 не нажата, проверяем следующую ;клавишу
JB PCON.2, LAST_SB3 ;Если PCON.2=1, определяем второе слово
MOV R0, #2h ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB4 ;Сканируем следующую линию
LAST_SB3:
MOV R1, #2h ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
SB7:
JB ACC.1, SB11 ;Если SB7 не нажата, проверяем следующую ;клавишу
JB PCON.2, LAST_SB7 ;Если PCON.2=1, определяем второе слово
MOV R0, #6h ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB4 ;Сканируем следующую линию
LAST_SB7:
MOV R1, #6h ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
SB11:
JB ACC.2, SB15 ;Если SB11 не нажата, проверяем следующую ;клавишу
JB PCON.2, LAST_SB11 ;Если PCON.2=1, определяем второе слово
MOV R0, #0Ah ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB4 ;Сканируем следующую линию
LAST_SB11:
MOV R1, #0Ah ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
SB15:
JB ACC.3, SB4 ;Если SB15 не нажата, сканируем следующую ;линию
JB PCON.2, LAST_SB15 ;Если PCON.2=1, определяем второе слово
MOV R0, #0Eh ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB4 ;Cканируем следующую линию
LAST_SB15:
MOV R1 #0Eh ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
;Сканируем четвертую линию
SB4:
MOV dptr, #0А300h ;Адрес регистра клавиатуры и первой линии ;сканирования
MOVX A, @dptr ;Cчитываем данные из регистра
JB ACC.0, SB8 ;Если SB4 не нажата, проверяем следующую ;клавишу
JB PCON.2, LAST_SB4 ;Если PCON.2=1, определяем второе слово
MOV R0, #3h ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB1 ;Сканируем следующую линию
LAST_SB4:
MOV R1, #3h ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
SB8:
JB ACC.1, SB12 ;Если SB8 не нажата, проверяем следующую ;клавишу
JB PCON.2, LAST_SB8 ;Если PCON.2=1, определяем второе слово
MOV R0, #7h ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB1 ;Сканируем следующую линию
LAST_SB8:
MOV R1, #7h ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
SB12:
JB ACC.2, SB16 ;Если SB12 не нажата, проверяем следующую ;клавишу
JB PCON.2, LAST_SB12 ;Если PCON.2=1, определяем второе слово
MOV R0, #0Bh ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB1 ;Сканируем следующую линию
LAST_SB12:
MOV R1, #0Bh ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
SB16:
JB ACC.3, SB1 ;Если SB16 не нажата, сканируем следующую ;линию
JB PCON.2, LAST_SB16 ;Если PCON.2=1, определяем второе слово
MOV R0, #0Fh ;Заносим в R0 первое слово
SETB PCON.2 ;PCON.2=1 - первое слово считано
JMP SB1 ;Сканируем следующую линию
LAST_SB16:
MOV R1 #0Fh ;Заносим в R1 второе слово
JMP END_SCAN ;Конец сканирования
END_SCAN:
MOV A, R0 ;Заносим первую цифру уставки в ;аккумулятор
SWAP A ;Сдвигаем цифру в старшую половину ;аккумулятора
ANL A, R1 ;заносим в младшую часть А вторую цифру ;уставки
MOV K, A ;Сохраняем новое значение уставки
RET
;При нажатии клавиши МЕНЮ
MENU:
MOV R2,#MENU_N
MOV R3,@R2
NOM1:
INC R3 ;Считаем количество нажатий кнопки МЕНЮ
CJNE R3,#1,NOM2 ;Если 1 раз, то выводим «4»
MOV R6,#0
MOV R7,#4
ACALL Q4_OUT ;Выводим номер функции «4»
NOM2:
CJNE R3,#2, NOM3
MOV R6,#0
MOV R7,#1
ACALL Q4_OUT ;Выводим номер функции «1»
NOM3:
CJNE R3,#3, NOM4
MOV R6,#0
MOV R7,#2
ACALL Q4_OUT ;Выводим номер функции «2»
MOV R3,#0 ;Сбрасываем счетчик
NOM4:
MOV @R2,R3
RETI
;При нажатии клавиши ПУСК
PUSK:
MOV R2,#MENU_N ;по количеству нажатий кнопки МЕНЮ
MOV R3,@R2 ;определяем, что делать
;по нажатию кнопки ПУСК
CJNE R3,#1, NOM5 ;Если 1 раз, то действия с функцией Q4
ACALL INIT ;Вызов функции инициализации
ACALL ENTER_X7
ACALL Q4_OUT
ACALL DAC_SEND
NOM5:
CJNE R3,#2,NOM6 ;Если 2 раза, то с Q1
ACALL INIT
ACALL ENTER_X1234
NOM6:
CJNE R3,#3,NOM7 ;Если 3 раза, то с Q2
ACALL INIT
ACALL CALC_Q2
MOV R3,#0
NOM7:
CJNE R3,#4,NOM8 ;Если не нажимали, то R3=#4
ACALL MAIN ;Переходим к основному алгоритму
NOM8:
RETI
NOP
END
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |


