汇编程序:
;========================================
; 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:
MOV   P2,#0FEH
AJMP  EXTI       ;处理完跳转中断出口
KEY1:
MOV   P2,#0FCH
AJMP  EXTI       ;处理完跳转中断出口
KEY2:
MOV   P2,#0F8H
AJMP  EXTI       ;处理完跳转中断出口
KEY3:
MOV   P2,#0F0H
AJMP  EXTI       ;处理完跳转中断出口
KEY4:
MOV   P2,#0E0H
AJMP  EXTI       ;处理完跳转中断出口
KEY5:
MOV   P2,#0C0H
AJMP  EXTI       ;处理完跳转中断出口
KEY6:
MOV   P2,#80H
AJMP  EXTI       ;处理完跳转中断出口
KEY7:
MOV   P2,#00H
EXTI:
POP   ACC        ;恢复现场
RETI             ;中断返回
;----20ms延时子程序----
DELAY_20ms:
MOV R7,#01H
DL1:
MOV R6,#38H
DL0:
MOV R5,#0A3H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
END
仿真电路连接: