51单片机初学,中断卡死问题
以下为单片机程序,由于初学,本人已经努力排版、注释了。运行问题为当i<100时,右移会卡死。
同样改成i<200时,可正常运行。
里面的时间设计,我是随便定的,请不要纠结这些。
请大侠们帮忙,直接说重点。谢谢,再三顿首。
#include <reg52.h>
#include<intrins.h>
unsigned int i=0; //在中断中记录中断次数
unsigned char Kx; //左移右移控制
void Delay10ms(unsigned int);//延时程序声明
void main()
{
P2=0xFE; //P2端口控制小灯,11111110只有最右边的灯亮
EA = 1; //以下为计时器中断问题,时间随便设置的
TMOD = 0x01;
TH0 = 0x00;
TL0 = 0x00;
ET0 = 1;
TR0 = 1;
Kx=1; //Kx赋值
while(1)
{if(Kx==1)
P2=_crol_(P2,1);//判断左移
if(Kx==0)
P2=_cror_(P2,1);//判断右移
Delay10ms(1); //延时程序调用
}
}
void Delay10ms(unsigned int a)//延时程序
{unsigned int b,c;
for(;a>0;a--)
for(b=38;b>0;b--)
for(c=138;c>0;c--);}
void JSQZD0()interrupt 1 //计时器中断
{TH0=0x00;//重新赋值
TL0=0x00;
i++; //计数
if(i>100) //超过100次置0,Kx取反
{i=0;
Kx=~Kx;
}
}