关于c51定时器的问题,while(1)的应用

2019-07-16 04:58发布

定时器0工作在2模式下,采用中断计时,计数满100,p0口0位改变电位。
示波器显示周期为51.2ms,为什么去掉while(1){ },周期变为512us,求解释。
还有就是定时器在工作的时候,能不能对TH0,TL0进行赋值。
#include<reg52.h>
sbit p00=P0^0;
static unsigned int i;
void main()
{
EA=1;
ET0=1;
TMOD=0x02;
TR0=1;
TH0=0;TL0=0;
while(1){ }
}
void T0_int () interrupt 1
{i++;
if(i>=100){i=0;p00=!p00;}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
bvc
1楼-- · 2019-07-17 06:06
lstcspring 发表于 2012-8-4 09:38
while(1){ },你把这句 取消后,输出信号不是由定时器控制的了,是程序不停在跑飞,复位给出的信号! ...

程序跑飞?怎么周期正好是1000倍啊。main()里面的语句是不是执行完最后一行就接着从main()第一条语句重新循环?
默默地努力
2楼-- · 2019-07-17 06:32
bvc 发表于 2012-8-5 15:41
程序跑飞?怎么周期正好是1000倍啊。main()里面的语句是不是执行完最后一行就接着从main()第一条语句 ...

理论上是执行完最后一句后就从第一句重新开始执行。但是这并没有可靠的依据。
使得此啊
3楼-- · 2019-07-17 08:22
同意楼上 的说话  所以经常要用死循环的啦
小豪ヽ
4楼-- · 2019-07-17 14:02
对定时器TH0 TL0赋值一般是在子函数中赋值,楼主的程序TH0 TL0都赋值为0.这部感觉没必要。赋值的意思就是定时器在多久后要开始工作。
a515972470
5楼-- · 2019-07-17 18:56
 精彩回答 2  元偷偷看……
吃火烧不给钱
6楼-- · 2019-07-17 21:35
请问一下,如果没有while(1);这条语句的话,程序在从main()函数往下运行的时候,遇到中断,并且在执行完中断函数后,下一步要返回主函数继续运行,请问他是从主函数哪里继续运行下去?我这个地方不是很理解啊,求指教。

一周热门 更多>