利用外部第一个中断启动,利用外部第二个中断停止。没有上机实验。
#include<reg52.h>
unsigned char i=0;
void delay(unsigned int t) //0-65535
{
while(--t);
}
void main()
{
unsigned char q;
IT0=1; //下降沿触发
EX0=1; //INT0中断允许
IT1=1; //下降沿触发
EX1=1;
EA=1; //总中断允许
while(i==1)
{
P1=0xfe;//1111 1110,初始化点亮第一个灯,该语句必须放在循环内部,否则只能让每个灯亮一次,不能循环,因为没有循环初始化
for(q=0;q<8;q++)
{
delay(50000);
P1<<=1;
P1=P1|0X01; //0000 0001,这条语句用于使上一个LED灯熄灭
}
}
}
/*INT0中断服务函数*/
void Interrupt1(void)interrupt 0 using 1
{
EX0=0; //进入外部INT0中断关闭,防止误操作
i=1;
delay(20);
EX0=1; //中断函数结束,外部INT0中断打开,中断生效
}
/*INT1中断服务函数*/
void Interrupt2(void)interrupt 2 using 2
{
EX1=0; //进入外部INT0中断关闭,防止误操作
i=0;
delay(20);
EX1=1; //中断函数结束,外部INT0中断打开,中断生效
} |