51单片机定时器中断在何时会出现丢失
学习单片机时偶尔会出现定时器中断的丢失,不知道是什么原因引起的,还请各位大师不吝赐教!
(我只知道如果在中断服务程序里面处理的程序过长会出现中断的丢失)
两次中断时间间距太小?导致还在读取中断程序时第二次中断再次来临?
这药看中断优先级的设置,你可以吧你需要不被打扰的中断优先级设置为最高就行了,还有中断会被打扰是外部干扰,所以抗干扰也要做好
那要怎么解决啊,比如我这个例子,
#include<reg51.h>
#include <intrins.h>
#define unit unsigned int
#define ucha unsigned char
ucha fre=50000;
unit flag,numb,temp;
sbit beep=P2^3;
void main()
{
beep=0;
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TMOD=0x11;
EA=1;
ET0=1;
ET1=1;
TR1=1;
TR0=1;
while(1);
}
void pl() interrupt 1
{
TR0=0;
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
temp++;
if(flag<40)
{
if(temp==10)
{
temp=0;
fre=50000;
beep=~beep;
}
}
if(flag>=40&&flag<80)
{
temp=0;
fre=10000;
beep=~beep;
}
if(flag>=80&&flag<120)
{
temp=0;
fre=5000;
beep=~beep;
}
if(flag>=120&&flag<160)
{
temp=0;
fre=2500;
beep=~beep;
}
if(flag>=160&&flag<200)
{
temp=0;
fre=1250;
beep=~beep;
}
if(flag>=200&&flag<240)
{
temp=0;
fre=1000;
beep=~beep;
}
if(flag>=240&&flag<280)
{
temp=0;
fre=500;
beep=~beep;
}
if(flag>=280&&flag<320)
{
temp=0;
fre=250;
beep=~beep;
}
if(flag>=320&&flag<360)
{
temp=0;
fre=1;
beep=~beep;
}
TR0=1;
//TR1=1;
}
void sj() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
flag++;
if(flag==360)
{
flag=0;
fre=50000;
}
} 当flag 执行到40后定时器1的中断就丢失了。求大神解决