单片机stc12c5a60s2实现外部中断,利用LED灯亮暗表示按键次数(8位二进制数),两个按键一加一减,用汇编语言实现
时间: 2024-05-20 09:16:16 浏览: 153
以下是实现外部中断的汇编代码:
; 定义端口地址
sbit KEY_INC = P3^2 ; 加按键
sbit KEY_DEC = P3^3 ; 减按键
sbit LED = P1^0 ; LED灯
; 定义中断向量
ORG 0BH
JMP KEY_ISR ; 跳转到按键中断服务程序
; 定义按键中断服务程序
KEY_ISR:
PUSH ACC ; 保存寄存器状态
PUSH PSW
CLR EX0 ; 禁止外部中断
MOV A, LED ; 读取当前LED灯状态
CPL A ; 取反
MOV LED, A ; 更新LED灯状态
MOV A, P3 ; 读取按键状态
ANL A, #0CH ; 屏蔽其他位,只保留加减按键位
CJNE A, #04H, KEY_INC ; 如果是加按键,跳转到加按键处理
SJMP KEY_DEC ; 否则跳转到减按键处理
; 加按键处理
KEY_INC:
MOV A, LED ; 读取当前LED灯状态
ADD A, #01H ; 加1
MOV LED, A ; 更新LED灯状态
JMP KEY_END ; 结束中断处理
; 减按键处理
KEY_DEC:
MOV A, LED ; 读取当前LED灯状态
SUBB A, #01H ; 减1
MOV LED, A ; 更新LED灯状态
KEY_END:
SETB EX0 ; 允许外部中断
POP PSW ; 恢复寄存器状态
POP ACC
RETI ; 返回中断
; 主程序
MAIN:
MOV P3, #0FFH ; 将P3口设为输入
MOV P1, #00H ; 将P1口设为输出
SETB EA ; 允许全局中断
SETB EX0 ; 允许外部中断
; 循环等待
LOOP:
NOP
SJMP LOOP
END ; 结束程序
阅读全文
相关推荐















