 單片機(ji)定時器(qi)的作用及(ji)使用方法詳解
							時(shi)間:2018-07-19      來源:未知
							單片機(ji)定時器(qi)的作用及(ji)使用方法詳解
							時(shi)間:2018-07-19      來源:未知 
							單片機定時器的作用及使用方法詳解
單片機定(ding)(ding)(ding)時(shi)器在單片機的(de)功(gong)(gong)(gong)能是(shi)很重要的(de),它一般被用(yong)作定(ding)(ding)(ding)時(shi)功(gong)(gong)(gong)能,來(lai)做定(ding)(ding)(ding)時(shi)檢(jian)測、定(ding)(ding)(ding)時(shi)響應和(he)定(ding)(ding)(ding)時(shi)控制(zhi),并(bing)且可(ke)(ke)以(yi)(yi)產生毫(hao)秒(miao)寬的(de)脈沖(chong)(chong)信號來(lai)驅動步(bu)進(jin)電機。計時(shi)和(he)計數(shu)的(de)最終功(gong)(gong)(gong)能是(shi)通過(guo)計數(shu)實(shi)(shi)現(xian)的(de)。如果計數(shu)事件(jian)源是(shi)周(zhou)期性固定(ding)(ding)(ding)脈沖(chong)(chong),則可(ke)(ke)以(yi)(yi)實(shi)(shi)現(xian)定(ding)(ding)(ding)時(shi)功(gong)(gong)(gong)能,否則只能實(shi)(shi)現(xian)計數(shu)功(gong)(gong)(gong)能。因此(ci),定(ding)(ding)(ding)時(shi)和(he)計數(shu)功(gong)(gong)(gong)能可(ke)(ke)以(yi)(yi)由單個組(zu)件(jian)實(shi)(shi)現(xian)。計時(shi)器的(de)結構和(he)工(gong)作原理可(ke)(ke)以(yi)(yi)通過(guo)下面的(de)圖表簡單地分析(xi)。
單片機的作用:
首(shou)先(xian)要為大(da)家解釋的(de)(de)(de)一(yi)(yi)個(ge)問(wen)題是(shi),單(dan)片(pian)(pian)機定時(shi)(shi)器(qi)(qi)(qi)其(qi)實跟我們(men)平時(shi)(shi)常說的(de)(de)(de)計數(shu)器(qi)(qi)(qi),是(shi)同一(yi)(yi)個(ge)電子元件,只不過(guo)計數(shu)器(qi)(qi)(qi)記錄的(de)(de)(de)是(shi)51單(dan)片(pian)(pian)機外(wai)(wai)部情況,所(suo)接(jie)受的(de)(de)(de)也(ye)是(shi)外(wai)(wai)部脈(mo)沖(chong)(chong),而定時(shi)(shi)器(qi)(qi)(qi)則是(shi)由單(dan)片(pian)(pian)機自身提供的(de)(de)(de)一(yi)(yi)個(ge)非常穩(wen)定的(de)(de)(de)計數(shu)器(qi)(qi)(qi),這個(ge)穩(wen)定的(de)(de)(de)計數(shu)器(qi)(qi)(qi)就是(shi)單(dan)片(pian)(pian)機上(shang)連接(jie)的(de)(de)(de)晶(jing)(jing)振(zhen)部件。單(dan)片(pian)(pian)機的(de)(de)(de)晶(jing)(jing)振(zhen)經(jing)過(guo)12分頻之后提供給單(dan)片(pian)(pian)機的(de)(de)(de)只有(you)1MHZ的(de)(de)(de)穩(wen)定脈(mo)沖(chong)(chong),晶(jing)(jing)振(zhen)的(de)(de)(de)頻率是(shi)非常準(zhun)確的(de)(de)(de),所(suo)以(yi)單(dan)片(pian)(pian)機的(de)(de)(de)計數(shu)脈(mo)沖(chong)(chong)之間(jian)的(de)(de)(de)時(shi)(shi)間(jian)間(jian)隔也(ye)是(shi)非常準(zhun)確的(de)(de)(de),這個(ge)準(zhun)確的(de)(de)(de)時(shi)(shi)間(jian)間(jian)隔是(shi)1微(wei)秒。
下(xia)面我們(men)來看一下(xia),一個單(dan)(dan)片(pian)機定(ding)時器的簡單(dan)(dan)結(jie)構圖(tu),如(ru)下(xia)圖(tu)所示:
 
