采用外部中断0的低电平触发方式 控制8个LED灯 闪烁2次。用51单片机语言
时间: 2024-02-22 09:56:33 浏览: 87
【51单片机C语言+Proteus仿真实例】INT0中断控制LED.zip
5星 · 资源好评率100%
好的,以下是用51单片机语言实现采用外部中断0的低电平触发方式控制8个LED灯闪烁2次的代码:
```
; 定义端口
LED_PORT EQU P1
INT0_PIN EQU P3.2
ORG 0 ; 程序入口地址
MOV SP, #0FEH ; 初始化栈指针
LCALL INIT ; 调用初始化子程序
LCALL MAIN ; 调用主程序
INIT:
CLR INT0_PIN ; INT0引脚配置为低电平触发
SETB EA ; 允许总中断
SETB EX0 ; 允许外部中断0
RET
MAIN:
MOV LED_PORT, #0 ; 所有LED灯熄灭
WAIT_INT:
SJMP WAIT_INT ; 等待中断发生
INT0_ISR:
MOV R0, #16 ; 循环计数器初始化为16
MOV A, #0FFH ; 8个LED全亮
LOOP:
MOV LED_PORT, A ; LED闪烁
ACALL DELAY ; 延时一段时间
CPL A ; 反转LED状态
DJNZ R0, LOOP ; 循环16次
CLR LED_PORT ; 所有LED灯熄灭
ACALL DELAY ; 延时一段时间
MOV R0, #16 ; 循环计数器初始化为16
MOV A, #0FFH ; 8个LED全亮
LOOP2:
MOV LED_PORT, A ; LED闪烁
ACALL DELAY ; 延时一段时间
CPL A ; 反转LED状态
DJNZ R0, LOOP2 ; 循环16次
CLR LED_PORT ; 所有LED灯熄灭
ACALL DELAY ; 延时一段时间
RETI
DELAY:
MOV R1, #60 ; 延时计数器初始化为60
DELAY_LOOP:
NOP ; 空指令
DJNZ R1, DELAY_LOOP ; 循环60次
RET
END
```
这段代码中,我们定义了LED_PORT为P1口,INT0_PIN为P3.2口,通过清零INT0_PIN,将外部中断0配置为低电平触发方式。在初始化子程序中,开启总中断和外部中断0。在主程序中,等待外部中断0的发生,当外部中断0发生时,进入INT0_ISR中断服务程序。在INT0_ISR中,我们通过循环计数器和LED状态翻转实现LED灯闪烁2次的效果,每次闪烁之间也加入了延时,保证闪烁效果的稳定性。
希望这个代码可以帮到你!
阅读全文