答:
先看看你的中断程序:
void exter0() interrupt 0
{
d1=0;
}
也就是叫d1置零而已。执行完这句就跳出中断了,继续执行主函数。
那么你叫中断一直低电平,是不是就一直触发中断呀?是的。
你认为只要一直触发中断,是不是就应该永远执行中断函数,而不干别的了?
当程序从中断函数跳出时如果又来了中断,单片机会在跳出中断后执行一条指令才进入中断的! 也就是执行RETI这句汇编指令后,接着又执行一条语句,才进入中断函数。跳出后又执行一条语句依此类推
所以你的程序就是这样的情况。你看到的就是跳动的频率变满了。
中断发生时,如果中断是允许的,CPU会到指定的位置取指令并执行。
如果没有写中断服务程序,指定的位置内容就不好说了。则取到的指令就不一定是什么指令,但也会执行。
所以,没有意外,后果就是死机。
如果是下降沿触发(it0=1)就只会执行一次中断程序。电平触发(it0=1)的话每次执行完中断里面的程序(只要不关闭中断)就又跳进中断里去了,不断的循环执行。
循环的频率跟晶振有关,晶振的频率直接关系到单片机执行指令的速度。频率越高速度也就越快。
估计是干扰造成的,一般设置成为下降沿触发比较好,若设置为电平触发需保证中断响应后,中断信号应及时搞撤消,防止一次 *** 作,多次进入中断
具体你的中断程序,不知有什么意义,我看逻辑也有点乱,低电平触发后,关中断,若低电平已撤消,高电平来到,则延时20ms后开中断退出, 若高电平显现后又在20ms内消失,则再延时20ms后,进入反复检测的死循环中, 若低电平未撤消,则也进入反复检测的死循环中,其作用大概就是低电平程序停止,直到出现可靠的高电平后恢复运行,倒不如直接检测低电平,低电平进入中断,然后反复检测是否还是低电平,若一直是低电平,就执行延时,偶尔出现的干扰高电平会被过滤掉,若真正出现高电平,则自动退出 这样程序更简单更容易控制
void counter(void) interrupt 0
{
while(P3_2==0)
{
delay1ms(20);//延时长则抗高电平干扰能力强
}
}
程序抗低电平干扰能力比较弱,但根据你的意图:要可靠的高电平主程序才恢复运行
那么,换名话说,偶尔出现的低电平也会也会使主程序暂时中断,然后自动恢复,也应该是合理的了
使用方法:
单片机的P25,P26,P27口分别接三位动态数码管的位选端,P0口接动态数码管的段选端。然后,P10口接一个电阻串联一个LED灯然后接地,电阻取200~470欧之间就行,是一个限流电阻。
中断用的是外部中断0,要触发中断的时候,就用一根杜邦线一端接地,一端接到单片机的P32口就行,这样,就满足了你的要求了。
外部中断的触发方式有低电平触发和下降沿触发。到底是那种触发方式,要设置中断允许寄存器中IT0的值,如果IT0=0,像我写的程序,就是低电平触发,如果为1,就是下降沿触发。
灯不是一定要接到P32口上的。中断要执行的任务是在中断函数中写代码控制的,就像我写的代码中,你只需要控制LED灯接的那个IO口就行了。
代码如下:
#include
#define uchar unsigned char
sbit led=P1^0;
uchar code duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code wei[3]={0x06,0x05,0x03};
void delay(uchar c);
void ini_() //初始化函数,设置中断触发方式,开中断
{
EA=1;
IT0=0;
EX0=1;
}
void main()
{
uchar i;
ini_();
led=0; //由于单片机上电之后,所有的IO口默认是高电平,而要求是开始不亮,所以要将P10口开始设置为低电平。
while(1)
{
for(i=0;i<3;i++) 动态数码管闪烁
{
P2=wei[i];
P0=duan[i];
delay(35);
}
}
}
void led_() interrupt 0 //外部中断0函数,中断函数不需要申明
{
uchar i;
led=1; //在中断中让灯亮起来
while(1)
{
for(i=0;i<3;i++)
{
P2=wei[i];
P0=duan[i];
delay(1);
}
}
}
void delay(uchar c)
{
uchar a,b;
for(c;c>0;c--)
for(a=38;a>0;a--)
for(b=80;b>0;b--);
}
以上就是关于51单片机的外部中断0实验(P2.3引脚)全部的内容,包括:51单片机的外部中断0实验(P2.3引脚)、51单片机开外部中断但是不写中断程序会怎样、51单片机外部中断问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)