久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

第9課 定時(shí)器

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月30日   【字體:

        在對(duì)單片機(jī)應(yīng)用項(xiàng)目進(jìn)行編程時(shí),經(jīng)常需要插入一定的延時(shí)程序,此時(shí)一般有兩種方案可選擇,一是采用軟件手段——插入一段延時(shí)程序,二是采用單片機(jī)內(nèi)部的硬件資源——定時(shí)器。對(duì)于軟件手段,我們?cè)谇懊娴恼n程已經(jīng)詳細(xì)講到過(guò),它最大的缺點(diǎn)就是占用單片機(jī)的“機(jī)時(shí)”,也就是耗費(fèi)單片機(jī)的“精力”,從而降低了單片機(jī)的工作效率。而定時(shí)器則不同,它是單片機(jī)內(nèi)部一個(gè)獨(dú)立的功能模塊,定時(shí)器一旦設(shè)置后,定時(shí)器便自動(dòng)開(kāi)始計(jì)時(shí),當(dāng)計(jì)時(shí)時(shí)間滿后,便產(chǎn)生相應(yīng)的中斷,去處于中斷函數(shù)內(nèi)的程序,而在計(jì)時(shí)這段時(shí)間內(nèi),定時(shí)器和CPU是分別獨(dú)立工作的,CUP此時(shí)就可以有時(shí)間去做其它的事情。所以為了提高單片機(jī)的工作效率和實(shí)現(xiàn)精確的延時(shí),目前幾乎所有的半導(dǎo)休生產(chǎn)廠商在設(shè)計(jì)單片機(jī)時(shí),在內(nèi)部都配置了定時(shí)器模塊。下面51單片機(jī)內(nèi)部的定時(shí)器進(jìn)行介紹。

1、定時(shí)器/計(jì)數(shù)器概述
51單片機(jī)內(nèi)部共有兩個(gè)定時(shí)器/計(jì)數(shù)器模塊T0和T1,對(duì)于52單片機(jī)內(nèi)部又增加了定時(shí)器T3。它們即具有定時(shí)功能,也可以作計(jì)數(shù)功能,可以通過(guò)相應(yīng)的寄存器進(jìn)行設(shè)置。但不論是用于定時(shí)功能還是計(jì)數(shù)功能,其基本原理都是一樣的,如圖1所示為定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)圖,內(nèi)部為一個(gè)加1計(jì)數(shù)器,由高8位TH0(或TH1)和低8位TL0(或TL1)兩個(gè)計(jì)數(shù)寄存器組成。TMOD是定時(shí)器/計(jì)數(shù)器的工作模式和工作方式寄存器,用來(lái)確定是處于定時(shí)模式還是計(jì)數(shù)模式以及何種工種方式,這個(gè)后面講解寄存器的時(shí)會(huì)講到。TCON為控制寄存器,用來(lái)控制定時(shí)器/計(jì)數(shù)器的啟動(dòng)、停止及溢出標(biāo)志等的設(shè)置。
圖1 定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)框圖
 
