我想用单片机的定时器0编写50ms延时子程序。C语言,12M晶振

void delay_ms(uchar ntimes)
{
uchar t;
for (t = 0; t<ntimes;t++)
{

TH0 = 0x3C;
TL0 = 0xB0;
TR0 = 1;
while (!TF0);
TF0 = 0;

}
TR0 = 0;
}
这段程序是否正确,实际使用时延时似乎不精确,当ntimes为40时,延时1S都不到

程序采用了查询的方法,基本正确。
也可以改用中断的方法。

1。缺少对TMOD的的设定,如果按照复位后的方式0来定时,定时一次,确实达不到50ms。
2。3CB0H是在方式1条件下,定时50ms的初始值。但是再加上其它的语句,循环一次的时间就会超过50ms。所以,应该加大3CB0H的数值。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-02-10
重新装TH0=(65535-50000)/256;TL0=(65535-50000)%256;(50ms的延时),不要关定时器,没必要,初始化时TR0=1;就行了。
第2个回答  2011-02-10
中断没有打开
SETB EA ;开总中断
SETB ET1 ;开定时器0中断
加上去
第3个回答  2011-02-10
没看懂,什么mcu?是否用仿真器调试过?
相似回答