[问题] 89S51 使用 C51 计时问题

楼主: a45601236qq (Ming)   2014-06-07 17:18:36
C_CPP 板问 51 相关问题的人好像比较少,所以就来这边借问了...
今天试着做一下模拟 ms 计算的(高阶语言 sleep 都喜欢以 1ms * n 为单位)
试着计时 60 秒后,发现每分钟都会误差五秒钟(感觉有点大)
想请大家帮忙看一下是否有问题...
感谢<_ _)
#include <AT89X51.h>
int Timer1Ms = 0; //1ms * n
int Timer1Value = 0;
void main()
{
TMOD = 0x10; //7-2 tmod
TL0 = ( 8192 - 5000 ) % 32;
TH0 = ( 8192 - 5000 ) / 32;
TL1 = ( 65536 - 1000 ) % 256;
TH1 = ( 65536 - 1000 ) / 256;
Timer1Value = 60000;
Timer1Ms = Timer1Value;
//TR0 = 1;
TR1 = 1;
EA = 1; ET0 = 1; ET1 = 1; //6-3 IE
while (1) ;
}
void timer1_isr() interrupt 3
{
TL1 = ( 65536 - 1000 ) % 256;
TH1 = ( 65536 - 1000 ) / 256;
Timer1Ms -= 1;
if (Timer1Ms == 0)
{
Timer1Ms = Timer1Value;
P1_2 = ~(P1_2);
}
}
作者: ohm22k (红红红)   2014-06-07 17:59:00
int 改 unsigned int 不晓得有没有用
作者: sorkayi (寻找奶昔)   2014-06-07 21:39:00
震荡频率
作者: ruemann (路人甲)   2014-06-08 05:50:00
请爱用AUTO-RELOAD
作者: sopi   2014-07-31 23:56:00
该算的都算好给他 ex TH1=252 然后用Mode2

Links booklink

Contact Us: admin [ a t ] ucptt.com