【keil 51单片机proteus 仿真】这是个“嘀、嘀、……”报警声程序:在中断函数里为什么要重新赋初值呢??
#defineuintunsignedintucharcount;voidmain(){TMOD=1;TH0=(65536-50000)/256;TL0=(65536-5...
#define uint unsigned int
uchar count;
void main()
{
TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
k=1;
while(1);
}
void timer() interrupt 1
{ TH0=(65536-50000)/256;//看这里,看这里,看这里,请问在这里为什么
TL0=(65536-50000)%256; //要重新赋初值呢??
count++;
if (count==4)
{ count=0;
k=~k;
}
} 展开
uchar count;
void main()
{
TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
k=1;
while(1);
}
void timer() interrupt 1
{ TH0=(65536-50000)/256;//看这里,看这里,看这里,请问在这里为什么
TL0=(65536-50000)%256; //要重新赋初值呢??
count++;
if (count==4)
{ count=0;
k=~k;
}
} 展开
展开全部
你使用的定时器模式(TMOD =1)不会自动重载初值的。如果不重新赋值则下次计65535。
51定时器有4中模式:
工作模式0是13位计数器,其由一个高8位(0~7)计数器(TH0或TH1)和一个具有32位分频的低8位计数器中的(TL0或TL1)的低5位(0~4)组合成。
工作模式1与模式0的区别在于计数的位数不同,模式1是由TH0(或TH1)的高8位(0~7)和TL0(或TL1)的低8位(0~7)组合成的16位计数器。
工作模式2是将TL0(或TL1)配制成自动重新装入的8位计数器。
工作模式3是将16位计数器分成2个相互独立的8位计数器TL0和TH0。定时器/计数器的工作模式3只适用于T0。对于T1,设置为模式3时,相当于使TR1=0,使其停止计数。
51定时器有4中模式:
工作模式0是13位计数器,其由一个高8位(0~7)计数器(TH0或TH1)和一个具有32位分频的低8位计数器中的(TL0或TL1)的低5位(0~4)组合成。
工作模式1与模式0的区别在于计数的位数不同,模式1是由TH0(或TH1)的高8位(0~7)和TL0(或TL1)的低8位(0~7)组合成的16位计数器。
工作模式2是将TL0(或TL1)配制成自动重新装入的8位计数器。
工作模式3是将16位计数器分成2个相互独立的8位计数器TL0和TH0。定时器/计数器的工作模式3只适用于T0。对于T1,设置为模式3时,相当于使TR1=0,使其停止计数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询