用51内部定时器来产生秒信号,求帮助
时间:10-02
整理:3721RD
点击:
问题附在注释里面,请指点一下,看看这个18是怎么算的吧!
/********定时器T0中断函数**********/
void t0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//这样的定时数据,是不是正好是50000*1微秒=50毫秒?
aa++;
if(aa==18)//这里的意思是中断18次,需要1秒的时间(晶振12MHz),我怎么感觉应该是中断20次用时1秒?
{
aa=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
单片机定时器
要看整体 和计算一下 其它指令的占用时间
18 也好 20也好 只在是在 要求范围内的精度就是对的
从数来年 是只有 18*50ms
认为他使用晶振的频率是11.0592MHz,那么18次中断需要时间是976562.5us(这是理想状态,不算进入中断发生到定时器从新赋初始值这段时间,如果要算上这段时间,也许需要5~7us左右)
说的对啊 这个程序我也编过 你用多少都是有误差的 这个程序搞懂了你可以用时钟芯片来实现
我用20*50ms的算法,果然出问题了,20*50ms*60秒/分钟*330(分钟)本应等于330分钟=5.5小时,结果却测得超过6个小时。
6/5.5=1.09;20/18=1.11;
看来实际上用18*50ms比较准确的。
过路的,顺便学习了!
我觉得要精确时间还是汇编的好,特别准确!