【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;
}

}
展开
 我来答
百度网友7bcbdd00f
2010-08-26 · TA获得超过416个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:250万
展开全部
你使用的定时器模式(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,使其停止计数。
ouqiyang
2010-08-26 · 超过34用户采纳过TA的回答
知道答主
回答量:218
采纳率:0%
帮助的人:117万
展开全部
因为进入中断,其值减为0,如果不重装初值,下次计数值就是65535
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-08-26
展开全部
第一个装初值是要进入中断,同理,第二次装初值也是为了进入中断循环,每溢出一次进入一次中断,count加1,就是这样而已
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式