![]() |
發布時間: 2018-11-14 11:50
正文摘要:我寫20ms中斷程序,程序參照STC ,增加TF1 = 0 正常是20ms;程序取消掉TF1 = 0 后頻率差不多66ms樣子,中斷的程序是IO取反 IO=~IO; 參照附件的紫色示波器波形。有沒有大神知道? void Timer1Init(void) ... |
SINANDXKY 發表于 2018-11-15 11:24 的確是,我沒有吧初值放在interrupt 1里面,只寫到main 函數里面了。估計是這里問題 |
TF1標志是定時器1溢出之后硬件自動置1,必須軟件清零,不然就運行不正常,還有你12MHZ晶振16位定時器最大就定時65.535MS所以你是不是沒重賦初值 |
我也很奇怪,以前用89C52 和 STC100W 都沒有這個問題,是不是STC15 204S 芯片問題,這個芯片比普通的運行快很多,我照辦普中程序的延遲都用不了,跑的飛起![]() |
加EA=1; ET0=1: |
![]() AUXR不要去動它,本身就是默認的12T了,第一個圖片是產生誤差的那代碼嗎?如果是的話,也沒有你說的那大的誤差的,你要知道,20mS取反一次實際上25HZ,你那是26HZ左右,實際上只差別了2.52mS 問題在哪里?我不知道,不會C,看不明白,但我沒有看到取反的函數,你把取反的代碼直接放在TR1 = 1后面,這樣精度會高一點. 示波器應該是可以量時間的呀,你可以找找看,像20mS這種是可以很精確的測量出來的,注意看增量那一行 |
使用定時器1中斷方式不必操作TF1,TF1在中斷響應后自動清0。使用查詢方式才需要程序操作清0。 |