不錯(cuò)的51單片機(jī)定時(shí)器初值計(jì)算設(shè)定軟件,精確計(jì)算定時(shí)器的時(shí)間常數(shù).
PIC的指令周期是4個(gè)震蕩周期,在沒(méi)有使用分頻器的情況下,TMR0 會(huì)在每個(gè)指令周期信號(hào)(等于晶體振蕩器產(chǎn)生的主時(shí)鐘周期的 4 倍)到來(lái)時(shí)自動(dòng)加 1。在配置了分頻器的情況下,TMR0 會(huì)在每次收到由分頻器將指令周期信號(hào)分頻一個(gè)固定倍數(shù)后產(chǎn)生的信號(hào)時(shí)自動(dòng)加 1。如果 TMR0在累加計(jì)數(shù)的過(guò)程中,CPU 執(zhí)行一條往 TMR0 中寫(xiě)入數(shù)據(jù)的指令,則累加計(jì)數(shù)器的加 1 操作將被推遲兩個(gè)指令周期,重新開(kāi)始計(jì)數(shù)。這兩個(gè)指令周期的偏差在用戶編寫(xiě)時(shí)間精度要求較高的程序時(shí)應(yīng)引起注意,可以通過(guò)在每次寫(xiě)入 TMR0 時(shí)給一個(gè)調(diào)整值的方法來(lái)解決。
假設(shè)的是時(shí)鐘頻率為 4MHz。因此,一個(gè)指令周期就是一個(gè)微秒(μs)的時(shí)間。
,也就是計(jì)數(shù)一次時(shí)間是1us。
沒(méi)有分頻比定時(shí)器的初值計(jì)算公式:T0=256-Tc+2
其中TC是想得到的次數(shù)。加2的原因是寫(xiě)值的時(shí)候要消耗兩個(gè)指令周期。
如果分頻器給了定時(shí)器,最好不要再讀寫(xiě)TMR0了,不然會(huì)照成誤差。
假設(shè)分頻器是16,晶振是4Mhz,一次由00到FF的時(shí)間是16*256=4096us。假設(shè)50ms的時(shí)間
在中斷每次加上4096,
主程序檢查是不是超過(guò)50000,超過(guò)了就減掉50000,這樣算是50ms就得到了。
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版