![]() |
發布時間: 2024-5-14 21:50
正文摘要:請教一下大家,最近在用STC8G1K08A單片機做一個小東西,使用到了定時器0和定時器1,參照官方設定的1毫秒,然后中斷里重復1000次,作為1秒的精確延時,但是實際發現誤差很大,不知道是我設置的問題還是?之前用STC15W ... |
如果誤差超過0.5%就是你的程序有問題,把你的程序貼出來,包括定時器設置函數,定時器中斷函數,單片機主頻。 |
T0m 發表于 2024-5-15 22:17 邏輯分析儀里面通常有個晶振,準確度與該晶振有關。 |
直接做軟件定時器吧,用邏輯分析儀抓一抓時間,或者改改值. |
void Timer0_Isr(void) interrupt 1 { } void Timer0_Init(void) //50毫秒@11.0592MHz { AUXR &= 0x7F; //定時器時鐘12T模式 TMOD &= 0xF0; //設置定時器模式 TL0 = 0x00; //設置定時初始值 TH0 = 0x4C; //設置定時初始值 TF0 = 0; //清除TF0標志 TR0 = 1; //定時器0開始計時 ET0 = 1; //使能定時器0中斷 } 建議用12T模式,50毫秒@11.0592MHz,每秒只進中斷20次,頻率要設置成11.0592MHz |
自動重載初值,不要用手動重載,溢出了會自己裝進去,中斷里不要賦值TH0,TL0寄存器。 加誤差補償處理且使用外部晶振,1個月誤差不到1分鐘的都有。 |
這一生只為你 發表于 2024-5-15 08:50 這么大的誤差會不會是初始化配置就有問題?可以用示波器看下定時1MS實際測試是多少? |
這一生只為你 發表于 2024-5-15 08:50 單靠程序片段看不出毛病在哪 |
rayin 發表于 2024-5-15 07:28 我不需要特別高的精度,電路很簡單,我只需要延時十分鐘,可接受誤差在一分鐘以內就好。 |
hhh402 發表于 2024-5-15 00:19 可不止,十秒的誤差都有兩三秒了,你說的那些誤差都在可接受范圍內,我這里的誤差根本沒法用啊。。。 |
而且每次刷機設置的都不太一樣,要精確定時還是得外部晶振 |
單片機的晶振是相對精確而已, 要提高精度就要用realtime IC: DS12C887 等 ; 要求更高就用天線接GPS的授時信號. |
誤差很大,具體是多大?STC單片機主頻誤差0.5%,所以誤差0.5%以內是正常的,1小時誤差0.5%=18S,24小時誤差=18*24=432秒。只要在這個范圍內是正常的。![]() |