日韩黄色视频网站_神电影院午夜dy888达达免_3344国产在线观看_日韩欧美精选在线_黑人30厘米全进去_看黄色一级视频_亚洲成av人片无码不卡葡京_国产精品人伦一区二区三区乱码_青青草原1769久久免费播放_日韩无码免费视频网站

歡迎來到深圳市科源信科技有限公司官網(wǎng)! 設(shè)為首頁 | 加入收藏 | 留言反饋 | English
 

51單片機之晶振與定時器

發(fā)布時間 : 2022.03.05 瀏覽次數(shù) : 2279

 晶振,也就是晶體振蕩器,主要作用是產(chǎn)生穩(wěn)定的振動頻率用于單片機時鐘電路。

一、晶振的工作原理

壓電效應(yīng):

晶體振蕩器結(jié)構(gòu)圖

如圖所示,晶體振蕩器主要由引線構(gòu)成的電極和晶體片構(gòu)成。


當(dāng)我們在晶體兩電極外加電壓后,晶體會發(fā)生形變,反過來,如果外力使得晶體變形,兩極上又會產(chǎn)生電壓。


因此當(dāng)我們在晶體兩端施加一個交變電壓時,隨著電壓正負(fù)的改變,晶體交替形變,進而以一定的頻率發(fā)生諧振–單頻振蕩(振蕩頻率固定不變)。

二、晶體單頻振蕩產(chǎn)生時鐘脈沖

在這里插入圖片描述

我們知道,脈沖信號是一個按一定電壓幅度、一定時間間隔連續(xù)發(fā)出的信號。

而我們的晶體振蕩器,既有電壓幅度–晶體兩端施加的電壓,又有時間間隔–振蕩頻率 f 的倒數(shù)作為周期。因此我們可以通過我們的晶體振蕩器產(chǎn)生一個穩(wěn)定的時鐘脈沖信號來為我們的單片機提供精準(zhǔn)計時。


三、單片機的時間單位

現(xiàn)在我們有了由晶體振蕩器產(chǎn)生的精準(zhǔn)時鐘脈沖,可以給我們的單片機計時了。但對于單片機來講,用我們所熟知的時分秒等計時單位來計時,并不合適。因此我們根據(jù)單片機的工作特性和原理,引入了時鐘周期、狀態(tài)周期、機器周期、指令周期幾個概念來作為我們單片機的時間單位。


1、時鐘周期


也叫振蕩周期或者晶振周期,即晶振的單位時間發(fā)出的脈沖數(shù)。如12Mhz晶振的時鐘周期為1/ f =1/12Mhz,也就是1/12微秒。


時鐘周期是計算機中最基本、最小的時間單位。


在8051單片機中把一個時鐘周期定義為一個節(jié)拍(用P表示),二個節(jié)拍定義為一個狀態(tài)周期(用S表示)


2、機器周期


計算機中,為了便于管理,常把一條指令的執(zhí)行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期。51單片機中一個機器周期等于12個時鐘周期。


在標(biāo)準(zhǔn)的51單片機中,一般情況下,一個機器周期等于12個時鐘周期,也就是機器周期=12*時鐘周期,(上面講到的原因)如果是12MHZ,那么機器周期=1微秒。單片機工作時,是一條一條地從RoM中取指令,然后一步一步地執(zhí)行。單片機訪問一次存儲器的時間,稱之為一個機器周期,這是一個時間基準(zhǔn)。


機器周期不僅對于指令執(zhí)行有著重要的意義,而且機器周期也是單片機定時器和計數(shù)器的時間基準(zhǔn)。例如一個單片機選擇了12MHZ晶振,那么當(dāng)定時器的數(shù)值加1時,實際經(jīng)過的時間就是1us,這就是單片機的定時原理。


3、指令周期


指令周期是執(zhí)行一條指令所需要的時間,一般由若干個機器周期組成。指令不同,所需的機器周期數(shù)也不同。


對于一些簡單的的單字節(jié)指令,在取指令周期中,指令取出到指令寄存器后,立即譯碼執(zhí)行,不再需要其它的機器周期。


對于一些比較復(fù)雜的指令,例如轉(zhuǎn)移指令、乘法指令,則需要兩個或者兩個以上的機器周期


Part2 定時計數(shù)器

在我們的單片機中,說到時間就離不開上面所提的時鐘脈沖。而我們的定時計數(shù)器就是對這些脈沖進行計數(shù),來進行時間計算的,本質(zhì)上我們的定時計數(shù)器是一個加1計數(shù)器,也就是每輸入一個脈沖,計數(shù)加一。


但要注意的一點是,定時器和計數(shù)器是兩個不同的功能單元。


定時器是由單片機自身提供的一個非常穩(wěn)定的計數(shù)器(晶振),接受的是內(nèi)部脈沖;