工作原理如圖的所示,加1計(jì)數(shù)器相當(dāng)于一個(gè)裝數(shù)的容器,每來(lái)一個(gè)脈沖自動(dòng)加1,當(dāng)數(shù)裝滿后便自動(dòng)溢出,如果此時(shí)設(shè)置的中斷,CPU便會(huì)停止當(dāng)前正在執(zhí)行的工作,去執(zhí)行中斷函數(shù)內(nèi)的程序。這里也可以形象把計(jì)數(shù)器看作一個(gè)裝水的水桶,每來(lái)一滴水,水桶的水便會(huì)增加一點(diǎn),當(dāng)水裝滿了后,便會(huì)溢出。
加1計(jì)數(shù)器的計(jì)數(shù)脈沖有兩個(gè)來(lái)源,一個(gè)是由系統(tǒng)時(shí)鐘振蕩器輸出脈沖經(jīng)過(guò)12分頻后送來(lái),一個(gè)是由外部引腳T0(P34引腳)和T1(P35引腳)送來(lái)的外部脈沖(通常為下降沿),前者主要用于定時(shí),后者主要用于計(jì)數(shù)。每來(lái)一個(gè)脈沖時(shí),計(jì)數(shù)器會(huì)自動(dòng)加1,當(dāng)加到全為1時(shí),再來(lái)一個(gè)脈沖,計(jì)數(shù)器便會(huì)自動(dòng)清0,且計(jì)數(shù)器此時(shí)會(huì)溢出并使TCON寄存器中的TF0和TF1置1,如果此時(shí)設(shè)置了定時(shí)器中斷允許,便會(huì)自動(dòng)的向CPU發(fā)出中斷請(qǐng)求。
圖2 定時(shí)器/計(jì)數(shù)器的工作原圖
可能大家還是不明白,這樣為什么就可以用來(lái)進(jìn)行定時(shí)和計(jì)數(shù)呢,這里我們以通俗的例子解釋一下定時(shí),還是以水桶裝水為例,假設(shè)水桶開(kāi)始一滴水都沒(méi)有(相當(dāng)于計(jì)數(shù)器內(nèi)部全為0),此時(shí)來(lái)一滴水(相當(dāng)于來(lái)一個(gè)脈沖),水桶的水便會(huì)增加一滴(相當(dāng)于計(jì)數(shù)器自動(dòng)加1),而水桶的容積是規(guī)定了的(相當(dāng)于計(jì)數(shù)器最大計(jì)數(shù)值),水桶的水總會(huì)有滿的時(shí)候(相當(dāng)于計(jì)數(shù)器加到全部為1),此時(shí)假設(shè)每來(lái)一滴水的時(shí)間我們知道或者人為可以設(shè)置,水桶從一滴水沒(méi)有到全部裝滿就會(huì)有一個(gè)時(shí)間,這個(gè)就是定時(shí)時(shí)間值。
也就是說(shuō),我們?nèi)绻烂縼?lái)一個(gè)脈沖相應(yīng)的時(shí)間t,又知道加1計(jì)數(shù)器最大可以裝多少數(shù)n,我們就可以知道這個(gè)時(shí)間值T,即T=nt。而這個(gè)T的時(shí)間通常是固定的,實(shí)際應(yīng)用時(shí)需要不同的定時(shí)時(shí)間,我們可以采用預(yù)先在計(jì)數(shù)器內(nèi)裝一定的初值(相當(dāng)于在水桶內(nèi)先裝一些水),然后在這個(gè)初值的基本上再來(lái)相應(yīng)脈沖,計(jì)數(shù)器自動(dòng)加1,一直到溢出,我們就可以得到任意想要的定時(shí)時(shí)間。
從圖2中我們還可以看出,定時(shí)器/計(jì)數(shù)器還有一個(gè)控制開(kāi)關(guān),此開(kāi)關(guān)可以控制定時(shí)器計(jì)數(shù)器相應(yīng)的啟動(dòng)和停止。而此開(kāi)關(guān)的開(kāi)閉主要是由圖2左下部的TRX 、GATE等信號(hào)共同作用,這里都是門(mén)電路,可以由數(shù)電的知道解釋,因?yàn)楸容^簡(jiǎn)單,這里我就不作說(shuō)明,后面結(jié)合的相關(guān)的寄存器進(jìn)行介紹。
2、定時(shí)器/計(jì)數(shù)器相關(guān)寄存器
與定時(shí)器/計(jì)數(shù)器相關(guān)的寄存器主要有兩個(gè)(編程時(shí)如涉及到中斷,還要用到中斷相關(guān)的寄存器,前面已經(jīng)講可),一個(gè)是工作模式及工作方式設(shè)置寄存器TMOD,一個(gè)就是跟控制有關(guān)(就是圖2中開(kāi)關(guān)的設(shè)置有關(guān)的)寄存器TCON,下面分別對(duì)其進(jìn)行介紹。
注意:對(duì)單片機(jī)內(nèi)部寄存器的說(shuō)明相當(dāng)于對(duì)結(jié)構(gòu)原理的解釋,所以在單片機(jī)內(nèi)部功能模塊看不明白時(shí),也可以借助相關(guān)寄存器的說(shuō)明加以理解。
(1)定時(shí)器工作模式及工作方式寄存器TMOD
工作方式寄存器TMOD用于設(shè)置定時(shí)/計(jì)數(shù)器的工作模式及工作方式,低四位用于T0,高四位用于T1。其格式如下:
GATE:門(mén)控位。GATE=0時(shí),只要用軟件使TCON中的TR0或TR1為1,就可以啟動(dòng)定時(shí)/計(jì)數(shù)器工作;GATA=1時(shí),要用軟件使TR0或TR1為1,同時(shí)外部中斷引腳或也為高電平時(shí),才能啟動(dòng)定時(shí)/計(jì)數(shù)器工作。即此時(shí)定時(shí)器的啟動(dòng)多了一條件。
C/T :定時(shí)/計(jì)數(shù)模式選擇位。C/T=0為定時(shí)模式;C/T =1為計(jì)數(shù)模式。
M1M0:工作方式設(shè)置位。定時(shí)/計(jì)數(shù)器有四種工作方式,由M1M0進(jìn)行設(shè)置。具體說(shuō)明如下表:
(2)定時(shí)器/計(jì)數(shù)器控制寄存器TCON
TCON的低4位用于控制外部中斷,已在前面介紹。TCON的高4位用于控制定時(shí)/計(jì)數(shù)器的啟動(dòng)和中斷申請(qǐng)。其格式如下:
TF1(TCON.7):T1溢出中斷請(qǐng)求標(biāo)志位。T1計(jì)數(shù)溢出時(shí)由硬件自動(dòng)置TF1為1。CPU響應(yīng)中斷后TF1由硬件自動(dòng)清0。T1工作時(shí),CPU可隨時(shí)查詢TF1的狀態(tài)。所以,TF1可用作查詢測(cè)試的標(biāo)志。TF1也可以用軟件置1或清0,同硬件置1或清0的效果一樣。
TR1(TCON.6):T1運(yùn)行控制位。TR1置1時(shí),T1開(kāi)始工作;TR1置0時(shí),T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止。
TF0(TCON.5):T0溢出中斷請(qǐng)求標(biāo)志位,其功能與TF1類同。
TR0(TCON.4):T0運(yùn)行控制位,其功能與TR1類同。
3、定時(shí)器工作方式及賦初值
通過(guò)對(duì)上面TMOD寄存器的介紹,我們知道,通過(guò)設(shè)置M0M1可能選擇定時(shí)器的工作方式。這里可能有的人對(duì)選擇定時(shí)器工作方式及賦初值是什么意思不明白,其實(shí)也很好理解,前面我們不是把加1計(jì)數(shù)器比作裝水的水桶嗎,而51單片機(jī)有4種工作方式就相當(dāng)于有4種不同大小的裝水的水桶,所以我們必須通過(guò)TMOD這個(gè)寄存器選擇哪使用哪一個(gè)水桶(也就是選擇哪一種工作方式);至于為什么要賦初值前面我實(shí)際已經(jīng)有講到過(guò),計(jì)數(shù)器從全是裝0到全部裝1的整個(gè)時(shí)間是固定的,而我們實(shí)際用使用需要不同的定時(shí)間,所以我們必須先在計(jì)數(shù)器內(nèi)先裝一些數(shù),然后在這個(gè)基本上進(jìn)行加1計(jì)數(shù),就可以得到我們想要的定時(shí)時(shí)間。
定時(shí)器總共有四種工作方式,而因?yàn)槎〞r(shí)器工作方式1比較常用,所以這里僅對(duì)定時(shí)器0工作方式1進(jìn)行介紹,并介紹如何賦初值。
方式1的計(jì)數(shù)位數(shù)是16位,由TL0作為低8位、TH0作為高8位,組成了16位加1計(jì)數(shù)器 ,其邏輯結(jié)構(gòu)圖如圖3所示。
 
