一个关于定时查询问题
void main()
{
TMOD|=0x01;
TH0=0x3c; //给一个初值;计数满了就使TF0=1;
TL0=0xb0;
TR0=1;
while(1)
{
TH0=0x3c; //问题在这里:我的理解是进入了循环之后又开始计数,因为还没记满, TL0=0xb0; 往后执行代码, TF==1执行下面语句,完了循环回来;
if(TF0==1) 重点来了:定时又重新从初值开始计,上次并没有记满所以TF0==1
{ 还是初值时那次,TF0依然等于初值那次;然后依然会执行下面语句,直到
count++; 20次;会一 亮一闪; //谁能详细解答哈,虽然黑简单,谢谢;
TF0=0;
if(count==20)
{
count=0;
P2=~P2;
}
}
}
你确定这个是正确的代码吗,问题在于TF0不等于1的时候,TH0和TL0会不停的赋初值,这样TF0不可能会等于1。
楼上正解
这个程序有问题!
额,已解决了。
可以将解决的方法分享出来吗?可以让别的碰到这个问题的朋友从你这里找到解决方法。
你这个程序是跑不起来的,要改成这样,道理2楼已解释。
#include <reg51.h>
unsigned char count=0;
void main()
{
TMOD|=0x01;
TH0=0x3c; //给一个初值;计数满了50ms就使TF0=1;
TL0=0xb0;
TR0=1;
while(1)
{
// TH0=0x3c; //问题在这里:我的理解是进入了循环之后又开始计数,因为还没记满,
// TL0=0xb0; //往后执行代码, TF==1执行下面语句,完了循环回来;
if(TF0==1) //重点来了:定时又重新从初值开始计,上次并没有记满所以TF0==1
{ //还是初值时那次,TF0依然等于初值那次;然后依然会执行下面语句,直到
count++; //20次;会一 亮一闪; //谁能详细解答哈,虽然黑简单,谢谢;
TH0=0x3c;
TL0=0xb0;
TF0=0;
if(count==20)
{
count=0;
P2=~P2;
}
}
}
}
#include <reg51.h>unsigned char count=0;
void main()
{
TMOD|=0x01;
TH0=0x3c;
TL0=0xb0;
TR0=1;
while(1)
{
if(TF0==1)
{ TH0=0x3c;
TL0=0xb0;
count++;
TF0=0;
if(count==20)
{
count=0;
P2=~P2;
}
}
}