而計數(shù)器則不同,記錄的是單片機外部發(fā)生的事情,接受的是外部脈沖。


舉一個計數(shù)器的例子,方便大家理解,我現(xiàn)在讓我的計數(shù)器記錄我的一個獨立按鍵按下的次數(shù),那它所接受的脈沖便是我們按鍵按下過程中產(chǎn)生外部脈沖。


這里需要注意的是,計數(shù)器自動加1需要檢測從1到0的下降沿,因此需要兩個計數(shù)周期,最高計數(shù)頻率為24晶振頻率。


由于不同型號的51單片機的定時器個數(shù)不同,下面以最基礎(chǔ)的8951單片機為例進行闡述


一、定時計數(shù)器的寄存器

說了這么多,那單片機具體應(yīng)該怎么使用呢,別急,咱們還得從最基本的寄存器開始看起。


首先我們來看一下定時計數(shù)器的定時方式寄存器–TMOD

GATE :定時操作開關(guān)控制位,當(dāng)GATE=1時,INT0或INT1引腳為高電平,同時TCON中的TR0或TR1控制位為1時,計時/計數(shù)器0或1才開始工作。若GATE=0,則只要將TR0或TR1控制位設(shè)為1,計時/計數(shù)器0或1就開始工作。


C/T :定時器或計數(shù)器功能的選擇位。C/T=1為計數(shù)器,通過外部引腳T0或T1輸入計數(shù)脈沖。C/T=0時為定時器,由內(nèi)部系統(tǒng)時鐘提供計時工作脈沖。


M1 M0:T0、T1工作模式選擇位

設(shè)置好方式,當(dāng)然還有具體的定時器控制寄存器–TCON

TF1:定時器T1溢出標(biāo)志,可由程序查詢和清零,TF1也是中斷請求源,當(dāng)CPU響應(yīng)T1中斷時由硬件清零。


TF0:定時器T0溢出標(biāo)志,可由程序查詢和清零,TF0也是中斷請求源,當(dāng)CPU響應(yīng)T0中斷時由硬件清零。


TR1:T1充許計數(shù)控制位,為1時充許T1計數(shù)(定時)。


TR0:T0充許計數(shù)控制位,為1時充許T0計數(shù)(定時)。


下面四個屬于中斷部分,這里不多做闡述。


IE1:外部中斷1請示源(INT1,P3.3)標(biāo)志。IE1=1,外部中斷1正在向CPU請求中斷,當(dāng)CPU響應(yīng)該中斷時由硬件清“0”。


IT1:外部中斷源1觸發(fā)方式控制位。此位為1設(shè)置為底電平觸發(fā),為0設(shè)置為下降沿觸發(fā)。


IE0:外部中斷0請示源(INT0,P3.2)標(biāo)志。IE0=1,外部中斷1正在向CPU請求中斷,當(dāng)CPU響應(yīng)該中斷時由硬件清“0”。


IT0:外部中斷源0觸發(fā)方式控制位。此位為1設(shè)置為底電平觸發(fā),為0設(shè)置為下降沿觸發(fā)。


二、我們來看一下定時器的4種工作模式

1、工作模式0:


由TL0的低5位和TH0的全部8位共同構(gòu)成一個13位的定時器/計數(shù)器,定時器/計數(shù)器啟動后,定時或計數(shù)脈沖個數(shù)加到TL0上,從預(yù)先設(shè)置的初值(時間常數(shù))開始累加,不斷遞增1,當(dāng) TL0計滿后,向TH0進位,直到13位寄存器計滿溢出,TH0溢出時,置位TCON中的TF0標(biāo)志,向CPU發(fā)出中斷請求。并且定時器/計數(shù)器硬件會自動地把13位的寄存器值清0,如果需要進一步定時/計數(shù),需要使用相關(guān)指令重置時間常數(shù),并把定時器/計數(shù)器的中斷標(biāo)記TF0置0。


2、工作模式1:最常用的定時器工作模式


模式1與模式0幾乎完全相同,唯一的區(qū)別就是,模式1中的寄存器TH0和TL0共同構(gòu)成的是一個16位定時器/計數(shù)器來參與操作,因此比模式0中的定時/計數(shù)范圍更大


3、工作模式2: 工作方式2特別適合于用作較精確的脈沖信號發(fā)生器。


這種模式又稱為自動再裝入預(yù)置數(shù)模式。有時候,我們的定時/計數(shù)操作是需要多次重復(fù)定時/計數(shù)的,如果溢出時不做任何處理,那么,在第二輪定時/計數(shù)時就是從0開始定時/計數(shù)了,而這并不是我們想要的。所以,要保證每次溢出之后,再重新開始定時/計數(shù)的操作是我們想要的,那就要把預(yù)置數(shù)(時間常數(shù))重新裝入某個地方,而重新裝入預(yù)置數(shù)的操作是硬件設(shè)備自動完成的,不需要人工干預(yù),所以這種工作模式就叫自動再裝入預(yù)置數(shù)方式。在工作模式2中,把自動重裝入的預(yù)置數(shù)存放在定時器/計數(shù)器的寄存器的高8位中,也就是存放在TH0中,而只留下TL0參與定時/計數(shù)操作。


