找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2882|回復: 19
收起左側

關于單片機1秒定時的疑問

  [復制鏈接]
ID:1044091 發(fā)表于 2022-12-19 10:28 | 顯示全部樓層 |閱讀模式
需要做一個一秒鐘的倒計時功能,可以設一個1ms定時器,循環(huán)1000次,也可以設一個50ms定時器,循環(huán)20次。請問哪種時間比較準確?兩種方法系統(tǒng)開銷有差別嗎?(因為還有很多其他功能,循環(huán)次數(shù)多會影響其他功能運行嗎?)

回復

使用道具 舉報

ID:332444 發(fā)表于 2022-12-19 11:25 | 顯示全部樓層
定時器誤差受程序其他部分影響不小,合理的程序才能保證秒鐘的準確.
回復

使用道具 舉報

ID:1056573 發(fā)表于 2022-12-20 01:13 | 顯示全部樓層
設一個單片機工作于12M晶體震蕩器,它的時鐘周期是1/12(微秒)。它的一個機器周期是12*(1/12)也就是1微秒。所以設置1s定時,無論怎么設置定時器、怎么循環(huán),理論上運行的機器周期是一樣的,即總循環(huán)次數(shù)是一樣的。
回復

使用道具 舉報

ID:353115 發(fā)表于 2022-12-20 09:52 | 顯示全部樓層
準確與否,看給定時器的值準不準,比如65536-11059200/12*50/1000=19456,這樣定時50ms,結果是個整數(shù)。如果定時1ms,那么在計算11059200/12*1/1000=921.6,會有小數(shù),這樣就會有精度損失。
回復

使用道具 舉報

ID:1058360 發(fā)表于 2022-12-20 10:02 | 顯示全部樓層
其它功能盡量不要寫到中斷程序里,不然會有誤差
回復

使用道具 舉報

ID:624769 發(fā)表于 2022-12-20 10:22 來自觸屏版 | 顯示全部樓層
如果,一上來就是奔著1秒去的,如果用的是沒有重載功能89c51這種片子,則兩種都不好。 應該按,第一次跑余,后面都跑滿65536來設計。 如是帶自動重載的定時器,則50ms較好。如果是帶分頻計數(shù)器這種,應直接定1秒?傊畱鶕(jù)使用的單片機來做合理設置。
回復

使用道具 舉報

ID:1044091 發(fā)表于 2022-12-20 10:36 | 顯示全部樓層
qsssuv 發(fā)表于 2022-12-20 09:52
準確與否,看給定時器的值準不準,比如65536-11059200/12*50/1000=19456,這樣定時50ms,結果是個整數(shù)。如 ...

我都是用的STC-ISP定時器計算器代碼,精確度怎樣?11.0592M和12M主頻有差別么?

批注 2022-12-20 103410.png

回復

使用道具 舉報

ID:1044091 發(fā)表于 2022-12-20 10:59 | 顯示全部樓層
188610329 發(fā)表于 2022-12-20 10:22
如果,一上來就是奔著1秒去的,如果用的是沒有重載功能89c51這種片子,則兩種都不好。 應該按,第一次跑余 ...

現(xiàn)在用的是STC8G1K08(兼容STC8H1K08),定時器2,50ms 12T自動重載,STC-ISP定時器計算器的代碼。用山寨邏輯分析儀測試1S方波脈寬,每次測還不一樣,有時候準的很,多數(shù)時候要慢零點幾毫秒?赡躀RC頻率自動調整誤差也有影響。

您說的“分頻計數(shù)器”是什么呢?我這個項目代碼空間快不夠了,還想用USB來升級,未來準備改成STC8H8K64U,能直接產(chǎn)生1秒時基嗎?


void Timer2Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0xFB;                //定時器時鐘12T模式
        T2L = 0x00;                //設置定時初始值
        T2H = 0x4C;                //設置定時初始值
        AUXR |= 0x10;                //定時器2開始計時
}
回復

使用道具 舉報

ID:1034262 發(fā)表于 2022-12-20 11:04 | 顯示全部樓層
定時器工作于自動重裝方式,1ms或50ms,精度一樣,取決于晶振的精度。
回復

