作者a45601236qq (Ming)
看板ASM
标题[问题] 89S51 使用 C51 计时问题
时间Sat Jun 7 17:18:36 2014
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);
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.44.117.164
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/ASM/M.1402132721.A.5C9.html
1F:→ ohm22k:int 改 unsigned int 不晓得有没有用 06/07 17:59
2F:推 sorkayi:震荡频率 06/07 21:39
3F:推 ruemann:请爱用AUTO-RELOAD 06/08 05:50
4F:推 sopi:该算的都算好给他 ex TH1=252 然後用Mode2 07/31 23:56