這個工作模式常用于波特率發(fā)生器(串口通信),T1工作在串口模式2;用于這種方式時,定時器就是為了提供一個時間基準(zhǔn);計數(shù)溢出之后,不需要做太多的事情,只做一件事就可以,就是重新裝入預(yù)置數(shù),再開始重新計數(shù),而且中間不需要任何延時。


4、工作模式3:


方式3只適用于定時/計數(shù)器T0,定時器T1處于方式3時相當(dāng)于TR1=0,停止計數(shù)由于定時器/計數(shù)器T1沒有工作模式3,如果把定時器/計數(shù)器T0設(shè)置為工作模式3,那么TL0和TH0將被分割成兩個相互獨立的8位定時器/計數(shù)器。


三、定時計數(shù)器初值的確定

1、計數(shù)器計數(shù)初值確定


計數(shù)初值C=模-X

注:模為選用定時方式的最大數(shù)值,如方式一的模為65536


2、定時器定時初值


定時初值C=[t/MC] 注: MC-- 機器周期,t預(yù)定時間


3、定時器不同方式初值


工作方式0:13位定時器/計數(shù)器工作模式,最多可計數(shù)2的13次方次,即:8192次


工作方式1:16位定時器/計數(shù)器工作模式,最多可計數(shù)2的16次方次,即:65536次


工作方式2:8位定時器/計數(shù)器工作模式,最多可計數(shù)2的8次方次,即:256次,


工作方式3:8位定時器/計數(shù)器工作模式,最多可計數(shù)2的8次方次,即:256次


4、定時計數(shù)器初值載入寄存器

TH0=(65536-9216)/256


TL0=(65536-9216)%256


四、定時計數(shù)器的具體使用

定時:定時計數(shù)器作為定時器使用,配置步驟如下:


1.模式設(shè)置,配置TMOD寄存器


2.定時器初值設(shè)置 假設(shè)10ms中斷


3.開定時器中斷


4.開總中斷


5.打開定時器


#include


sbit led=P1^0;


unsigned int flag;


void main()


{


TMOD=0x01;//1.模式設(shè)置,00000001,采用的是定時器0,工作與式1(M1=0,M0=1)。


TH0=(65536-10000)/256; //2.定時器設(shè)置,每隔10毫秒發(fā)起一次中斷。


TL0=(65536-10000)%256;


ET0=1; //3.開定時器0中斷


EA = 1; //4.開總中斷


TR0=1; //5.打開定時器


while(1)


{


if(flag==100)


{


led=~led;


flag=0;


}


}


}


void TIM0() interrupt 1 //中斷服務(wù)程序


{


TH0=(65536-10000)/256; //進入中斷要重新設(shè)置定時器處置,要注意。


TL0=(65536-10000)%256;


flag++;


}


計數(shù):定時計數(shù)器作為計數(shù)器使用,配置步驟如下:


1.模式設(shè)置,配置TMOD寄存器。


2.開計數(shù)器中斷


3.開總中斷


4.打開計數(shù)器


通過這簡單的四步,我們就打開了一個計數(shù)器,可以對P3.4或者P3.5進行下降沿的脈沖計數(shù),這里有一點要注意就是計數(shù)器可以不開中斷,這樣溢出時只是不會進去中斷服務(wù)程序。


計數(shù)器示例程序


#include


sbit led=P1^0;


sbit s=P3^4;


unsigned int count;


void main()


{


TMOD=0x05; //1.模式設(shè)置,00000101,采用的是計數(shù)器0,工作模式1(M1=0,M0=1)。


TH0=0; //計數(shù)器清零


TL0=0;


ET0=1; //2.開計數(shù)器0中斷


EA=1; //3.開總中斷


TR0=1; //4.打開計數(shù)器


led=1;


while(1)


{


count=(TH0<<8)|TL0;


if((count*10000)==50000)//按5下按鍵led狀態(tài)取反


{


led=0;


TH0=0XFF;


TL0=0XFF; //人為的讓計數(shù)器進入中斷


}


}


}


void TIM0() interrupt 1 //中斷服務(wù)程序


{


led=1;


TH0=0;


TL0=0;


}


版權(quán)所有©深圳市科源信科技有限公司 備案號 粵ICP備13069399號   技術(shù)支持:深圳龍崗網(wǎng)站建設(shè)
分享按鈕