[問題] 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