汇编程序:
;======================================== ; 8独立按键 ;端口:P1 ;触发方式:中断 ;附:电路 ;by:海强_HQ
;========================================
ORG 00H
SJMP START
ORG 03H
LJMP KEY_INT0 ;独立键盘中断 ORG 30H
START:
MOV SP,#60H
MOV P1,#0FFH ;置P1(输入) SETB EX0 ;允许外部INT0中断 SETB EA ;开总中断
SETB IT0 ;设置INT0边沿触发 SJMP $ ;等待按键中断
;----8独立按键(INT0)中断---- KEY_INT0:
PUSH ACC ;保护现场
LCALL DELAY_20ms ;按下检测消抖
MOV P1,#0FFH ;置P1(输入) MOV A,P1 ;读入P1口状态 ;各按键入口地址表(跳转范围128字节) JNB ACC.0,K0 JNB ACC.1,K1 JNB ACC.2,K2 JNB ACC.3,K3 JNB ACC.4,K4 JNB ACC.5,K5 JNB ACC.6,K6 JNB ACC.7,K7
AJMP EXTI ;出错跳转中断出口 ;检测按下的按键(跳转范围2K)
K0: AJMP KEY0 K1: AJMP KEY1 K2: AJMP KEY2 K3: AJMP KEY3 K4: AJMP KEY4 K5: AJMP KEY5 K6: AJMP KEY6 K7: AJMP KEY7 ;8独立键盘处理程序 KEY0: KEY1:
MOV P2,#0FCH
AJMP EXTI ;处理完跳转中断出口 MOV P2,#0FEH
AJMP EXTI ;处理完跳转中断出口
KEY2: KEY3: KEY4: KEY5: KEY6: KEY7: EXTI:
POP ACC ;恢复现场
;----20ms延时子程序---- DELAY_20ms: DL1:
MOV R6,#38H DL0:
MOV R5,#0A3H
MOV R7,#01H
RETI ;中断返回 MOV P2,#00H MOV P2,#80H
AJMP EXTI ;处理完跳转中断出口 MOV P2,#0C0H
AJMP EXTI ;处理完跳转中断出口 MOV P2,#0E0H
AJMP EXTI ;处理完跳转中断出口 MOV P2,#0F0H
AJMP EXTI ;处理完跳转中断出口 MOV P2,#0F8H
AJMP EXTI ;处理完跳转中断出口