[問題] 89S51 使用 C51 計時問題

看板ASM (組合語言)作者 (Ming)時間11年前 (2014/06/07 17:18), 編輯推噓3(301)
留言4則, 4人參與, 最新討論串1/3 (看更多)
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://www.ptt.cc/bbs/ASM/M.1402132721.A.5C9.html

06/07 17:59, , 1F
int 改 unsigned int 不曉得有沒有用
06/07 17:59, 1F

06/07 21:39, , 2F
震盪頻率
06/07 21:39, 2F

06/08 05:50, , 3F
請愛用AUTO-RELOAD
06/08 05:50, 3F

07/31 23:56, , 4F
該算的都算好給他 ex TH1=252 然後用Mode2
07/31 23:56, 4F
文章代碼(AID): #1JajZnN9 (ASM)
文章代碼(AID): #1JajZnN9 (ASM)