一、51單片機(jī)定時(shí)器初值計(jì)算
1、方法一
void main(void)
{
s1=1;
TMOD=0x01; //使用定時(shí)器T0的模式1
TH0=(65536-46083)/256; //定時(shí)器T0的高8位設(shè)置初值
TL0=(65536-46083)%256; //定時(shí)器T0的低8位設(shè)置初值
函數(shù)功能:定時(shí)器T0的中斷服務(wù)函數(shù)
********************************************************/
void Time0(void ) interrupt 1 using 0 //定時(shí)器T0的中斷編號(hào)為1,使用第1組工作寄存器
{
count++; //每產(chǎn)生1次中斷,中斷累計(jì)次數(shù)加1
if(count==20) //如果中斷次數(shù)計(jì)滿20次
count=0; //中斷累計(jì)次數(shù)清0
s++; //秒加1
網(wǎng)絡(luò)上閱讀一段程序,定時(shí)器初值 46083 是怎么計(jì)算出來的? 一般我們?nèi)缬?AT892051的話 定時(shí)50MS 就是 TH0=(65536-50000)/256;
猜想應(yīng)該是使用的12M晶體 ,20次為1S.
2、方法二
10MS定時(shí)器初值的計(jì)算:
1)晶振12M
12MHz除12為1MHz,也就是說一秒=1000000次機(jī)器周期。10ms=10000次 機(jī)器周期。
65536-10000=55536(d8f0)
TH0=0xd8,TL0=0xf0
2)晶振11.0592M
11.0592MHz除12為921600Hz,就是一秒921600次機(jī)器周期,10ms=9216次機(jī)器周期。
65536-9216=56320(dc00)
TH0=0xdc,TL0=0x00
3、方法三
50MS定時(shí)器初值的計(jì)算:
1)晶振12M
12MHz除12為1MHz,也就是說一秒=1000000次機(jī)器周期。50ms=50000次 機(jī)器周期。
65536-50000=15536(3cb0)
TH0=0x3c,TL0=0xb0
2)晶振11.0592M
11.0592MHz除12為921600Hz,就是一秒921600次機(jī)器周期,50ms=46080次機(jī)器周期。
65536-46080=19456(4c00)
TH0=0x4c,TL0=0x00
使用說明
以12M晶振為例:每秒鐘可以執(zhí)行1000000次機(jī)器周期個(gè)機(jī)器周期。而T 每次溢出
最多65536 個(gè)機(jī)器周期。我們盡量應(yīng)該讓溢出中斷的次數(shù)最少(如50ms),這樣對(duì)主程序的干擾也就最小。
開發(fā)的時(shí)候可能會(huì)根據(jù)需要更換不同頻率的晶振(比如c51單片機(jī),用11.0592M的晶振,很適合產(chǎn)生串口時(shí)鐘,而12M晶振很方便計(jì)算定時(shí)器的時(shí)間),使用插接式比較方便。
對(duì)12MHz 1個(gè)機(jī)器周期 1us 12/fosc = 1us
方式0 13位定時(shí)器最大時(shí)間間隔 = 2^13 = 8.192ms
方式1 16位定時(shí)器最大時(shí)間間隔 = 2^16 = 65.536ms
方式2 8位定時(shí)器最大時(shí)間間隔 = 2^8 = 0.256ms =256 us
定時(shí)5ms,計(jì)算計(jì)時(shí)器初值 M = 2^K-X*Fosc/12 12MHz
方式0: K=13,X=5ms,F(xiàn)osc=12MHz 則 M = 2^13 - 5*10^(-3)*12*10^6/12= 3192 = 0x0C78
THx = 0CH,TLx = 78H,
方式1: K=16,X=5ms,F(xiàn)osc=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: 最大時(shí)間 2^8Fosc/12 = 0.256ms
十進(jìn)制數(shù)是怎么來的?
6MHz 一個(gè)機(jī)器周期 12/6 = 2us
定時(shí)1ms 計(jì)數(shù)初值x
?。?^16-x)*2us = 1000us
x = 2^16 - 500 ,TH,TL 可置 -500
12MHz 一個(gè)機(jī)器周期 12/12 = 1us
12MHz 一個(gè)機(jī)器周期 12/12 = 1us
定時(shí)50ms 計(jì)數(shù)初值x
?。?^16-x)*1us = 50000us
x = 2^16 - 50000 ,TH,TL 可置 -500
定時(shí)器 計(jì)內(nèi)部晶振頻率
計(jì)數(shù)器 計(jì)外部輸入CPU腳上的脈沖個(gè)數(shù) P3.4(T0) P3.5(T1) 負(fù)跳變加一
當(dāng)晶振為6MHz時(shí),最高計(jì)數(shù)頻率500KHz
電子發(fā)燒友App
















評(píng)論