主程序数码管从0到F静态显示,熄灭LED。中断程序点亮LED。当选用电平触发方式的时候,用杜邦线连到P3.2口和GND,数码管仍然在走,LED亮。当选用跳变沿触发方式的时候则不会出现这种问题。电平触发的时候是不是和机器周期有关
=.=我那个程序是试验跳变沿触发会不会发生电平触发的问题。IT0=0时,把INT0和GND一直接在一起出现的情况想不明白
追答你看看图片 如果IT0=0时 中断响应后要置高电平 否则会重复中断的
追问用电平触发,我就一直用杜邦线连着INT0和地。应该是一直在执行中断程序,但是数码管为什么还会走。不过走的速度比原先的慢
追答void main()
{
EA=1; //开总中断
EX0=1; //开外部中断0
IT0=1; //跳沿触发方式,或者直接对寄存器操作:TCON=0x01;
wela=1; //位选
P0=0xea;
wela=0;
while(1)
{
if(led_flag==0)
{
for(num=0;num<16;num++)
{
dula=1; //段选
P0=table[num];
dula=0;
delay(4000);
led1=1;
}
}
}
}
void exter0() interrupt 0 //中断程序
{
led_flag=1;
led1=0;
// delay(40000);
}
}
加全局变量 来判断
刚开始学...能加下QQ么?
追答116996928
不触发中断的话数码管走的快,用电平触发方式LED会一直亮但是数码管走的慢。
追答恩,因为他一直在进中断啊~~所以会出现数码管闪烁~
是不是和这句话有关。虽然一直给低电平信号,由于我的程序用不了一个机器周期,所以运行完中断程序之后再执行主程序,当到了S5P2的时候再转去执行中断,实际LED是闪烁的,只不过闪的快肉眼分辨不出来吧。速度很快就看到数码管走的慢了。
追答由于我的程序用不了一个机器周期,这是不可能的,机器周期就是执行指令的最小时间.
不过你的追问倒是让我知道我也少想了些了,实际LED是闪烁的,只不过闪的快肉眼分辨不出来吧。速度很快就看到数码管走的慢了。这句话倒是可能的.
用低电平触发,中断条件一直都满足,所以如果你的中断程序只是写了让LED亮的功能的话,那么它就是一直亮的,可以说几乎谈不上是闪烁了.但是你的数码管竟然在led亮的时候也在走,走得是不是快到自己分辨不出是什么?你的中断服务程序是不是也有数码管的部分的?
void main()
{
EA=1; //开总中断
EX0=1; //开外部中断0
IT0=1; //跳沿触发方式,或者直接对寄存器操作:TCON=0x01;
wela=1; //位选
P0=0xea;
wela=0;
while(1)
{
for(num=0;num<16;num++)
{
dula=1; //段选
P0=table[num];
dula=0;
delay(4000);
led1=1;
}
}
}
void exter0() interrupt 0 //中断程序
{
led1=0;
// delay(40000);
}
两个函数