最近在學單片機定時器初值的計算方法,下面大概列出來12MHz晶振與11.0592MHz兩種不同晶振的區別,用10ms和50ms的計算方法,希望能幫助到大家,有問題可以評論區提問
一、10MS定時器初值的計算:
1.晶振12M
12MHz除12為1MHz,也就是說一秒=1000000次機器周期。10ms=10000次 機器周期。
65536-10000=55536(d8f0)
TH0=0xd8,TL0=0xf0
2.晶振11.0592M
11.0592MHz除12為921600Hz,就是一秒921600次機器周期,10ms=9216次機器周期。
65536-9216=56320(dc00)
TH0=0xdc,TL0=0x00
二、50MS定時器初值的計算:
1.晶振12M
12MHz除12為1MHz,也就是說一秒=1000000次機器周期。50ms=50000次 機器周期。
65536-50000=15536(3cb0)
TH0=0x3c,TL0=0xb0
2.晶振11.0592M
11.0592MHz除12為921600Hz,就是一秒921600次機器周期,50ms=46080次機器周期。
65536-46080=19456(4c00) TH0=0x4c,TL0=0x00
三、使用說明
以12M晶振為例:每秒鐘可以執行1000000次機器周期個機器周期。而T 每次溢出 最多65536 個機器周期。我們盡量應該讓溢出中斷的次數最少(如50ms),這樣對主程序的干擾也就最小。 開發的時候可能會根據需要更換不同頻率的晶振(比如c51單片機,用11.0592M的晶振,很適合產生串口時鐘,而12M晶振很方便計算定時器的時間),使用插接式比較方便。
對12MHz 1個機器周期 1us 12/fosc = 1us
方式0 13位定時器最大時間間隔 = 2^13 = 8.192ms
方式1 16位定時器最大時間間隔 = 2^16 = 65.536ms
方式2 8位定時器最大時間間隔 = 2^8 = 0.256ms =256 us 定時5ms,計算計時器初值 M = 2^K-X*Fosc/12 12MHz 方式0: K=13,X=5ms,Fosc=12MHz 則 M = 2^13 - 5*10^(-3)*12*10^6/12= 3192 = 0x0C78 THx = 0CH,TLx = 78H,
方式1: K=16,X=5ms,Fosc=12MHz 則 M = 2^16 - 5*10^(-3)*12*10^6/12= 60536 = 0xEC78 THx = ECH,TLx = 78H,
50ms 12MHz THx = 3CH,TLx = B0H, 10ms THx = D8H,TLx = F0H,
方式2: 最大時間 2^8Fosc/12 = 0.256ms |