中断程序中,调用delay函数 ,调试的时候就卡在delay一直执行。
时间:10-02
整理:3721RD
点击:
stc89c52rc 11.0592 12分频 ,delay不管在中断程序哪个位置都是执行到delay就卡主不动,有没有兄弟看看的。
void delay(unsigned int ms)
{
unsigned int ti;
while(ms--)
{
for(ti=0;ti<166;ti++);
}
}
void time0()interrupt 1 using 1
{
P1_0=!P1_0;
counter0++;
delay(1);
if(counter0>=20000)
{
ET0=TR0=0;
counter0=0;
P1_0=1;
flag0=0;
flag1=1;
}
}
void main()
{
P1=0xff;
TMOD=0x22;
TH0=TH1=(256-18);
TL0=TL1=(256-18);
EA=1;
ET0=1;
TR0=1;
while(flag0);
}
void delay(unsigned int ms)
{
unsigned int ti;
while(ms--)
{
for(ti=0;ti<166;ti++);
}
}
void time0()interrupt 1 using 1
{
P1_0=!P1_0;
counter0++;
delay(1);
if(counter0>=20000)
{
ET0=TR0=0;
counter0=0;
P1_0=1;
flag0=0;
flag1=1;
}
}
void main()
{
P1=0xff;
TMOD=0x22;
TH0=TH1=(256-18);
TL0=TL1=(256-18);
EA=1;
ET0=1;
TR0=1;
while(flag0);
}
你看看你的定时时间是多少?延时1ms,算算定时时间是不是<1ms? 再者中断处理函数应尽量简洁,最好不要这样做(中断中加延时)
for()有语法错误
for循环少了;
我定时器定时时间一次是us 的 ,之前中断程序里面就加了,简洁我尽量改改,现在是delay(1)也会卡在里面。
什么意思? 应该用while吗 还是什么的
for 里面循环次数少了吗?
你的定时器是us级别的,delay()是ms级别的,一直卡在delay就很正常了
好的,我懂了,我自己再改改,谢谢
你的for语句语法应用不对啊,死在for里了,