帮我修改代码,完成利用该片单片机,使外部中断0控制小灯左移死循环,外部中断1控制小灯右移死循环,且两者可以相互打断这个条件
时间: 2024-12-15 13:12:59 浏览: 11
为了实现您的需求,您需要对当前代码进行一些调整。首先,我们需要设置外部中断0(IT0)和外部中断1(IT1)为上升沿触发,因为您希望它们控制灯泡的左右移动。同时,我们需要在中断服务程序里添加适当的逻辑来控制灯泡的移动以及中断之间的互斥。
这里是一个修改后的版本:
```assembly
#include <reg52.h>
; 延迟函数保持不变
; ...
; 主函数
main()
{
EA = 1 ; 开启总中断
EX0 = 1 ; 启动外部中断0
EX1 = 1 ; 启动外部中断1
IT0 = 1 ; IT0设置为上升沿触发
IT1 = 1 ; IT1设置为上升沿触发
TMOD = 0x01 ; 设置T0工作于模式1(自动重装)
TH0 = 0xFD ; T0初值设为159,大约每1.63ms中断一次
TL0 = 0xFD ;
P1 = 0x00 ; 初始化P1口用于LEDs
TR0 = 1 ; 启动T0
while (1) ; 死循环等待中断
;
}
; 中断服务程序 - 外部中断0
IT0 proc
mov P1, #0xFE ; 将P1口左移一位
call delay ; 调用延时函数
mov IE0, 0 ; 清除IE0,防止被下一个中断打断
ret ; 返回主循环
IT0 endp
; 中断服务程序 - 外部中断1
IT1 proc
mov P1, #0xFF ; 将P1口右移一位
call delay ; 调用延时函数
mov IE1, 0 ; 清除IE1,防止被下一个中断打断
ret ; 返回主循环
IT1 endp
; 其他部分保持不变
阅读全文