51中断为什么不执行循环
51单片机吧
全部回复
仅看楼主
level 1
fyc4480 楼主
下面51单片机中断程序,没中断前,正常循环依次显示0到7数字(8个数码管),进入中断后,显示1与3跳变,
直到退出中断(按键),现在程序进入中断后,没有在1与3跳变,而是停在中断里,一直显示1,感觉没有执行delay(100)后面的代码。知道的帮忙分析一下
#include<reg51.h>
sbit key=P1^0;
sbit p14=P1^4;
char code shu[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char code wei[8]={0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0} ;
void delay(int);
void disp();
main()
{
int i;
p14=0;
IE=0x81;
IT0=1;
while(1)
{
for(i=0;i<8;i++)
{
P2=wei[i];
P0=shu[i];
delay(100);
}
}
}
void intp(void) interrupt 0
{
while(key!=0)
{
P2=0xf6;//数字1
P0=0x06; //第2个数码管
delay(100); //停1秒
P0=0x4f;//数字3
P2=0xf4;//第4个数码管
}
}
void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<500;j++)
;
}
2018年11月04日 15点11分 1
level 5
不用加while(key!=0),因为中断本身就是循环,如果非要加while(key!=0)限制中断时表现,加个松手检测,中断调用延时函数,必须在同一个函数组,可以这样改,
void delay(unsigned int a)函数组1
{while(a--);}
void intp(void) interrupt 0 函数组1
{ led=!led;
delay(50000);
led=!led;
delay(50000);
while(key!=0)
{
P2=0xf6;//数字1
P0=0x06; //第2个数码管
delay(50000); //停1秒
P0=0x4f;//数字3
P2=0xf4;//第4个数码管
delay(50000);
while(key!=0);//松手检查
}
}
//.key=0时,led一直闪烁,;key=1时,led闪烁一次,数字变化一次。
你百度查下函数组编号,另外,跳出中断,需要在主含数加中断源控制。
2019年01月05日 21点01分 2
1