为什么定时器不用打开EA和ET0也能正常开启定时?
void main()
{
TMOD=0x01;
TR0=1;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
//ET0=1;
// EA=1; //为什么这里EA和ET0不打开,计时器T0也能正常打开?
while(1)
{
if(TF0==1)
{
TF0=0;
pp++;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
}
if(pp==20)
{ pp=0;
m++;
n--;
P1=n;
if(m==60)
{
m=0;
}
}
c0=m%10;
c1=m/10;
display(c1,c0);
}
}
就是说中断其实没打开,只是定时器打开了?然后用软件来查询定时器是否溢出?
那我是不是可以理解为,其实中断没打开,只是定时器被开启运行了?
我也知道没有中断函数,可我就是不明白为什么也能达到定时的效果,看上面函数好像是定时器一直在运行,然后自溢,手动TF清0。不是EA没打开、ET0没打开定时器就不能打开吗?
不,不。这个其实跟硬件定时器没关系的。你这个是纯软件的。
是这样的,溢出会正常溢出,开中断之后溢出就会触发中断,不开中断溢出就不会触发中断,只是设置一个标志位而已。
if(TF0==1) 重点在这一句,是用软件不停的去查询,EA和ET0打开,是为了CPU自动执行中断函数的。