版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章MCS-51系列單片機(jī)的片內(nèi)接口及中斷5.1并行I/O接口及其應(yīng)用5.2定時(shí)器/計(jì)數(shù)器及其應(yīng)用5.3中斷系統(tǒng)及其應(yīng)用5.4串行接口及其應(yīng)用5.1.1并行I/O的結(jié)構(gòu)及功能5.1并行I/O接口及其應(yīng)用1、P0結(jié)構(gòu):作用:1、外擴(kuò)芯片時(shí),P0口不再做I/O口使用,而是作為地址/數(shù)據(jù)總線。地址/數(shù)據(jù)控制線等于0做數(shù)據(jù)線、1做地址線2、沒(méi)有外擴(kuò)芯片時(shí),P0口可以直接作為IO口使用&讀引腳寫(xiě)控制信號(hào)DB0.0讀鎖存控制線C+5VP0.0轉(zhuǎn)換開(kāi)關(guān)CPDQQ’鎖存器01地址/數(shù)據(jù)P0輸出0:P0口直接做輸出口時(shí),輸出信息的過(guò)程(將0送到P0.0的過(guò)程)注意:P0口做輸出口時(shí),內(nèi)部數(shù)據(jù)經(jīng)過(guò)鎖存器送到P00---P07上。由于上管始終截止,而當(dāng)下管也截止時(shí),P00—P07被架空,沒(méi)有標(biāo)準(zhǔn)的高電平,所以P0口作輸出口使用時(shí),必須外接上拉電阻。讀引腳&寫(xiě)控制信號(hào)DB0.0讀鎖存控制線C+5VP0.0轉(zhuǎn)換開(kāi)關(guān)CPDQQ’鎖存器0010001地址/數(shù)據(jù)P0輸入1:讀引腳注意:1、P0口作輸入口時(shí),P00—P07上的信號(hào)經(jīng)過(guò)緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。2、CPU對(duì)P0口的讀操作有2種:讀引腳和讀—改—寫(xiě)鎖存器。&寫(xiě)控制信號(hào)DB0.0讀鎖存控制C+5VP0.0轉(zhuǎn)換開(kāi)關(guān)CPDQQ’鎖存器10001地址/數(shù)據(jù)P0總結(jié)1、P0口具有地址/數(shù)據(jù)總線和雙向IO口兩種功能2、P0作為IO口使用時(shí),必須外置上拉電阻3、P0口作輸入口時(shí),P00—P07上的信號(hào)經(jīng)過(guò)緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。4、CPU對(duì)P0口的讀操作有2種:讀引腳和讀—改—寫(xiě)鎖存器。5、P0作為IO口時(shí),最多能驅(qū)動(dòng)或者吸收8個(gè)TTL負(fù)載讀引腳寫(xiě)控制信號(hào)DB0.0讀鎖存+5VP1.0CPDQQ’鎖存器2、P1結(jié)構(gòu):作用:P1口只能可以直接作為輸入口或輸出口使用。P1輸出1:讀引腳寫(xiě)控制信號(hào)DB0.0讀鎖存+5VP1.0CPDQQ’鎖存器1001注意:P1口做輸出口時(shí),內(nèi)部數(shù)據(jù)經(jīng)過(guò)鎖存器送到P10---P17上。由于內(nèi)部有上拉電阻,所以P1口作輸出口使用時(shí),不用外接上拉電阻。P1輸入0:讀引腳寫(xiě)控制信號(hào)DB0.0讀鎖存+5VP1.0CPDQQ’鎖存器00注意:1、P1口作輸入口時(shí),P10—P17上的信號(hào)經(jīng)過(guò)緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。2、CPU對(duì)P1口的讀操作有2種:讀引腳和讀—改—寫(xiě)鎖存器。P1總結(jié)1、P1口只有IO功能2、P1口作輸入口時(shí),P10—P17上的信號(hào)經(jīng)過(guò)緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。3、CPU對(duì)P1口的讀操作有2種:讀引腳和讀—改—寫(xiě)鎖存器。4、P1作為IO口時(shí),最多能驅(qū)動(dòng)或者吸收4個(gè)TTL負(fù)載3、P2結(jié)構(gòu):作用:1、外擴(kuò)芯片時(shí),P2口不再做I/O口使用,而是傳送高8位地址。2、沒(méi)有外擴(kuò)芯片時(shí),P2口可以直接作為IO口使用。讀引腳寫(xiě)控制信號(hào)DB0.0讀鎖存控制C+5VP2.0轉(zhuǎn)換開(kāi)關(guān)CPDQQ’鎖存器01地址/數(shù)據(jù)P2輸出0:讀引腳注意:P2口做輸出口時(shí),內(nèi)部數(shù)據(jù)經(jīng)過(guò)鎖存器送到P20---P27上。由于內(nèi)部有上拉電阻,所以P2口作輸出口使用時(shí),不用外接上拉電阻。寫(xiě)控制信號(hào)DB0.0讀鎖存控制C+5VP2.0轉(zhuǎn)換開(kāi)關(guān)CPDQQ’鎖存器00010地址/數(shù)據(jù)01P2輸入0:注意:1、P2口作輸入口時(shí),P20—P27上的信號(hào)經(jīng)過(guò)緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。2、CPU對(duì)P2口的讀操作有2種:讀引腳和讀—改—寫(xiě)鎖存器。讀引腳寫(xiě)控制信號(hào)DB0.0讀鎖存控制C+5VP2.0轉(zhuǎn)換開(kāi)關(guān)CPDQQ’鎖存器00001地址/數(shù)據(jù)P2總結(jié)1、P2口具有IO口和高8位地址總線兩種功能2、P2口作輸入口時(shí),P20—P27上的信號(hào)經(jīng)過(guò)緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。3、CPU對(duì)P2口的讀操作有2種:讀引腳和讀—改—寫(xiě)鎖存器。4、P2作為IO口時(shí),最多能驅(qū)動(dòng)或者吸收4個(gè)TTL負(fù)載4、P3結(jié)構(gòu):讀引腳寫(xiě)控制信號(hào)DB0.0讀鎖存+5VP3.0CPDQQ’鎖存器&第二功能輸出第二功能輸入作用:1、P3口可以直接作為IO口使用。2、P3口的引腳又具有第二功能。P3輸出1:注意:P3口做輸出口時(shí),內(nèi)部數(shù)據(jù)經(jīng)過(guò)鎖存器送到P30---P37上。由于內(nèi)部有上拉電阻,所以P2口作輸出口使用時(shí),不用外接上拉電阻。讀引腳寫(xiě)控制信號(hào)DB0.0讀鎖存+5VP3.0CPDQQ’鎖存器&第二功能輸出第二功能輸入10101P3輸入0:注意:1、P3口作輸入口時(shí),P30—P37上的信號(hào)經(jīng)過(guò)緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。2、CPU對(duì)P3口的讀操作有2種:讀引腳和讀—改—寫(xiě)鎖存器。讀引腳寫(xiě)控制信號(hào)DB0.0讀鎖存+5VP3.0CPDQQ’鎖存器&第二功能輸出第二功能輸入00P3總結(jié)1、P3口具有IO口和第二功能兩種功能2、P3口作輸入口時(shí),P30—P37上的信號(hào)經(jīng)過(guò)緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。3、CPU對(duì)P3口的讀操作有2種:讀引腳和讀—改—寫(xiě)鎖存器。4、P3作為IO口時(shí),最多能驅(qū)動(dòng)或者吸收4個(gè)TTL負(fù)載I/O總結(jié)功能輸入口輸出口驅(qū)動(dòng)能力P0數(shù)據(jù)線、地址線低8位在讀引腳之前,要先將鎖存器置1直接輸出(外接上拉電阻)8個(gè)TTL負(fù)載P1數(shù)據(jù)線在讀引腳之前,要先將鎖存器置1直接輸出4個(gè)TTL負(fù)載P2數(shù)據(jù)線、地址線高8位在讀引腳之前,要先將鎖存器置1直接輸出4個(gè)TTL負(fù)載P3數(shù)據(jù)線、第二功能在讀引腳之前,要先將鎖存器置1直接輸出4個(gè)TTL負(fù)載5.1.2并行I/O接口的應(yīng)用例1:電路結(jié)構(gòu)如下圖所示,欲利用發(fā)光二極管LED顯示開(kāi)關(guān)K的狀態(tài),即開(kāi)關(guān)閉合時(shí)LED亮,開(kāi)關(guān)K斷開(kāi)時(shí)LED熄滅,試編程實(shí)現(xiàn)。
參考程序如下:
CLRP1.0 ;給LED一個(gè)初態(tài),熄滅BACK:
SETBP1.7 ;對(duì)輸入位P1.7寫(xiě)“1”
JBP1.7,BACK1;K斷開(kāi),轉(zhuǎn)BACK1
SETBP1.0 ;K閉合,LED亮
SJMPBACKBACK1:
CLRP1.0 ;K斷開(kāi),LED滅
SJMPBACKC51參考程序如下:SfrP1=0x90;SbitP1_0=0x90;SbitP1_7=0x97;Vpidmain(){Volatilebitk;P1_0=0;P1_7=1;While(1){k=P1_7;P1_0=~k;}}例2:電路結(jié)構(gòu)如下圖所示。要求當(dāng)圖中Ki閉合時(shí)與之對(duì)應(yīng)的LEDi亮,Ki斷開(kāi)時(shí)LEDi熄滅。試編程實(shí)現(xiàn)。參考程序如下:
ORG0000HLJMPMAIN;跳轉(zhuǎn)到主程序
ORG0100HMAIN:
MOVP1,#00H ;8位LED全滅
MOVP0,#0FFH ;P0置1,準(zhǔn)備進(jìn)行輸入操作BACK:
MOVA,P0;讀P0口開(kāi)關(guān)狀態(tài),并送入累加器ACPLA ;對(duì)累加器A求反
MOVP1,A ;從P1口輸出
SJMPBACK;循環(huán)執(zhí)行C51參考程序如下:SfrP0=0x80;SfrP1=0x90;Voidmain(){Volatileunsignedchark;P0=0xff;P1=0;While(1){K=P0;P1=~K;}Return;}5.1.3
單片機(jī)控制發(fā)光二極管顯示
發(fā)光二極管常用來(lái)指示系統(tǒng)工作狀態(tài),制作節(jié)日彩燈、廣告牌匾等。大部分發(fā)光二極管工作電流1~5mA之間,其內(nèi)阻為20~100Ω。電流越大,亮度也越高。為保證發(fā)光二極管正常工作,同時(shí)減少功耗,限流電阻選擇十分重要,若供電電壓為+5V,則限流電阻可選1~3kΩ。25(1)
單片機(jī)與發(fā)光二極管的連接
P0口作通用I/O用,由于漏極開(kāi)路,需外接上拉電阻。而P1~P3口內(nèi)部有30kΩ左右上拉電阻。下面討論P(yáng)1~P3口如何與LED發(fā)光二極管驅(qū)動(dòng)連接問(wèn)題。單片機(jī)并行端口P1~P3直接驅(qū)動(dòng)發(fā)光二極管,電路見(jiàn)圖5-1。與P1、P2、P3口相比,P0口每位可驅(qū)動(dòng)8個(gè)LSTTL輸入,而P1~P3口每一位驅(qū)動(dòng)能力,只有P0口一半。27發(fā)光二極管與單片機(jī)并行口的連接
當(dāng)P0口某位為高電平時(shí),可提供400A的拉電流;當(dāng)P0口某位為低電平(0.45V)時(shí),可提供3.2mA的灌電流,而P1~P3口內(nèi)有30kΩ左右上拉電阻,如高電平輸出,則從P1、P2和P3口輸出的拉電流Id僅幾百μA,驅(qū)動(dòng)能力較弱,亮度較差,見(jiàn)圖5-1(a)。如端口引腳為低電平,能使灌電流Id從單片機(jī)外部流入內(nèi)部,則將大大增加流過(guò)的灌電流值,見(jiàn)圖5-1(b)。AT89S51任一端口要想獲得較大的驅(qū)動(dòng)能力,要用低電平輸出。如一定要高電平驅(qū)動(dòng),可在單片機(jī)與發(fā)光二極管間加驅(qū)動(dòng)電路,如74LS04、74LS244等。(2)I/O端口的C51編程控制
P0~P3口是單片機(jī)與外設(shè)進(jìn)行信息交換的橋梁,可通過(guò)讀取I/O口狀態(tài)了解外設(shè)狀態(tài),也可向I/O端口送出命令或數(shù)據(jù)控制外設(shè)。對(duì)I/O端口編程控制時(shí),要對(duì)I/O端口特殊功能寄存器聲明,在C51的編譯器中,這項(xiàng)聲明包含在頭文件reg51.h中,編程時(shí),可通過(guò)預(yù)處理命令#include<reg51.h>,把這個(gè)頭文件包含進(jìn)去。下面通過(guò)案例介紹如何編程對(duì)發(fā)光二極管輸出控制。29
【例5-1】
制作流水燈,原理電路見(jiàn)圖5-2,8個(gè)發(fā)光二極管LED0~LED7經(jīng)限流電阻分別接至P1口的P1.0~P1.7引腳上,陽(yáng)極共同接高電平。編寫(xiě)程序來(lái)控制發(fā)光二極管由上至下的反復(fù)循環(huán)流水點(diǎn)亮,每次點(diǎn)亮一個(gè)發(fā)光二極管。30圖5-2 {
for(t=0;t<120;t++); }}voidmain()
//主程序{ P1=0xfe; //向P1口送出點(diǎn)亮數(shù)據(jù)
while(1) { delay(500);
P1=_crol_(P1,1);
}}31參考程序:#include<reg51.h>#include<intrins.h> #defineucharunsignedchar #defineuintunsignedint
voiddelay(uinti)//延時(shí)函數(shù){
uchart; while(i--)
作業(yè)及練習(xí)題:
電路見(jiàn)圖5-2,制作由上至下再由下至上反復(fù)循環(huán)點(diǎn)亮顯示的流水燈,3種方法實(shí)現(xiàn)。(1)數(shù)組的字節(jié)操作實(shí)現(xiàn)(2)移位運(yùn)算符實(shí)現(xiàn)使用移位運(yùn)算符“>>”、“<<”,把送P1口顯示控制數(shù)據(jù)進(jìn)行移位,從而實(shí)現(xiàn)發(fā)光二極管依次點(diǎn)亮。(3)用循環(huán)左、右移位函數(shù)實(shí)現(xiàn)使用C51提供的庫(kù)函數(shù),即循環(huán)左移n位函數(shù)和循環(huán)右移n位函數(shù),控制發(fā)光二極管點(diǎn)亮。5.1.4
開(kāi)關(guān)狀態(tài)檢測(cè)讀入I/O端口電平,即可檢測(cè)開(kāi)關(guān)處于閉合狀態(tài)還是打開(kāi)狀態(tài)。(1)
開(kāi)關(guān)檢測(cè)案例1用I/O端口來(lái)進(jìn)行開(kāi)關(guān)狀態(tài)檢測(cè),開(kāi)關(guān)一端接到I/O端口引腳上,并通過(guò)上拉電阻接+5V上,開(kāi)關(guān)另一端接地,當(dāng)開(kāi)關(guān)打開(kāi)時(shí),I/O引腳為高電平,當(dāng)開(kāi)關(guān)閉合時(shí),I/O引腳為低電平。【例5-3】
如圖5-3,單片機(jī)的P1.4~P1.7接4個(gè)開(kāi)關(guān)S0~S3,P1.0~P1.3接4個(gè)發(fā)光二極管LED0~LED3。編程將P1.4~P1.7上的4個(gè)開(kāi)關(guān)狀態(tài)反映在P1.0~P1.3引腳控制的4個(gè)發(fā)光二極管上,開(kāi)關(guān)閉合,對(duì)應(yīng)發(fā)光二極管點(diǎn)亮。例如P1.4引腳上開(kāi)關(guān)S0狀態(tài),由P1.0腳上LED0顯示,P1.6引腳上開(kāi)關(guān)S2狀態(tài),由P1.2腳的LED2顯示。3334圖5-3開(kāi)關(guān)、LED發(fā)光二極管與P1口的連接參考程序如下:#include<reg51.h>#defineucharunsignedcharvoiddelay() //延時(shí)函數(shù){
uchar
i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);}voidmain() //主函數(shù){while(1){ unsignedchartemp; //定義臨時(shí)變量temp P1=0xff;//P1口低4位置1,作為輸入;高4位置1,發(fā)光二極管熄滅
temp=P1&0xf0; //讀P1口并屏蔽低4位,送入temp中
temp=temp>>4;//temp內(nèi)容右移4位,P1口高4位移至低4位
35
P1=temp; //temp中的數(shù)據(jù)送P1口輸出
delay( );}作業(yè)與練習(xí)題【例5-4】
如圖5-4,P1.0和P1.1引腳接有兩只開(kāi)關(guān)S0和S1,兩引腳上的高低電平共4種組合,4種組合分別點(diǎn)亮P2.0~P2.3引腳控制的4只LED,即S0、S1均閉合,LED0亮,其余滅;S1閉合、S0打開(kāi),LED1亮,其余滅;S0閉合、S1打開(kāi),LED2亮,其余滅;S0、S1均打開(kāi),LED3亮,其余滅。編程實(shí)現(xiàn)此功能。37圖5-4開(kāi)關(guān)檢測(cè)指示器2接口電路與仿真5.1.5
矩陣式鍵盤(pán)接口設(shè)計(jì)案例矩陣式(也稱行列式)鍵盤(pán)用于按鍵數(shù)目較多的場(chǎng)合,由行線和列線組成,按鍵位于行、列交叉點(diǎn)上。見(jiàn)圖5-5,一個(gè)44的行、列結(jié)構(gòu)可以構(gòu)成一個(gè)16個(gè)按鍵的鍵盤(pán),只需要一個(gè)8位的并行I/O口即可。如果采用88的行、列結(jié)構(gòu),可以構(gòu)成一個(gè)64按鍵的鍵盤(pán),只需要兩個(gè)并行I/O口即可。很明顯,在按鍵數(shù)目較多場(chǎng)合,矩陣式鍵盤(pán)要比獨(dú)立式鍵盤(pán)節(jié)省較多I/O口線。39圖5-5
矩陣式(行列式)鍵盤(pán)的接口電路掃描法基本原理:先把某一列置低電平,其余各列為高電平,檢查各行線電平的變化,如果某行線電平為低,可確定此行列交叉點(diǎn)處的按鍵被按下。掃描法步驟:△判別有無(wú)鍵按下。△去抖動(dòng)(延時(shí))。△判別有無(wú)鍵按下?!鞲鶕?jù)鍵的行、列信息得到鍵值?!髋袛嚅]合鍵是否釋放,如沒(méi)釋放則繼續(xù)等待;如果釋放,返回鍵值?!鞲鶕?jù)鍵值轉(zhuǎn)去執(zhí)行該鍵的處理程序。uchar
keyscan()//鍵盤(pán)掃描程序,返回uchar型參數(shù){unsignedchari;for(i=0;i<4;i++){P1=_crol_(0xfe,i);temp=P1;temp=temp&0xf0;
while(temp!=0xf0){delay(5);//延時(shí)消抖
temp=P1;temp=temp&0xf0;while(temp!=0xf0){temp=P1;
switch(temp){case0xee:num=1;break;case0xde:num=2;break;case0xbe:num=3;break;case0x7e:num=4;break;case0xed:num=5;break;case0xdd:num=6;break;case0xbd:num=7;break;case0x7d:num=8;break;case0xeb:num=9;break;case0xdb:num=10;break;case0xbb:num=11;break;case0x7b:num=12;break;case0xe7:num=13;break;case0xd7:num=14;break;case0xb7:num=15;break;case0x77:num=16;break;}
while(temp!=0xf0)//等待按鍵釋放
{temp=P1;temp=temp&0xf0;}}}}returnnum;}作業(yè)及練習(xí)題:根據(jù)下圖所示的電路,編寫(xiě)程序使數(shù)碼管顯示按鍵的編號(hào)。5.1.5
單片機(jī)控制LED數(shù)碼管的顯示(1)LED數(shù)碼管顯示原理LED數(shù)碼管:“8”字型,7段(不包括小數(shù)點(diǎn))或8段(包括小數(shù)點(diǎn)),每段對(duì)應(yīng)一個(gè)發(fā)光二極管,共陽(yáng)極和共陰極兩種,見(jiàn)圖5-5。共陽(yáng)極數(shù)碼管的陽(yáng)極連接在一起,接+5V;共陰極數(shù)碼管陰極連在一起接地。對(duì)于共陰極數(shù)碼管,當(dāng)某發(fā)光二極管陽(yáng)極為高電平時(shí),發(fā)光二極管點(diǎn)亮,相應(yīng)段被顯示。同樣,共陽(yáng)極數(shù)碼管陽(yáng)極連在一起,公共陽(yáng)極接+5V,當(dāng)某個(gè)發(fā)光二極管陰極接低電平時(shí),該發(fā)光二極管被點(diǎn)亮,相應(yīng)段被顯示。44圖5-58段LED數(shù)碼管結(jié)構(gòu)及外形
為使LED數(shù)碼管顯示不同字符,要把某些段點(diǎn)亮,就要為數(shù)碼管各段提供一個(gè)字節(jié)的二進(jìn)制碼,即字型碼(也稱段碼)。習(xí)慣上以“a”段對(duì)應(yīng)字型碼字節(jié)的最低位。各字符段碼見(jiàn)表5-1。45
【例5-5】利用單片機(jī)控制一個(gè)8段LED數(shù)碼管先循環(huán)顯示單個(gè)偶數(shù):0、2、4、6、8,再顯示單個(gè)奇數(shù):1、3、5、7、9,如此反復(fù)循環(huán)顯示。本例原理電路及仿真結(jié)果,見(jiàn)圖5-6。參考程序如下:圖5-6控制數(shù)碼管循環(huán)顯示單個(gè)數(shù)字的電路及仿真#include"reg51.h"#include"intrins.h"#defineucharunsignedchar#defineuintunsignedint#defineoutP0ucharcodeseg[]={0xc0,0xa4,0x99,0x82,0x80,0xf9,0xb0,0x92,0xf8,0x90,0x01};//共陽(yáng)極段//碼表voiddelayms(uint); voidmain(void){ uchari;while(1) { out=seg[i]; delayms(900); i++;
if(seg[i]==0x01)i=0;//如段碼為0x01,表明一個(gè)循環(huán)顯示已結(jié)束
}47}voiddelayms(uintj) //延時(shí)函數(shù) {uchari;for(;j>0;j--) { i=250; while(--i); i=249; while(--i); }}
說(shuō)明:語(yǔ)句“if(seg[i]==0x01)i=0;”含義:如果欲送出的數(shù)組元素為0x01(數(shù)字“9”段碼0x90的下一個(gè)元素,即結(jié)束碼),表明一個(gè)循環(huán)顯示已結(jié)束,則重新開(kāi)始循環(huán)顯示,48(2)LED數(shù)碼管的靜態(tài)顯示與動(dòng)態(tài)顯示
兩種顯示方式:靜態(tài)顯示和動(dòng)態(tài)顯示。
1).靜態(tài)顯示方式無(wú)論多少位LED數(shù)碼管,都同時(shí)處于顯示狀態(tài)。多位LED數(shù)碼管工作于靜態(tài)顯示方式時(shí),各位共陰極(或共陽(yáng)極)連接在一起并接地(或接+5V);每位數(shù)碼管段碼線(a~dp)分別與一個(gè)8位I/O口鎖存器輸出相連。如果送往各個(gè)LED數(shù)碼管所顯示字符的段碼一經(jīng)確定,則相應(yīng)I/O口鎖存器鎖存的段碼輸出將維持不變,直到送入下一個(gè)顯示字符段碼。靜態(tài)顯示方式顯示無(wú)閃爍,亮度較高,軟件控制較易。
圖5-7為4位LED數(shù)碼管靜態(tài)顯示電路,各數(shù)碼管可獨(dú)立顯示,只要向控制各位I/O口鎖存器送相應(yīng)顯示段碼,該位就能保持相應(yīng)的顯示字符。這樣在同一時(shí)間,每一位顯示的字符可各不相同。靜態(tài)顯示方式占用I/O口端口線較多。圖5-7電路,要占用4個(gè)8位I/O口(或鎖存器)。如數(shù)碼管數(shù)目增多,則需增加I/O口數(shù)目。50圖5-74位LED靜態(tài)顯示的示意圖【例5-6】單片機(jī)控制2只數(shù)碼管,靜態(tài)顯示2個(gè)數(shù)字“27”。原理電路見(jiàn)圖5-8。單片機(jī)用P0口與P1口,分別控制加到兩個(gè)數(shù)碼管DS0與DS1的段碼,而共陽(yáng)極數(shù)碼管DS0與DS1的公共端(公共陽(yáng)極端)直接接至+5V,因此數(shù)碼管DS0與DS1始終處于導(dǎo)通狀態(tài)。利用P0口與P1口帶有的鎖存功能,只需向單片機(jī)P0口與P1口分別寫(xiě)入相應(yīng)的顯示字符“2”和“7”的段碼即可。由于一個(gè)數(shù)碼管就占用一個(gè)I/O端口。如果數(shù)碼管數(shù)目增多,則需增加I/O口,但軟件編程要簡(jiǎn)單的多。51圖5-82位數(shù)碼管靜態(tài)顯示的原理電路與仿真參考程序如下:#include<reg51.h> //包含8051單片機(jī)寄存器定義的頭文件voidmain(void){P0=0xa4; //將數(shù)字"2"的段碼送P0口P1=0xf8; //將數(shù)字"7"的段碼送P1口
while(1) //無(wú)限循環(huán)
;}
5354圖5-94位LED數(shù)碼管動(dòng)態(tài)顯示示意圖2).動(dòng)態(tài)顯示方式
顯示位數(shù)較多時(shí),靜態(tài)顯示所占的I/O口多,這時(shí)常采用動(dòng)態(tài)顯示。為節(jié)省I/O口,通常將所有顯示器段碼線相應(yīng)段并聯(lián)在一起,由一個(gè)8位I/O口控制,各顯示位公共端分別由另一單獨(dú)I/O口線控制。圖5-9:4位8段LED動(dòng)態(tài)顯示器電路示意圖。其中單片機(jī)發(fā)出的段碼占用1個(gè)8位I/O(1)端口,而位選控制使用I/O(2)端口中4位口線。動(dòng)態(tài)顯示就是單片機(jī)向段碼線輸出欲顯示字符的段碼。每一時(shí)刻,只有1位位選線有效,即選中某一位顯示,其他各位位選線都無(wú)效。每隔一定時(shí)間逐位輪流點(diǎn)亮各數(shù)碼管(掃描方式),由于數(shù)碼管余輝和人眼的“視覺(jué)暫留”作用,只要控制好每位數(shù)碼管顯示時(shí)間和間隔,則可造成“多位同時(shí)亮”的假象,達(dá)到同時(shí)顯示效果。各位數(shù)碼管輪流點(diǎn)亮的時(shí)間間隔(掃描間隔)應(yīng)根據(jù)實(shí)際情況定。發(fā)光二極管從導(dǎo)通到發(fā)光有一定的延時(shí),如果點(diǎn)亮?xí)r間太短,發(fā)光太弱,人眼無(wú)法看清;時(shí)間太長(zhǎng),產(chǎn)生閃爍現(xiàn)象,且此時(shí)間越長(zhǎng),占用單片機(jī)時(shí)間也越多。55【例5-7】8只數(shù)碼管,分別滾動(dòng)顯示單個(gè)數(shù)字1~8。程序運(yùn)行后,單片機(jī)控制左邊第1個(gè)數(shù)碼管顯示1,其他不顯示,延時(shí)之后,控制左邊第2個(gè)數(shù)碼管顯示1,其他不顯示,直至第8個(gè)數(shù)碼管顯示8,其他不顯示,反復(fù)循環(huán)上述過(guò)程。圖5-108只數(shù)碼管分別滾動(dòng)顯示單個(gè)數(shù)字1~8
習(xí)題及練習(xí)題:利用下圖所示的電路,顯示當(dāng)天的年月日即14-11-07參考程序如下:#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharcodedis_code[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0xc0}; //共陽(yáng)數(shù)碼管段碼表voiddelay(uintt) //延時(shí)函數(shù){
uchari;
while(t--)for(i=0;i<200;i++);}voidmain(){
uchar
i,j=0x80;58while(1){
for(i=0;i<8;i++) { j=_crol_(j,1); //_crol_(j,1)為將對(duì)象j循環(huán)左移1位
P0=dis_code[i]; //P0口輸出段碼
P2=j; //P2口輸出位控碼
delay(180); //延時(shí),控制每位顯示的時(shí)間
}}}595.1.6
單片機(jī)控制LED點(diǎn)陣顯示器顯示
LED點(diǎn)陣顯示器應(yīng)用非常廣泛,在許多公共場(chǎng)合,如商場(chǎng)、銀行、車(chē)站、機(jī)場(chǎng)、醫(yī)院隨處可見(jiàn)。不僅能顯示文字、圖形,還能播放動(dòng)畫(huà)、圖像、視頻等信號(hào)。LED點(diǎn)陣顯示器分為圖文顯示器和視頻顯示器,有單色顯示,還有彩色顯示。下面僅介紹單片機(jī)如何來(lái)控制單色LED點(diǎn)陣顯示器的顯示。(1)LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理由若干個(gè)發(fā)光二極管按矩陣方式排列而成。陣列點(diǎn)數(shù)可分為5×7、5×8、6×8、8×8點(diǎn)陣;按發(fā)光顏色可分為單色、雙色、三色;按極性排列可分為共陰極和共陽(yáng)極。
1).LED點(diǎn)陣結(jié)構(gòu)以8×8LED點(diǎn)陣顯示器為例,外形見(jiàn)圖5-11,內(nèi)部結(jié)構(gòu)見(jiàn)圖5-12,由64個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管是處于行線(R0~R7)和列線(C0~C7)之間交叉點(diǎn)上。
2).LED點(diǎn)陣顯示原理
顯示一個(gè)字符?字符由一個(gè)個(gè)點(diǎn)亮的LED所構(gòu)成。由圖5-12點(diǎn)亮點(diǎn)陣中一個(gè)發(fā)光二極管條件:對(duì)應(yīng)行為高電平,對(duì)應(yīng)列為低電平。如在很短時(shí)間內(nèi)依次點(diǎn)亮很多個(gè)發(fā)光二極管,LED點(diǎn)陣就可顯示一個(gè)穩(wěn)定字符、數(shù)字或其他圖形??刂芁ED點(diǎn)陣顯示器顯示,實(shí)質(zhì)就是控制加到行線和列線上編碼,控制點(diǎn)亮某些發(fā)光二極管(點(diǎn)),從而顯示出由不同發(fā)光點(diǎn)組成的各種字符。圖5-118×8LED點(diǎn)陣顯示器外形圖5-128×8LED點(diǎn)陣顯示器(共陰極)的結(jié)構(gòu)
下面以顯示字符“中”為例,見(jiàn)圖5-13。圖5-138×8LED點(diǎn)陣顯示器顯示字符“中”#include<reg51.h>voidmain(){unsignedchari;while(1){P2=0xfe;P1=0x10;
for(i=0;i<100;i++);P2=0xff;P2=0xfd;P1=0xfe;
for(i=0;i<100;i++);P2=0xff;P2=0xfb;P1=0x92;
for(i=0;i<100;i++);P2=0xff;P2=0xf7;P1=0x92;
for(i=0;i<100;i++);P2=0xff;
P2=0xef;P1=0xfe;
for(i=0;i<100;i++);P2=0xff;P2=0xdf;P1=0x92;
for(i=0;i<100;i++);P2=0xff;P2=0xbf;P1=0x10;
for(i=0;i<100;i++);P2=0xff;P2=0x7f;P1=0x10;
for(i=0;i<100;i++);P2=0xff;}}1.8051內(nèi)部有()并行口,P0口直接作輸出口時(shí),必須外接();并行口作輸入口時(shí),必須先(),才能讀入外設(shè)的狀態(tài)。2、P0、P1、P2、P3四個(gè)均是()位的()口(填“串行”還是“并行”),其中P0的功能是();P2口的功能是();而()是雙功能口;()是專門(mén)的用戶口。3、MCS-51機(jī)的P0口能驅(qū)動(dòng)()個(gè)TTL負(fù)載,其P1、P2、P3只能驅(qū)動(dòng)
個(gè)TTL負(fù)載,要獲得較大的驅(qū)動(dòng)能力,應(yīng)采用()輸出。4.P1口的每一位能驅(qū)動(dòng)()A.2個(gè)TTL低電平負(fù)載B.4個(gè)TTL低電平負(fù)載
C.8個(gè)TTL低電平負(fù)載D.10個(gè)TTL低電平負(fù)載5.89C51單片機(jī)的()口的引腳,還具有外中斷、串行通信等第二功能。
A、P0B、P1C、P2D、P36、MCS-51單片機(jī)的P0、P1口作輸入用途之前必須()。
A.在相應(yīng)端口先置1B.在相應(yīng)端口先置0C.外接高電平D.外接上拉電阻5.2MCS-51單片機(jī)中斷系統(tǒng)中斷的概念:中斷是計(jì)算機(jī)工作過(guò)程的隨機(jī)事件中斷源:引起中斷的事件或設(shè)備稱為中斷源采用中斷的優(yōu)點(diǎn):良好的中斷系統(tǒng)使處理機(jī)具有隨機(jī)應(yīng)變的能力,從而擴(kuò)大應(yīng)用范圍,提高CPU效率51中斷系統(tǒng)的特點(diǎn):
內(nèi)容豐富,結(jié)構(gòu)合理,邏輯性強(qiáng),高效實(shí)用一、中斷的一般功能1、中斷的屏蔽與開(kāi)放中斷屏蔽:稱為關(guān)中斷,CPU不響應(yīng)中斷請(qǐng)求中斷開(kāi)放:稱為開(kāi)中斷,CPU可響應(yīng)中斷請(qǐng)求2、中斷響應(yīng)與中斷返回圖5-18(a)中斷的響應(yīng)與返回中斷請(qǐng)求RETI主程序響應(yīng)中斷中斷服務(wù)子程序返主程序繼續(xù)執(zhí)行主程序PC斷點(diǎn)3、中斷優(yōu)先中斷開(kāi)放的情況下,如果有幾個(gè)中斷請(qǐng)求同時(shí)發(fā)生,應(yīng)首先響應(yīng)中斷優(yōu)先級(jí)較高的中斷4、中斷嵌套低級(jí)中斷請(qǐng)求RETI主程序響應(yīng)低級(jí)中斷高級(jí)中斷服務(wù)子程序返主程序繼續(xù)執(zhí)行主程序高級(jí)中斷請(qǐng)求響應(yīng)高級(jí)中斷返低級(jí)中斷圖5-18(b)中斷的嵌套示意圖RETI低級(jí)中斷服務(wù)子程序低級(jí)中斷服務(wù)子程序掛起低級(jí)中斷掛起低級(jí)中斷低級(jí)中斷低級(jí)中斷二、MCS-51中斷請(qǐng)求源5個(gè)中斷源2個(gè)優(yōu)先級(jí)2個(gè)外部中斷3個(gè)內(nèi)部中斷INT0(P3.2)INT1(P3.3)T0T1UART與中斷有關(guān)的特殊功能寄存器:IP:中斷優(yōu)先控制寄存器IE:中斷允許控制寄存器TCON:定時(shí)/計(jì)數(shù)控制寄存器SCON:UART控制寄存器中斷請(qǐng)求標(biāo)志寄存器可編程,可控MCS–51中斷要點(diǎn)1、定時(shí)/計(jì)數(shù)器控制寄存器TCONTCON(88H)TF1TF0IE1IT1IE0IT0
INT1INT0觸發(fā)方式控制位0
低電平觸發(fā)1
邊沿↓觸發(fā)
INT1INT0外部中斷請(qǐng)求標(biāo)志1有有效觸發(fā)時(shí)0
當(dāng)CPU響應(yīng)中斷時(shí)T1T0溢出標(biāo)志1
計(jì)數(shù)器“+1”有溢出時(shí),并向CPU請(qǐng)求中斷0
當(dāng)CPU響應(yīng)中斷時(shí),也可由指令清除TR1TR0由硬件自動(dòng)由硬件自動(dòng)中斷請(qǐng)求標(biāo)志可編程控制位TR1TR0由硬件自動(dòng)由硬件自動(dòng)在每個(gè)機(jī)器周期S5P2都采樣引腳P3.3P3.2引腳00記錄有無(wú)中斷記錄有無(wú)中斷2、串行口控制寄存器SCONTI:串行口發(fā)送中斷標(biāo)志在方式0,串行發(fā)送到第8位結(jié)束時(shí),由硬件置“1”;或在其他方式中,串行發(fā)送到停止位的開(kāi)始時(shí),由硬件置“1”,并向CPU發(fā)送中斷請(qǐng)求RI:串行口接收中斷標(biāo)志在方式0,串行接收到第8位結(jié)束時(shí),由硬件置“1”;或在其他方式中,串行接收到停止位的開(kāi)始時(shí),由硬件置“1”,并向CPU發(fā)送中斷請(qǐng)求“1”發(fā)送完一幀數(shù)據(jù)后“1”接收完一幀數(shù)據(jù)后必須由軟件清“0”必須由軟件清“0”SCON(98H)
TIRI三、中斷控制1、中斷允許寄存器IEEA//ESET1EX1ET0EX0INT0INT1T1T0UARTCPU0
禁止1
允許0
禁止1
允許總中斷總中斷中斷中斷IE(A8)ET2T2CPUIE的相應(yīng)位被置“0”
或“1”
該相應(yīng)中斷即被“禁止”或“開(kāi)放”中斷的開(kāi)放和禁止是可控,可編程的2、中斷優(yōu)先級(jí)寄存器IP///PSPT1PX1PT0PX0IP(B8)ET2INT0INT1T1T0UART0
低級(jí)1高級(jí)中斷中斷T23、優(yōu)先級(jí)結(jié)構(gòu)中斷優(yōu)先級(jí)控制遵循的兩個(gè)基本原則:⑴一個(gè)正在執(zhí)行的低級(jí)中斷服務(wù)程序,能被高優(yōu)先級(jí)中斷請(qǐng)求所中斷,但不能被同優(yōu)先級(jí)中斷請(qǐng)求所中斷。⑵一個(gè)正在執(zhí)行的高級(jí)中斷服務(wù)程序,不能被任何中斷請(qǐng)求所中斷,直到返回。中斷優(yōu)先級(jí)是可控,可編程的在同級(jí)的幾個(gè)中斷源中同時(shí)發(fā)生請(qǐng)求時(shí),內(nèi)部對(duì)同級(jí)的各中斷源的優(yōu)先級(jí)別有一個(gè)規(guī)定的查詢順序:外部中斷請(qǐng)求INT0定時(shí)/計(jì)數(shù)器T0定時(shí)/計(jì)數(shù)器T1串行口UART定時(shí)/計(jì)數(shù)器T2外部中斷請(qǐng)求INT1最高最低自然優(yōu)先級(jí)自然優(yōu)先級(jí)由硬件查詢邏輯完成四、中斷響應(yīng)過(guò)程中斷響應(yīng)的三個(gè)條件:⑴CPU不是正在處理同級(jí)或高級(jí)中斷請(qǐng)求⑵現(xiàn)行機(jī)器周期不是所執(zhí)行指令的最后一個(gè)機(jī)器周期⑶正在執(zhí)行的指令不是RETI,或不在訪問(wèn)IE或IP排除法
一個(gè)完整的中斷處理過(guò)程包括中斷請(qǐng)求、中斷響應(yīng)、中斷處理和中斷返回部分。當(dāng)有中斷請(qǐng)求且滿足中斷響應(yīng)條件時(shí),CPU便會(huì)響應(yīng)中斷,其響應(yīng)過(guò)程如下:①將相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器置1,以禁止同級(jí)或低級(jí)的中斷嵌套;②將當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧保存,并將相應(yīng)的中斷服務(wù)程序入口地址送入PC,以實(shí)現(xiàn)程序的轉(zhuǎn)移;③執(zhí)行中斷服務(wù)程序。響應(yīng)過(guò)程的前兩步由硬件自動(dòng)完成的,中斷服務(wù)程序需要用戶編寫(xiě)。5、中斷處理過(guò)程六、中斷的應(yīng)用例1、在AT89c51的單片機(jī)的P1口上面接有8個(gè)LED燈。在外部中斷0輸入引腳接有一個(gè)按鈕開(kāi)關(guān)。要求將外部中斷設(shè)置為電平觸發(fā)。程序啟動(dòng)時(shí),P1口上的8個(gè)LED燈全亮。每按一次按鈕,產(chǎn)生一個(gè)低電平觸發(fā)的外部中斷請(qǐng)求,在中斷服務(wù)程序中,讓低4個(gè)LED燈與高4個(gè)LED燈交替閃爍5次,然后從中斷返回,控制8個(gè)LED燈再次全亮。#include<reg51.h>voiddelay(){ unsignedinti;
for(i=0;i<50000;i++);}voidmain(){ EA=1; EX0=1; IT0=1; while(1) { P1=0; }}voidintt0()interrupt0{ unsignedcharj; EX0=0;
for(j=0;j<5;j++) { P1=0xf0; delay(); P1=0x0f; delay(); } EX0=1;}練習(xí):主程序?yàn)镻1口輸出跑馬燈程序),編寫(xiě)中斷子程序使得發(fā)生外部中斷0,且為下降沿觸發(fā)時(shí),LED燈全亮。中斷結(jié)束后LED繼續(xù)接上次狀態(tài)進(jìn)行跑馬燈閃爍。例:電路結(jié)構(gòu)如下圖所示,欲使與P1.0引腳相連的LED以2秒為周期閃爍,試編程實(shí)現(xiàn)。
功能實(shí)現(xiàn)分析如下:欲使LED燈以2S為周期閃爍,則定時(shí)1S1S的延時(shí)時(shí)間利用定時(shí)器/計(jì)數(shù)器來(lái)實(shí)現(xiàn),設(shè)單片機(jī)的振蕩頻率為6MHz,則其機(jī)器周期為2us,僅僅只利用定時(shí)器T0或T1無(wú)法實(shí)現(xiàn)1秒的定時(shí),要定時(shí)1秒需定時(shí)器T0和T1共同配合使用來(lái)達(dá)到目的。通過(guò)使T0定時(shí)50ms,在P1.3引腳上輸出一個(gè)周期為100ms的方波,計(jì)數(shù)器T1對(duì)該脈沖進(jìn)行計(jì)數(shù),計(jì)滿10個(gè),便達(dá)到定時(shí)1秒的目的。以1秒為周期對(duì)P1.0引腳狀態(tài)求反,便能實(shí)現(xiàn)題目的要求。T0作為定時(shí)器,工作在方式1下,由TR0來(lái)控制啟停;T1作為計(jì)數(shù)器,工作在方式2下,由TR1來(lái)控制啟停;T0的初值:N=216-50000/2=40536=9E58HT1的初值:N=28-10=246=F6;GATEC/TM1M0GATEC/TM1M001100001=61HTH0=9EH;TL0=58H;TL0=F6H匯編語(yǔ)言參考程序:
ORG0000H;LJMPMAIN;ORG000BH;LJMPINTT0;ORG001BH;LJMPINTT1;ORG0010H;MAIN:CLRP1.0;SETBP1.3;MOVTMOD,#61H;MOVTH1,#F6H;MOVTL1,#F6H;MOVTH0,#9E;MOVTL0,#58;SETBTR0;
SETBTR1;SETBPT0;CLRPT1;SETBET0;SETBET1;SETEA;SJMP$;ORG0400H;INTT0:MOVTH0,#9EH;MOVTL0,#58H;CPLP1.3;RETI;ORG0500H;INTT1:CPLP1.0;RETI;C51參考程序如下:#include“reg51.h”SbitP1_0=P1^0;SbitP1_3=P1^3;VoidINT_timer0(void)interrupt1;{TH0=0x9E;TL0=0x58;P1_3=~P1_3;Return;}VoidINT_timer1(void)interrupt3;{P1_0=~P1_0;Return;}Voidmain(){P1_0=0;P1_3=1;TMOD=0x61;TH1=0xF6;TL1=0xF6;TH0=0x9E;TL0=0x58;TR0=1;TR1=1;PT0=1;PT1=0;ET0=1;ET1=1;EA=1;While(1);Return;}例:利用中斷實(shí)現(xiàn)例5.5測(cè)量INT0引腳上的正脈沖寬度的功能。設(shè)待測(cè)脈沖的寬度為N,且有0<N<65536us。參考程序如下:
ORG0000HLJMPMAINORG0003HLJMPINT0ORG0100HMAIN:
MOVTMOD,#09HMOVTH0,#00HMOVTL0,#00HBACK1:JBP3.2,BACK1
SETBTR0SETBIT0SETBEX0SETBEASJMP$ORG0200HINT0:
CLRTR0MOV70H,TL0MOV71H,TH0RETIC51參考程序如下:#include“reg1.h”;VolatileunsignedcharRLT_L_at_0x70,RLT_H_at_0x71;VoidINT_timer0(void)interrupt0{TR0=0;RLT_L=TL0;RLT_H=TH0;Return;}Voidmain(){TMOD=0x90;TH0=0x00;TL0=0x00;While(!INT0)TR0=1;IT0=1;EX0=1;EA=1;While(1);Return;}1、在中斷流程中有“關(guān)中斷”的操作,對(duì)于定時(shí)器中斷T1,要關(guān)中斷應(yīng)復(fù)位中斷允許寄存器的(
)。A.EA位和ET0位B.EA位和ET1位C.EA位和EX0位D.EA位和ES位2、在中斷流程中有“關(guān)中斷”的操作,對(duì)于外部中斷0,要關(guān)中斷應(yīng)復(fù)位中斷允許寄存器的(
)。A.EA位和ET0位B.EA位和ET1位C.EA位和EX0位D.EA位和ES位3、在MCS-51單片機(jī)中,需要軟件進(jìn)行中斷撤銷(xiāo)的是:()A.定時(shí)中斷B.脈沖觸發(fā)的外部中斷C.電平觸發(fā)的外部中斷D.串行口中斷4、MCS—51單片機(jī)外部中斷請(qǐng)求信號(hào)有電平方式和(),在電平方式下,當(dāng)采集到INT0、INT1的有效信號(hào)為()時(shí),激活外部中斷。5、3.MCS—51單片機(jī)外部中斷請(qǐng)求信號(hào)有電平方式和
()
6、8051單片機(jī)有()個(gè)中斷源,()級(jí)中斷優(yōu)先級(jí)別。7、簡(jiǎn)答題
MCS51的中斷系統(tǒng)有幾個(gè)中斷源?幾個(gè)中斷優(yōu)先級(jí)?中斷優(yōu)先級(jí)是如何控制的?在出現(xiàn)同級(jí)中斷申請(qǐng)時(shí),CPU按什么順序響應(yīng)(按由高級(jí)到低級(jí)的順序?qū)懗龈鱾€(gè)中斷源)?各個(gè)中斷源的入口地址是多少?8、編寫(xiě)程序使P1口外接的LED燈以1S進(jìn)行跑馬燈閃爍,發(fā)生外部中斷0,且為下降沿觸發(fā)時(shí),LED等全亮,中斷結(jié)束后LED繼續(xù)進(jìn)行跑馬燈閃爍。#include<REG51.H>sbitP3_2=
;voidmain(){P3_2=
;TMOD=
;P1=
;IP=
;TH0=
;TL0=
;TR0=
;ET0=
;
;EA=
;while(1){}}voidt0int(void)interrupt()
{unsignedintk;k=k+1;TH0=
;TL0=
;if(k>=10000){k=0;
; if(P1==0x00)
;}elseP1=P1;}voidt1int(void)interrupt()
{
;}
9、編程實(shí)現(xiàn)以定時(shí)器/計(jì)數(shù)器T0做為定時(shí)器,使得P1.0每隔一秒鐘取反一次,并用LED燈顯示#include<REG51.H>sbitP1_0=0x90;voidmain(){TMOD=
;TH0=
;TL0=
;TR0=
;ET0=
;EA=
;while(1){}}voidt0int(void)interrupt()
{unsignedintk;bitled;k=k+1;TH0=
;TL0=
;if(k>=10000){k=0;led=~led;P1_0=led;}elseled=led;P1_0=led;}5.3MCS-51定時(shí)/計(jì)數(shù)器及其應(yīng)用51系列內(nèi)部有2個(gè)16位的定時(shí)/計(jì)數(shù)器T0、T152系列內(nèi)部有3個(gè)16位的定時(shí)/計(jì)數(shù)器T0、T1、T2功能:定時(shí)計(jì)數(shù)串行口的波特率發(fā)生器定時(shí)/計(jì)數(shù)器的可編程特性:⑴確定其工作方式是定時(shí)還是計(jì)數(shù)⑵預(yù)置定時(shí)或計(jì)數(shù)初值⑶當(dāng)定時(shí)時(shí)間到或計(jì)數(shù)終止時(shí),要不要發(fā)中斷請(qǐng)求⑷如何啟動(dòng)定時(shí)或計(jì)數(shù)器工作可編程5.2.1、定時(shí)計(jì)數(shù)器的結(jié)構(gòu)與工作原理1、結(jié)構(gòu)圖5-1定時(shí)/計(jì)數(shù)器邏輯結(jié)構(gòu)CPUTH1(8位)TL1(8位)T1
T1(P3.5)(8DH)(8BH)7070TH0(8位)TL0(8位)T0
T0(P3.4)(8CH)(8AH)7070TCON(88H)TMOD(89H)啟動(dòng)啟動(dòng)溢出溢出工作方式工作方式“+1`”“+1`”結(jié)構(gòu)2個(gè)16位T/C分別由8位計(jì)數(shù)器TH0、TL0、
TH1、TL1組成“+1”計(jì)數(shù)器控制寄存器TCON:控制T/C的啟停、中斷等方式寄存器TMOD:控制T/C的工作方式⑴定時(shí)器定時(shí)輸入信號(hào):機(jī)器內(nèi)部震蕩信號(hào)的1/12分頻,即每一個(gè)機(jī)器周期做一次“+1”運(yùn)算T0T12、工作原理:∵1個(gè)機(jī)器周期=12/震蕩頻率若單片機(jī)的晶振主頻為12MHz,則計(jì)數(shù)周期為1μs⑵計(jì)數(shù)器由外部引腳(T0為P3.4,T1為P3.5)輸入計(jì)數(shù)脈沖外部輸入脈沖寬度應(yīng)大于2個(gè)機(jī)器周期外部輸入脈沖發(fā)生負(fù)跳變時(shí),進(jìn)行“+1”計(jì)數(shù)>TCY>TCY下降沿高電平低電平TCY:為機(jī)器周期定時(shí)/計(jì)數(shù)器的使用步驟:(1)設(shè)置工作方式,TMOD寄存器(2)設(shè)置定時(shí)/計(jì)數(shù)初值THi和TLi寄存器(i=0/1)(3)打開(kāi)相應(yīng)的中斷IE寄存器(4)啟動(dòng)定時(shí)/計(jì)數(shù)器TCON寄存器(5)編寫(xiě)T1和T0溢出中斷服務(wù)程序5.2.2、定時(shí)計(jì)數(shù)器的工作方式及編程1、方式寄存器TMOD:設(shè)定工作方式GATEC/TM1M0GATEC/TM1M0LSBMSB
(89H)TMOD控制T1控制T0門(mén)控位功能選擇位工作方式選擇GATEC/TM1M0GATEC/TM1M0INT1INT0引腳輸入電平的控制1)、GATE:門(mén)控位。設(shè)定T1、T0運(yùn)行時(shí),是否受
0:不受外部中斷控制,要啟動(dòng)定時(shí)器/計(jì)數(shù)器TRi=12)C/T1:受外部中斷控制,要啟動(dòng)定時(shí)器/計(jì)數(shù)器必須TRi和INTi同時(shí)為1
0為定時(shí)功能
1為計(jì)數(shù)功能C/T=
00:方式0,13位計(jì)數(shù)器
01:方式1,16位計(jì)數(shù)器
10:方式2,可自動(dòng)重新裝載初值的8位計(jì)數(shù)器
11:方式3,T0分為2個(gè)8位計(jì)數(shù)器,T1停止計(jì)數(shù)3)M1、M0工作方式控制端⑴方式0M1M0=0013位的定時(shí)計(jì)數(shù)器,由TH的8位和TL的低5位組成定時(shí)/計(jì)數(shù)器方式0邏輯圖以T1為例:T1(P3.5)GATETR1INT1震蕩器÷12TL15位TH18位TF1中斷KC/T=0C/T=1控制111“+1”中斷13位計(jì)數(shù)器TF1“+1”“+1”⑵方式1M1M0=0116位的定時(shí)計(jì)數(shù)器,由TH的8位和TL的8位組成定時(shí)/計(jì)數(shù)器方式1邏輯圖以T1為例:T1(P3.5)GATETR1INT1震蕩器÷12TL18位TH18位TF1中斷KC/T=0C/T=1控制16位計(jì)數(shù)器“+1”1中斷TF1“+1”“+1”⑶方式2M1M0=10可自動(dòng)重裝載的8位計(jì)數(shù)器TH1(TH0)被定義為賦值寄存器TL1(TL0)被定義為計(jì)數(shù)器定時(shí)/計(jì)數(shù)器方式2邏輯圖以T1為例:T1(P3.5)GATETR1INT1震蕩器÷12TL18位TF1中斷KC/T=0C/T=1控制TH18位重裝載重裝載1“+1”中斷TL18位TF1“+1”“+1”⑷方式3M1M0=11T0被分成2個(gè)相互獨(dú)立的8位計(jì)數(shù)器TL0、TH0TL0使用自己本身的一些控制位C/T、GATE、TR0TF0、INT0等。TH0只能做定時(shí)器,并使用T1的控制位TR1、TF1,同時(shí)占用T1的中斷源定時(shí)/計(jì)數(shù)器方式3邏輯圖TH0借用了T1的TR1和TF1,因此控制了T1的中斷此時(shí)T1只能用在一些不要中斷的情況下震蕩器÷121/12f0scTL08位TF0中斷KC/T=0C/T=1控制1/12f0scT0(P3.4)GATETR0INT0KTH08位TF1中斷控制1/12f0scTR11“+1”“+1”1“+1”“+1”TF0TF1
中斷
中斷“+1”2、定時(shí)/計(jì)數(shù)器的初值設(shè)定:設(shè)定定時(shí)時(shí)間和計(jì)數(shù)值最大計(jì)數(shù)值M:不同的工作方式M值不同方式0:M=213=8192方式1:M=216=65536方式2、3:M=28=256(1)定時(shí)方式初值X的計(jì)算方法:(2n-X)×T=定時(shí)值∴X=2n
-定時(shí)值/T其中T為機(jī)器周期,時(shí)鐘的12分頻,若晶振為6MHz,則T=2μs,若晶振為12MHz,則T=1μs(2)計(jì)數(shù)方式初值X的計(jì)算方法:N=2n-X(X即為要求計(jì)數(shù)的次數(shù))例5-1
若單片機(jī)晶振為12MHz,要求產(chǎn)生500μs定時(shí),試計(jì)算X的初值。解:由于T=1μs,產(chǎn)生500μs定時(shí),需要“+1”500次,定時(shí)器方能產(chǎn)生溢出。采用方式0:(
13位計(jì)數(shù)器)X=213-(500×10-6/10-6
)
=8192-500=7692=1E0CH=F00CH采用方式1:(16位計(jì)數(shù)器)X=216-(500×10-6/10-6)=65036=FE0CH?1111000000001100THiTLiF00CH=?暫時(shí)寫(xiě)成3、打開(kāi)相應(yīng)的中斷:中斷允許寄存器IEEA//ESET1EX1ET0EX0INT0INT1T1T0UARTCPU0
禁止1
允許0
禁止1
允許總中斷總中斷中斷中斷IE(A8)ET2T2CPUIE的相應(yīng)位被置“0”
或“1”
該相應(yīng)中斷即被“禁止”或“開(kāi)放”中斷的開(kāi)放和禁止是可控,可編程的4、開(kāi)啟定時(shí)/計(jì)數(shù)器:控制寄存器TCONLSBMSB(88H)TCONTF1TR1TF0TR0IE1IT1IE0IT0T1、T0啟/停控制位T1、T0溢出標(biāo)志位與外部中斷INT1、INT0有關(guān)將在中斷系統(tǒng)介紹“0”停止“1”啟動(dòng)“1”有溢出“0”無(wú)溢出可編程可控制“+1”亦可由指令清“0”工作“1”“0”記錄有無(wú)溢出5、相應(yīng)中斷服務(wù)程序的編寫(xiě)Void函數(shù)名()interrupt1/3{局部變量定義;執(zhí)行語(yǔ)句}定時(shí)器/計(jì)數(shù)器上節(jié)知識(shí)回顧:
51系列單片機(jī)片內(nèi)有2個(gè)16位定時(shí)/計(jì)數(shù)器:定時(shí)器0(T0)和定時(shí)器1(T1)。兩個(gè)定時(shí)器都有定時(shí)或事件計(jì)數(shù)的功能,可用于定時(shí)控制、延時(shí)、對(duì)外部事件計(jì)數(shù)和檢測(cè)等場(chǎng)合每個(gè)定時(shí)器都可由軟件設(shè)置為定時(shí)工作方式或計(jì)數(shù)工作方式。
1).定時(shí)工作方式設(shè)置為定時(shí)工作方式時(shí),定時(shí)器計(jì)數(shù)的脈沖是由51單片機(jī)片內(nèi)振蕩器經(jīng)12分頻后產(chǎn)生的。
2).計(jì)數(shù)工作方式設(shè)置為計(jì)數(shù)工作方式時(shí),通過(guò)引腳T0(P3.4)和T1(P3.5)對(duì)外部脈沖信號(hào)計(jì)數(shù)。定時(shí)/計(jì)數(shù)器的使用步驟:(1)設(shè)置工作方式,TMOD寄存器(2)設(shè)置定時(shí)/計(jì)數(shù)初值THi和TLi寄存器(i=0/1)(3)打開(kāi)相應(yīng)的中斷IE寄存器(4)啟動(dòng)定時(shí)/計(jì)數(shù)器TCON寄存器(5)編寫(xiě)T1和T0溢出中斷服務(wù)程序(1)設(shè)置工作方式TMOD:
GATE:門(mén)控信號(hào)
GATE=0,TRi=1時(shí)即可啟動(dòng)定時(shí)器工作;
GATE=1,INTi=1才可啟動(dòng)定時(shí)器工作。
C/T:定時(shí)器/計(jì)數(shù)器選擇位
C/T=1,為計(jì)數(shù)器方式;
C/T=0,為定時(shí)器方式。
M1M0:工作模式選擇位
M1M0=00工作方式0(13位方式)。
M1M0=01工作方式1(16位方式)。
M1M0=10工作方式2(8位自動(dòng)再裝入方式)。
M1M0=11工作方式3(T0為2個(gè)8位方式)。(2)設(shè)置定時(shí)/計(jì)數(shù)初值計(jì)數(shù)方式初值X的計(jì)算方法:N=2n-X(X即為要求計(jì)數(shù)的次數(shù))定時(shí)方式初值X的計(jì)算方法:X=2n
-定時(shí)值/T(3)、打開(kāi)相應(yīng)的中斷:中斷允許寄存器IEEA//ESET1EX1ET0EX0INT0INT1T1T0UARTCPU0
禁止1
允許0
禁止1
允許總中斷中斷中斷IE(A8)ET2T2CPUIE的相應(yīng)位被置“0”
或“1”
該相應(yīng)中斷即被“禁止”或“開(kāi)放”中斷的開(kāi)放和禁止是可控,可編程的(4)、開(kāi)啟定時(shí)/計(jì)數(shù)器:控制寄存器TCONLSBMSB(88H)TCONTF1TR1TF0TR0IE1IT1IE0IT0T1、T0啟/??刂莆籘1、T0溢出標(biāo)志位與外部中斷INT1、INT0有關(guān)將在中斷系統(tǒng)介紹“0”停止“1”啟動(dòng)“1”有溢出“0”無(wú)溢出可編程可控制“+1”亦可由指令清“0”工作“1”“0”記錄有無(wú)溢出(5)、相應(yīng)中斷服務(wù)程序的編寫(xiě)Void函數(shù)名()interrupt1/3{局部變量定義;執(zhí)行語(yǔ)句}1、定時(shí)/計(jì)數(shù)器T1在GATE=0是運(yùn)行的條件是:()A.P3.2=1B.設(shè)置好定時(shí)初值C.TR1=1D.T1開(kāi)啟2、定時(shí)/計(jì)數(shù)器T0在GATE=1是運(yùn)行的條件是:()A.P3.2=1和TR0=1B.設(shè)置好定時(shí)初值C.TR0=1D.T0開(kāi)啟3、要測(cè)試INT0引腳上的一個(gè)正脈沖寬度,那么特殊功能寄存器TMOD的內(nèi)容應(yīng)為()。A.87HB.09HC.00HD.80H4、定時(shí)器若工作在循環(huán)定時(shí)或循環(huán)計(jì)數(shù)場(chǎng)合,應(yīng)選用()。A.工作方式0B.工作方式1C.工作方式2D.工作方式35、定時(shí)和計(jì)數(shù)都是對(duì)()進(jìn)行計(jì)數(shù),定時(shí)與計(jì)數(shù)的區(qū)別()定時(shí)器/計(jì)數(shù)器練習(xí):6、設(shè)定T1為計(jì)數(shù)器方式,工作方
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科研機(jī)構(gòu)電氣設(shè)備安裝協(xié)議
- 萬(wàn)能工品牌推廣合同
- 【初中道法】增強(qiáng)安全意識(shí) 課件-2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 《個(gè)人獨(dú)資企業(yè)法》課件
- 《業(yè)務(wù)流程重組》課件
- 做一個(gè)文明的人國(guó)旗下講話稿范文(9篇)
- 2024年式委托車(chē)輛整修合同
- 2024年手機(jī)云存儲(chǔ)服務(wù)協(xié)議
- 《品牌網(wǎng)絡(luò)營(yíng)銷(xiāo)規(guī)劃》課件
- 高三學(xué)年主任工作計(jì)劃5篇
- 光伏逆變器的交流并網(wǎng)調(diào)試方法
- 中國(guó)傳統(tǒng)的主流思想
- 易制毒從業(yè)人員培訓(xùn)課件
- 倉(cāng)庫(kù)降本增效方案培訓(xùn)課件
- 氫能與燃料電池-課件-第五章-制氫技術(shù)
- 用色彩表達(dá)情感課件
- (完整)中小學(xué)教師職稱評(píng)定答辯題
- 中國(guó)電影發(fā)展史簡(jiǎn)介
- 2023北京海淀區(qū)高二上學(xué)期期末語(yǔ)文試題及答案
- 糧油售后服務(wù)承諾書(shū)
評(píng)論
0/150
提交評(píng)論