⑴ 51系列單片機定時/計數器初始化的步驟
TMOD:模式控制寄存器,定時器的運行模式,定時計數模式等;
TCON:運行控制寄存器,定時器的中斷允許和外部觸發中斷允許,運行停止控制,溢出標志等
THx/TLx:計數值
IE:中斷控制,如果要開啟中斷允許,則需要配置這個寄存器;
IP:中斷優先順序控制,如果開了幾個中斷源,則需要配置中斷控制的先後;
總體就是:
先關運行和中斷,然後配置模式,配置計數值,定時器運行打開,定時器是否中斷允許,是否開啟總中斷;
如果不開中斷,就直接配置模式和計數值,然後運行即可,主程序里查詢溢出位,判斷是否到計數值(不準確)。
其他定時器T2等,有其他的寄存器,但配置方法同。
⑵ mcs-51單片機定時器應用的初始化步驟有哪些
TMOD、TH0或TH1、TL0或TL1、EA=1;TR0或TR1=1;
TMOD選擇方式。TH0=(65536-x)%256;x為定時時間,x<65536
EA=1;開中斷;TR1=1;啟動定時器。
例如:
TMOD=0X10;
TH1=0X4b;
TL1=0Xfe
TR=1;
「TMOD=0X10;」設置定時器1模式為模式一(16位定時器/計數器)
「TH1=0X4b;TL1=0Xfe;」設置定時器初值
"TR1=1"啟動定時器1
t=(2^16-初值)*機器周期=(2^16-初值)*時鍾周期*12
此例中:初值=0x4bfe=19454
t=(65536-19454)*1/11095200*12=0.04983993078087821760....約為0.05s即50ms
公式解釋:
每個機器周期產生一個計數脈沖,計時器寄存器最大允許2^16,大於2^16就溢出觸發中斷。初值為T,則還有65536-T次計數,每次計數用時一個機器周期,所以總用時:t=(2^16-初值)*機器周期=(2^16-初值)*時鍾周期*12
初值設置:把所需時間T代入上式解出初值0xAABB,把0xAA作為TH,0xBB作為TL
也可以用上式推導出初值計算公式
⑶ 51單片機定時器初始化沒有賦初值,計時器會怎麼計時
定時器的計時與否與給不給初值沒關系,只要TR0
=
1,或者TR1
=
1,相應的定時器就開始計時。
定時器的初始值在復位之後,THx
=
0,TLx=
0,也就是說,如果你沒有人為的給出初始值,就從0開始計,計到最大值,溢出後再從0開始計。
我們之所以給初值,是為了得到精確的,我們需要的計時時間,並不是控制定時器是否計時的。
⑷ 51單片機串口初始化步驟,首先初始化那個在初始化那個,最好是華為等大公司的初始化模版
設置系統時鍾-》設定分頻-》設定引腳輸出輸入方式(推挽或漏極開路)-》設定定時器1工作模式在八位自動重載模式-》載入定時器初始值-》開啟定時器1-》開啟串口0中斷使能-》開啟總中斷使能-》開啟串口0接受允許-》設定串口0工作模式-》初始化完成。
將數據壓入發送緩沖寄存器
用while
語句等待發送標志位被置位
然後清0,以為數據發送完成。
⑸ 51單片機定時器初始化程序的基本步驟
1.設置工作方式即TMOD的值
2.計算初值寫TH TL的值
3.開啟定時器中斷和總中斷
4.啟動定時器。
⑹ 51單片機的定時器初始化可以帶參數嗎 例如:void timer_init(uchar a,uchar b):
1、定時器初始化通常在51程序的開始設置。一般情況下,不需要。因為函數只調用一次就累贅了。
2、當定時器需要反復設定,在程序運行過程中,需要重復修改時。利用函數的模塊化思想,當然代碼效率更高、可讀性、維護管理升級都是有益的。
3、函數設計時,局部變數標識符的取名應該更貼近該參數的含義。
4、語法上完全可以。根據需要定義函數,完善函數的功能。void timer_init(uchar a,uchar b){}
【補】在中斷中,隨時更新這個參數ab,是可以的。但是注意:中斷服務裡面的a、b應該是全局變數。函數定義中,形參不要和此相同。最終賦值給a、b。那麼主程序調用timer_init()後,中斷服務裡面的初值就可以更新了。