;Обработчик прерывания от 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