發表於 2018-01-22 15:59:10
定時器是單片機的重要功能模塊之一,在檢測、控制領域有廣泛應用。定時器常用作定時時鐘,以實現定時檢測,定時響應、定時控制,並且可以產生ms寬的脈衝信號,驅動步進電機。定時和計數的最終功能都是通過計數實現,若計數的事件源是周期固定的脈衝則可實現定時功能,否則只能實現計數功能。因此可以將定時和計數功能全由一個部件實現。
12MHz除12為1MHz,也就是說一秒=1000000次機器周期。10ms=10000次機器周期。
65536-10000=55536(d8f0)
TH0=0xd8,TL0=0xf0
11.0592MHz除12為921600Hz,就是一秒921600次機器周期,10ms=9216次機器周期。
65536-9216=56320(dc00)
TH0=0xdc,TL0=0x00
12MHz除12為1MHz,也就是說一秒=1000000次機器周期。50ms=50000次機器周期。
65536-50000=15536(3cb0)
TH0=0x3c,TL0=0xb0
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
打開APP閱讀更多精彩內容
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