定時器是單片機的重要功能模塊之一,在檢測、控制領域有廣泛應用。定時器常用作定時時鐘,以實現定時檢測,定時響應、定時控制,并且可以產生ms寬的脈沖信號,驅動步進電機。定時和計數的最終功能都是通過計數實現,若計數的事件源是周期固定的脈沖則可實現定時功能,否則只能實現計數功能。因此可以將定時和計數功能全由一個部件實現。
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晶振很方便計算定時器的時間),使用插接式比較方便。
對12MHz1個機器周期1us12/fosc=1us
方式013位定時器最大時間間隔=2^13=8.192ms
方式116位定時器最大時間間隔=2^16=65.536ms
方式28位定時器最大時間間隔=2^8=0.256ms=256us定時5ms,計算計時器初值M=2^K-X*Fosc/1212MHz方式0:K=13,X=5ms,Fosc=12MHz則M=2^13-5*10^(-3)*12*10^6/12=3192=0x0C78THx=0CH,TLx=78H,
方式1:K=16,X=5ms,Fosc=12MHz則M=2^16-5*10^(-3)*12*10^6/12=60536=0xEC78THx=ECH,TLx=78H,
50ms12MHzTHx=3CH,TLx=B0H,10msTHx=D8H,TLx=F0H,
方式2:最大時間2^8Fosc/12=0.256ms
十進制數是怎么來的?6MHz一個機器周期12/6=2us定時1ms計數初值x(2^16-x)*2us=1000usx=2^16-500,TH,TL可置-500
12MHz一個機器周期12/12=1us12MHz一個機器周期12/12=1us定時50ms計數初值x(2^16-x)*1us=50000usx=2^16-50000,TH,TL可置-500定時器計內部晶振頻率
計數器計外部輸入CPU腳上的脈沖個數P3.4(T0)P3.5(T1)負跳變加一
當晶振為6MHz時,最高計數頻率500KHz