單片機定時器的簡單結構(gou)圖
而(er)無論是單(dan)片(pian)機定(ding)(ding)時(shi)(shi)(shi)器(qi),還是計(ji)數(shu)器(qi),他們在單(dan)片(pian)機的工(gong)作運行(xing)過程(cheng)中都(dou)有(you)定(ding)(ding)時(shi)(shi)(shi)或事件計(ji)數(shu)功(gong)能,因此(ci)常常會被應(ying)用于時(shi)(shi)(shi)間控制(zhi)、程(cheng)序延(yan)時(shi)(shi)(shi)、對外部時(shi)(shi)(shi)間計(ji)數(shu)和檢測等工(gong)作范圍內。而(er)一旦了解了計(ji)數(shu)器(qi)/定(ding)(ding)時(shi)(shi)(shi)器(qi)的應(ying)用領域和使用情(qing)況(kuang),工(gong)程(cheng)師(shi)就可以(yi)充(chong)分利用單(dan)片(pian)機定(ding)(ding)時(shi)(shi)(shi)器(qi)來完成一些對時(shi)(shi)(shi)間限制(zhi)要求精準的程(cheng)序的設定(ding)(ding),例如信(xin)號檢測或電氣自(zi)動化設計(ji),都(dou)是比較(jiao)常用到(dao)51單(dan)片(pian)機計(ji)數(shu)器(qi)進行(xing)程(cheng)序設計(ji)的領域。
單片(pian)機的使用:
單片(pian)機定時器的使用可以說非常簡(jian)單,只要掌握原理,有(you)一點(dian)的C語言基礎就行了。要點(dian)有(you)以下幾個(ge):
1. 一(yi)定(ding)要知道英文縮寫的(de)原形,這樣(yang)寄存器的(de)名字就不(bu)用記(ji)了(le)。
理解是最好的(de)(de)記憶(yi)方(fang)法(fa)。好的(de)(de)教材一定會(hui)給出所(suo)有英文縮寫的(de)(de)原形。
2. 盡(jin)量用形像的方法記憶。
比如(ru)TCON和(he)TMOD兩個寄存器各(ge)位(wei)上的功能,教程一般有(you)個圖(tu)(tu)表,你就在(zai)學習(xi)中不斷回憶那個圖(tu)(tu)表的形像。
3. TMOD:定時(shi)器(qi)/計數器(qi)模(mo)式控制寄存(cun)器(qi)(TIMER/COUNTER MODE CONTROL REGISTER)
定時器(qi)/計(ji)數器(qi)模(mo)式(shi)控制寄存(cun)器(qi)TMOD是一個(ge)逐位定義(yi)的8位寄存(cun)器(qi),但只能使(shi)用字(zi)節尋址,其字(zi)節地址為89H。其格式(shi)為:其中低四位定義(yi)定時器(qi)/計(ji)數器(qi)C/T0,高四位定義(yi)定時器(qi)/計(ji)數器(qi)C/T1,各位的說明:
(1)GATE——門(men)控制。
GATE=1時(shi),由外部中斷引腳INT0、INT1來啟動定時(shi)器T0、T1。
當INT0引腳為高電平時(shi)TR0置位(wei),啟動定時(shi)器T0;
當(dang)INT1引腳為高電平時(shi)TR1置位(wei),啟(qi)動(dong)定時(shi)器T1。
GATE=0時,僅(jin)由(you)TR0,TR1置(zhi)位分別啟動定時器T0、T1。
(2)C/T——功能選擇(ze)位
C/T=0時(shi)為定時(shi)功(gong)能,C/T=1時(shi)為計數功(gong)能。
置位(wei)時(shi)(shi)選擇計數功能(neng),清零時(shi)(shi)選擇定(ding)時(shi)(shi)功能(neng)。
(3)M0、M1——方式選(xuan)擇功能
由于有2位,因此(ci)有4種工作方式:
M1M0 工作方式 計數器模(mo)式 TMOD(設置(zhi)定時器模(mo)式)
0 0 方(fang)式(shi)0 13位計數器(qi) TMOD=0x00
0 1 方式1 16位計數(shu)器 TMOD=0x01
1 0 方(fang)式2 自動(dong)重裝8位計數器 TMOD=0x02
1 1 方式3 T0分為(wei)(wei)2個8位獨立計數器(qi),T1為(wei)(wei)無中斷重裝(zhuang)8位計數器(qi) TMOD=0x03
單片機定時器(qi)0設(she)置為(wei)工作方式1為(wei)TMOD=0x01
這里我們(men)一定要知道(dao)(dao),TMOD的(de)T是TIMER/COUNTER的(de)意思,MOD是MODE的(de)意思。至于每位上的(de)功能(neng),你只要記住圖表,并知道(dao)(dao)每個英文(wen)縮寫的(de)原(yuan)型就可以了。
在(zai)程(cheng)序(xu)中用到TMOD時,先(xian)立即(ji)回憶(yi)圖(tu)表,并根據(ju)縮寫的(de)單詞(ci)原形理出每位的(de)意(yi)義,如果意(yi)義不是很(hen)清楚,就(jiu)查下手(shou)冊,幾次下來,TMOD的(de)圖(tu)表就(jiu)已經在(zai)腦子里了。
8位(wei) GATE位(wei),本(ben)身(shen)是門的意思(si)。
7位 C/T Counter/Timer
6位(wei) M1 Mode 1
5位(wei) M0 Mode 0
4. TCON: 定時器/計數器控制寄存器(TIMER/COUNTER CONTROL REGISTER)
TMOD分成(cheng)2段(duan),TCON控(kong)制更加精細,分成(cheng)四(si)(si)段(duan),在本文中只要用到高四(si)(si)段(duan)。
TF0(TF1)——計(ji)數(shu)溢(yi)出(chu)標志位,當計(ji)數(shu)器計(ji)數(shu)溢(yi)出(chu)時,該位置1。
(1)TR0(TR1)——定時器運行控制位
當TR0(TR1)=0 停止(zhi)定時器(qi)/計數(shu)器(qi)工作(zuo)
當TR0(TR1)=1 啟動定時器(qi)/計數器(qi)工作
(2)IE0(IE1)——外中斷請求標(biao)志位
當CPU采樣到P3.2(P3.3)出現(xian)有效中斷(duan)請求時(shi),此位(wei)由硬件置1。在中斷(duan)響應完成后轉向中斷(duan)服(fu)務時(shi),再由硬件自動清0。
(3)IT0(IT1)——外中斷請求(qiu)信號方式控(kong)制(zhi)位
當IT0(IT1)=1 脈沖方式(shi)(后沿負跳有效)
當(dang)IT0(IT1)=0 電平方式(低電平有(you)效(xiao))此位由軟件置(zhi)1或(huo)清0。
(4)TF0(TF1)——計數(shu)溢出標志位(wei)
當計數(shu)器產生計數(shu)溢(yi)出時(shi),此位(wei)(wei)由(you)硬件置(zhi)1。當轉向中(zhong)(zhong)斷(duan)服務時(shi),再有硬件自動清0。計數(shu)溢(yi)出的(de)標志(zhi)位(wei)(wei)的(de)使用(yong)有兩種情況:采用(yong)中(zhong)(zhong)斷(duan)方式時(shi),作(zuo)中(zhong)(zhong)斷(duan)請求標志(zhi)位(wei)(wei)來(lai)(lai)使用(yong);采用(yong)查詢方式時(shi),作(zuo)查詢狀態位(wei)(wei)來(lai)(lai)使用(yong)。注意記憶方法(fa),理解單詞(ci)原形,就絕(jue)對不會把TF和TR搞混(hun)。TF的(de)F也就是(shi)溢(yi)出Over Flow的(de)F。TR的(de)R就是(shi)運(yun)行Run。默(mo)認(ren)是(shi)0不運(yun)行,當然要(yao)置(zhi)1才運(yun)行。
5. STC單片機STC89C52RC定時器延時時間的(de)計算
延時(shi)時(shi)間要根據晶(jing)振(zhen)頻率(lv)計算,不(bu)同(tong)(tong)板子可(ke)能有(you)所不(bu)同(tong)(tong)。
時鐘周期:
1/時(shi)鐘(zhong)源,在(zai)我現(xian)在(zai)這塊板子上,晶振頻率(lv)是11.0592M,也就是時(shi)鐘(zhong)周(zhou)期(qi)是 1/11059200秒
機器周期:
一般51單片機是(shi)12個(ge)時鐘周期,我的(de)板子也就是(shi) 12/11059200秒
單次定時最長(chang)時間:
如果是(shi)16位(wei)的計數(shu)(shu)器,16位(wei)最大值(zhi)是(shi)65535,共(gong)可計數(shu)(shu)65536次(ci)。基(ji)本的常數(shu)(shu)一定(ding)要(yao)記(ji)住(zhu),還(huan)要(yao)記(ji)住(zhu)8位(wei)最大值(zhi)是(shi)255,共(gong)可計數(shu)(shu)256次(ci),還(huan)要(yao)記(ji)住(zhu)8位(wei)上每位(wei)代(dai)表的數(shu)(shu)值(zhi)。
12 * 65536/11059200 = 0.0711 s,也就是(shi),71 ms內的定(ding)時(shi)(shi)可以(yi)單次(ci)定(ding)時(shi)(shi)就完成。如(ru)果定(ding)時(shi)(shi)時(shi)(shi)間超過71 ms,就要循環了。
一次定(ding)時需要(yao)幾次機器周期(qi):
計(ji)算公(gong)式(shi):定時(shi)秒(miao)數/機器周期
比如我要定時(shi)1秒, 1/(12/11059200)= 921600次(ci)(ci)(ci),16位計數(shu)器最大可計數(shu)65536次(ci)(ci)(ci),921600次(ci)(ci)(ci)早就益(yi)出了(le)。我們可以每次(ci)(ci)(ci)定時(shi)10 ms,循環(huan)100次(ci)(ci)(ci)就可以定時(shi)1秒了(le),1 s縮小100百倍(bei)就是10 ms, 也就是每次(ci)(ci)(ci)需要計數(shu)9216次(ci)(ci)(ci)。
確實計數器初始值:
定時10 ms時,如果計數(shu)器從0開始(shi)計數(shu),我(wo)(wo)們就(jiu)(jiu)不知(zhi)道(dao)什么(me)時候到了9216次(ci)。所以應(ying)該計數(shu)了9216次(ci),16位(wei)計數(shu)器最多計數(shu)95536次(ci),然后就(jiu)(jiu)溢出(chu),一溢出(chu)TCON的(de)TF位(wei)就(jiu)(jiu)會(hui)置1,我(wo)(wo)們只(zhi)要經常(chang)檢測(ce)TF位(wei)就(jiu)(jiu)可以知(zhi)道(dao)什么(me)時候完成(cheng)10ms的(de)定時了。
計(ji)(ji)算公式:計(ji)(ji)數器初始(shi)值=最大計(ji)(ji)數次數 - 需(xu)要計(ji)(ji)數次數
如(ru)果定時10 ms,計(ji)數(shu)器的(de)初始值(zhi)就是(shi) 65536 - 9216
計算(suan)計數器的高位和(he)低位:
16位(wei)的計數器,也就(jiu)是兩個8位(wei)組成(cheng),8位(wei)的最大計數次數是256。所以(yi):
計數(shu)器高位 = 初始值/256
計數(shu)器(qi)低位 = 初始值(zhi)%6