使用道具 舉報

ID:839835 發(fā)表于 2022-12-20 11:08 | 顯示全部樓層
跟你循環(huán)多少次其實沒多大關系,準不準看晶振,一般外部晶振可以達到0.001的誤差,內部晶振1%-3%的誤差。想要看看精確度,最好看看芯片手冊
回復

使用道具 舉報

ID:879348 發(fā)表于 2022-12-20 11:58 | 顯示全部樓層
看你對準的要求怎樣
回復

使用道具 舉報

ID:624769 發(fā)表于 2022-12-20 14:14 | 顯示全部樓層
ningsy 發(fā)表于 2022-12-20 10:59
現(xiàn)在用的是STC8G1K08(兼容STC8H1K08),定時器2,50ms 12T自動重載,STC-ISP定時器計算器的代碼。用山寨 ...

STC8G  的 定時器2 有 8位預分頻(TM2PS) 寄存器,你可以直接 64分頻后,直接得到1秒的 定時時間。以你現(xiàn)有的例子為例:
void Timer2Init(void)                //1秒@11.0592MHz
{
        AUXR &= 0xFB;                //定時器時鐘12T模式
        P_SW2 |= 0x80;
        TM2PS = 63;       //64分頻
        T2L = 0xC0;                //設置定時初始值 65536-1440
        T2H = 0xC7;                //設置定時初始值
        AUXR |= 0x10;                //定時器2開始計時
}
回復

使用道具 舉報

ID:1044091 發(fā)表于 2022-12-20 16:18 | 顯示全部樓層
188610329 發(fā)表于 2022-12-20 14:14
STC8G  的 定時器2 有 8位預分頻(TM2PS) 寄存器,你可以直接 64分頻后,直接得到1秒的 定時時間。以你 ...

謝謝前輩指導!我試一下。
回復

使用道具 舉報

ID:1059013 發(fā)表于 2023-1-20 15:00 | 顯示全部樓層
通常都是有誤差的,可以在循環(huán)里放一個IO口的Toggle 語句,然后用示波器看端口輸出方波波長,然后調整語句就能準確了
回復

使用道具 舉報

ID:965189 發(fā)表于 2023-1-21 09:29 | 顯示全部樓層
單從對別的函數(shù)的影響來考慮的話,當然是中斷的次數(shù)越少越好。
回復

使用道具 舉報

ID:72088 發(fā)表于 2023-1-21 13:19 | 顯示全部樓層
你要是會點單片機知識就不會問了,延時是最基層的入門程序。你不會告訴你也不會用
回復

使用道具 舉報

ID:57657 發(fā)表于 2023-1-21 15:47 | 顯示全部樓層
定時器中斷定1秒必須設為自動重裝初值模式,手動重裝誤差大,有多個中斷應設為高優(yōu)先級。
回復

使用道具 舉報

ID:1044091 發(fā)表于 2023-1-21 16:19 | 顯示全部樓層
新鄉(xiāng)家電維修 發(fā)表于 2023-1-21 13:19
你要是會點單片機知識就不會問了,延時是最基層的入門程序。你不會告訴你也不會用

確定了,定時器最后用的是2ms時長。中斷里3個標志位,1個2ms掃描EC11,1個500ms閃動數(shù)碼管,1個1s給倒計時。
回復

使用道具 舉報

ID:1034262 發(fā)表于 2023-1-21 16:24 | 顯示全部樓層
使用定時器,自動重裝模式不會引入誤差,時間精度跟晶振一致,你用一個0.01ppm的恒溫晶振,年誤差不超過0.3秒,我就做有這么一個。
回復

使用道具 舉報

ID:1044091 發(fā)表于 2023-1-21 16:37 來自觸屏版 | 顯示全部樓層
新鄉(xiāng)家電維修 發(fā)表于 2023-1-21 13:19
你要是會點單片機知識就不會問了,延時是最基層的入門程序。你不會告訴你也不會用

定時器0軟件重裝控制電機調速,定時器1軟件重裝控制液體體積倒數(shù),定時器3自動重裝掃描ec11,按鍵和產(chǎn)生500ms和1秒時基信號。3個定時器全用完了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表