圖3 定時(shí)器0工作方式1邏輯結(jié)構(gòu)圖
當(dāng)GATE=0,TR0=1時(shí),TL0便在機(jī)器周期的作用下開(kāi)始自動(dòng)加1,當(dāng)加了256次后自動(dòng)向前進(jìn)一位,直到TH0也計(jì)滿,然后溢出,置標(biāo)志寄存器TF0=1,如果此時(shí)設(shè)置了中斷允許,CPU便作進(jìn)入中斷函數(shù)內(nèi)進(jìn)行中斷程序的處理。注意,此時(shí)若TR0=1一直打開(kāi)的話,計(jì)數(shù)器滿后會(huì)全部自動(dòng)清零,然后重新重復(fù)以上過(guò)程,直到TR0=0時(shí)結(jié)束。
接下來(lái)講解如何計(jì)算定時(shí)器的初值問(wèn)題。定時(shí)器一旦啟動(dòng),它便在原來(lái)的數(shù)值基礎(chǔ)上開(kāi)始加1計(jì)數(shù),若在程序開(kāi)始時(shí),我們沒(méi)有設(shè)置TH0和TL0,它們的默認(rèn)值都是0,假設(shè)時(shí)鐘頻率為12MHZ,12個(gè)時(shí)鐘周期為一個(gè)機(jī)器周期,那么此時(shí)的機(jī)器周期就是1us,計(jì)滿TH0和TL0就需要2X16-1,再來(lái)一個(gè)脈沖,計(jì)數(shù)器就溢出,隨即向CPU申請(qǐng)中斷。因此溢出一次的時(shí)間為65536us,約等于65.5ms,如果我們要定時(shí)50ms,此時(shí)就需要向TH0t和TL0里面先賦初值,在這個(gè)初值的基礎(chǔ)上計(jì)50000個(gè)數(shù)后,定時(shí)器溢出,此時(shí)剛好就是50ms中斷一次,如需要定時(shí)1S時(shí),在寫(xiě)程序時(shí)當(dāng)產(chǎn)生20次50ms的定時(shí)器中斷后便認(rèn)定是1s,這樣便可以精確制定定時(shí)時(shí)間了。要定時(shí)50ms,即要計(jì)50000個(gè)數(shù),TH0和TL0中應(yīng)該裝的總數(shù)是65536-50000=15536,把15536對(duì)256求模:15536/256裝入TH0中,把15536對(duì)256求余:15536%256裝入TL0中就可以了。
以上就是定時(shí)器賦初值的計(jì)算方法,總結(jié)后可以得出以下結(jié)論:當(dāng)用定時(shí)器的方式1時(shí),設(shè)機(jī)器周期為t ,定時(shí)器產(chǎn)生一次中斷的時(shí)間為T(mén),那么需要計(jì)數(shù)的個(gè)數(shù)N=T/t,裝放THX和TLX中的數(shù)分別為:
THX=(65536-N)/256 ,TLX=(65536-N)%256
要計(jì)算機(jī)器周期t,就需要知道系統(tǒng)的時(shí)鐘頻率,也就是單片機(jī)外接晶振的頻率,實(shí)驗(yàn)板上的時(shí)鐘頻率為11.0592MHZ,那么機(jī)器周期為12X(1/11059200)=1.09us,若T=50ms.那么N=50000/1.09=45873,如果晶振為12MHX的話,用同樣的方法算出來(lái)N=50000.
4程序舉例
下面我們舉一個(gè)例子,用單片機(jī)的定時(shí)器0、工作方式1和中斷技術(shù)實(shí)現(xiàn)讓L1以間隔1s的時(shí)間閃爍。
這里我們先總結(jié)一下,在使用定時(shí)器主要對(duì)定時(shí)器作相應(yīng)的初始化,其步驟為:
(1)對(duì)TMOD賦值
選擇計(jì)數(shù)或者定時(shí)
確定T0或T1的工作方式。
(2)計(jì)算初值,并將其寫(xiě)入TH0、TL0或TH1、TL1。
(3)使TR0或TR1置位,啟動(dòng)定時(shí)/計(jì)數(shù)器定時(shí)或計(jì)數(shù)。
(4)需使用中斷方式時(shí),則對(duì)IE等賦值,開(kāi)放中斷
下面我們給出相關(guān)程序。
例1:1357燈以間隔1s的時(shí)間閃爍。
 
