作者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/m.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