#include<reg52.h>//頭文件,主要用來(lái)聲明,特殊功能寄存器的地址
#define uint unsigned int//宏定義
#define uchar unsigned char//宏定義
sbit D1=P1^0;//位聲明
uchar time;//定義變量time為無(wú)符號(hào)字符型
void main()//主函數(shù)
{
       TMOD=0x01;//設(shè)置定時(shí)器0為工作方式1
       TH0=(65535-50000)/256;//定時(shí)50ms賦初值15535
       TL0=(65535-50000)%256;
       EA=1;//開(kāi)總中斷
       ET0=1;//開(kāi)定時(shí)器0中斷
       TR0=1;//啟動(dòng)定時(shí)器0
          //上面6行為定時(shí)器和中斷初始化程序  
       while(1);//停在這里等待中斷產(chǎn)生
                    
}
void tim1() interrupt 1//中斷子函數(shù),功能為500ms燈滅一次
{
       time++;//進(jìn)入一次中斷time自加1
       if(time==10)//如果自加到10,相當(dāng)于500ms
       {
              D1=~D1;//燈亮滅交替
              time=0;//time清零
       }
}
程序下載到51hei實(shí)驗(yàn)板上的現(xiàn)象如圖4所示:
圖4 L1燈以間隔1s的時(shí)間閃爍
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 日韩精品成人网 | 伊人手机在线视频 | 日日夜夜天天 | 国产剧情一区 | 国产免费一区 | 特黄视频 | 欧美一级电影免费观看 | 第一区在线观看免费国语入口 | 亚洲美女一区二区三区 | 综合另类 | 国产高清在线精品 | 精品一区二区三区在线观看国产 | 久草在线 | 国产精品二区三区在线观看 | 激情a| 久草欧美 | 九九热这里只有精品6 | 韩日一区二区 | 国产高清精品在线 | 国产激情视频 | 国产欧美性成人精品午夜 | 五月婷婷激情网 | 欧美一区永久视频免费观看 | 狠狠干美女 | 欧美九九九 | 欧美色视频免费 | 视频一区二区三区在线观看 | 精品国产久 | 成人视屏在线观看 | 国产免费让你躁在线视频 | 午夜在线视频 | 欧美亚洲国语精品一区二区 | 欧美午夜一区二区三区免费大片 | 中文二区 | 久久久久国产一区二区三区四区 | 亚洲国产二区 | 超碰人人人 | 午夜亚洲 | 中国三级黄色录像 | 亚洲天堂久久 | 欧美精品在线一区二区三区 |