版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章MCS-51系列單片機(jī)的片內(nèi)接口及中斷5.1并行I/O接口及其應(yīng)用5.2定時器/計數(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ò)芯片時,P0口不再做I/O口使用,而是作為地址/數(shù)據(jù)總線。地址/數(shù)據(jù)控制線等于0做數(shù)據(jù)線、1做地址線2、沒有外擴(kuò)芯片時,P0口可以直接作為IO口使用&讀引腳寫控制信號DB0.0讀鎖存控制線C+5VP0.0轉(zhuǎn)換開關(guān)CPDQQ’鎖存器01地址/數(shù)據(jù)P0輸出0:P0口直接做輸出口時,輸出信息的過程(將0送到P0.0的過程)注意:P0口做輸出口時,內(nèi)部數(shù)據(jù)經(jīng)過鎖存器送到P00---P07上。由于上管始終截止,而當(dāng)下管也截止時,P00—P07被架空,沒有標(biāo)準(zhǔn)的高電平,所以P0口作輸出口使用時,必須外接上拉電阻。讀引腳&寫控制信號DB0.0讀鎖存控制線C+5VP0.0轉(zhuǎn)換開關(guān)CPDQQ’鎖存器0010001地址/數(shù)據(jù)P0輸入1:讀引腳注意:1、P0口作輸入口時,P00—P07上的信號經(jīng)過緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。2、CPU對P0口的讀操作有2種:讀引腳和讀—改—寫鎖存器。&寫控制信號DB0.0讀鎖存控制C+5VP0.0轉(zhuǎn)換開關(guān)CPDQQ’鎖存器10001地址/數(shù)據(jù)P0總結(jié)1、P0口具有地址/數(shù)據(jù)總線和雙向IO口兩種功能2、P0作為IO口使用時,必須外置上拉電阻3、P0口作輸入口時,P00—P07上的信號經(jīng)過緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。4、CPU對P0口的讀操作有2種:讀引腳和讀—改—寫鎖存器。5、P0作為IO口時,最多能驅(qū)動或者吸收8個TTL負(fù)載讀引腳寫控制信號DB0.0讀鎖存+5VP1.0CPDQQ’鎖存器2、P1結(jié)構(gòu):作用:P1口只能可以直接作為輸入口或輸出口使用。P1輸出1:讀引腳寫控制信號DB0.0讀鎖存+5VP1.0CPDQQ’鎖存器1001注意:P1口做輸出口時,內(nèi)部數(shù)據(jù)經(jīng)過鎖存器送到P10---P17上。由于內(nèi)部有上拉電阻,所以P1口作輸出口使用時,不用外接上拉電阻。P1輸入0:讀引腳寫控制信號DB0.0讀鎖存+5VP1.0CPDQQ’鎖存器00注意:1、P1口作輸入口時,P10—P17上的信號經(jīng)過緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。2、CPU對P1口的讀操作有2種:讀引腳和讀—改—寫鎖存器。P1總結(jié)1、P1口只有IO功能2、P1口作輸入口時,P10—P17上的信號經(jīng)過緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。3、CPU對P1口的讀操作有2種:讀引腳和讀—改—寫鎖存器。4、P1作為IO口時,最多能驅(qū)動或者吸收4個TTL負(fù)載3、P2結(jié)構(gòu):作用:1、外擴(kuò)芯片時,P2口不再做I/O口使用,而是傳送高8位地址。2、沒有外擴(kuò)芯片時,P2口可以直接作為IO口使用。讀引腳寫控制信號DB0.0讀鎖存控制C+5VP2.0轉(zhuǎn)換開關(guān)CPDQQ’鎖存器01地址/數(shù)據(jù)P2輸出0:讀引腳注意:P2口做輸出口時,內(nèi)部數(shù)據(jù)經(jīng)過鎖存器送到P20---P27上。由于內(nèi)部有上拉電阻,所以P2口作輸出口使用時,不用外接上拉電阻。寫控制信號DB0.0讀鎖存控制C+5VP2.0轉(zhuǎn)換開關(guān)CPDQQ’鎖存器00010地址/數(shù)據(jù)01P2輸入0:注意:1、P2口作輸入口時,P20—P27上的信號經(jīng)過緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。2、CPU對P2口的讀操作有2種:讀引腳和讀—改—寫鎖存器。讀引腳寫控制信號DB0.0讀鎖存控制C+5VP2.0轉(zhuǎn)換開關(guān)CPDQQ’鎖存器00001地址/數(shù)據(jù)P2總結(jié)1、P2口具有IO口和高8位地址總線兩種功能2、P2口作輸入口時,P20—P27上的信號經(jīng)過緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。3、CPU對P2口的讀操作有2種:讀引腳和讀—改—寫鎖存器。4、P2作為IO口時,最多能驅(qū)動或者吸收4個TTL負(fù)載4、P3結(jié)構(gòu):讀引腳寫控制信號DB0.0讀鎖存+5VP3.0CPDQQ’鎖存器&第二功能輸出第二功能輸入作用:1、P3口可以直接作為IO口使用。2、P3口的引腳又具有第二功能。P3輸出1:注意:P3口做輸出口時,內(nèi)部數(shù)據(jù)經(jīng)過鎖存器送到P30---P37上。由于內(nèi)部有上拉電阻,所以P2口作輸出口使用時,不用外接上拉電阻。讀引腳寫控制信號DB0.0讀鎖存+5VP3.0CPDQQ’鎖存器&第二功能輸出第二功能輸入10101P3輸入0:注意:1、P3口作輸入口時,P30—P37上的信號經(jīng)過緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。2、CPU對P3口的讀操作有2種:讀引腳和讀—改—寫鎖存器。讀引腳寫控制信號DB0.0讀鎖存+5VP3.0CPDQQ’鎖存器&第二功能輸出第二功能輸入00P3總結(jié)1、P3口具有IO口和第二功能兩種功能2、P3口作輸入口時,P30—P37上的信號經(jīng)過緩沖器送到內(nèi)部數(shù)據(jù)總線上。在讀引腳之前,要先將鎖存器置1,否則總是讀到0。3、CPU對P3口的讀操作有2種:讀引腳和讀—改—寫鎖存器。4、P3作為IO口時,最多能驅(qū)動或者吸收4個TTL負(fù)載I/O總結(jié)功能輸入口輸出口驅(qū)動能力P0數(shù)據(jù)線、地址線低8位在讀引腳之前,要先將鎖存器置1直接輸出(外接上拉電阻)8個TTL負(fù)載P1數(shù)據(jù)線在讀引腳之前,要先將鎖存器置1直接輸出4個TTL負(fù)載P2數(shù)據(jù)線、地址線高8位在讀引腳之前,要先將鎖存器置1直接輸出4個TTL負(fù)載P3數(shù)據(jù)線、第二功能在讀引腳之前,要先將鎖存器置1直接輸出4個TTL負(fù)載5.1.2并行I/O接口的應(yīng)用例1:電路結(jié)構(gòu)如下圖所示,欲利用發(fā)光二極管LED顯示開關(guān)K的狀態(tài),即開關(guān)閉合時LED亮,開關(guān)K斷開時LED熄滅,試編程實現(xiàn)。
參考程序如下:
CLRP1.0 ;給LED一個初態(tài),熄滅BACK:
SETBP1.7 ;對輸入位P1.7寫“1”
JBP1.7,BACK1;K斷開,轉(zhuǎn)BACK1
SETBP1.0 ;K閉合,LED亮
SJMPBACKBACK1:
CLRP1.0 ;K斷開,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閉合時與之對應(yīng)的LEDi亮,Ki斷開時LEDi熄滅。試編程實現(xiàn)。參考程序如下:
ORG0000HLJMPMAIN;跳轉(zhuǎn)到主程序
ORG0100HMAIN:
MOVP1,#00H ;8位LED全滅
MOVP0,#0FFH ;P0置1,準(zhǔn)備進(jìn)行輸入操作BACK:
MOVA,P0;讀P0口開關(guān)狀態(tài),并送入累加器ACPLA ;對累加器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ā)光二極管常用來指示系統(tǒng)工作狀態(tài),制作節(jié)日彩燈、廣告牌匾等。大部分發(fā)光二極管工作電流1~5mA之間,其內(nèi)阻為20~100Ω。電流越大,亮度也越高。為保證發(fā)光二極管正常工作,同時減少功耗,限流電阻選擇十分重要,若供電電壓為+5V,則限流電阻可選1~3kΩ。25(1)
單片機(jī)與發(fā)光二極管的連接
P0口作通用I/O用,由于漏極開路,需外接上拉電阻。而P1~P3口內(nèi)部有30kΩ左右上拉電阻。下面討論P(yáng)1~P3口如何與LED發(fā)光二極管驅(qū)動連接問題。單片機(jī)并行端口P1~P3直接驅(qū)動發(fā)光二極管,電路見圖5-1。與P1、P2、P3口相比,P0口每位可驅(qū)動8個LSTTL輸入,而P1~P3口每一位驅(qū)動能力,只有P0口一半。27發(fā)光二極管與單片機(jī)并行口的連接
當(dāng)P0口某位為高電平時,可提供400A的拉電流;當(dāng)P0口某位為低電平(0.45V)時,可提供3.2mA的灌電流,而P1~P3口內(nèi)有30kΩ左右上拉電阻,如高電平輸出,則從P1、P2和P3口輸出的拉電流Id僅幾百μA,驅(qū)動能力較弱,亮度較差,見圖5-1(a)。如端口引腳為低電平,能使灌電流Id從單片機(jī)外部流入內(nèi)部,則將大大增加流過的灌電流值,見圖5-1(b)。AT89S51任一端口要想獲得較大的驅(qū)動能力,要用低電平輸出。如一定要高電平驅(qū)動,可在單片機(jī)與發(fā)光二極管間加驅(qū)動電路,如74LS04、74LS244等。(2)I/O端口的C51編程控制
P0~P3口是單片機(jī)與外設(shè)進(jìn)行信息交換的橋梁,可通過讀取I/O口狀態(tài)了解外設(shè)狀態(tài),也可向I/O端口送出命令或數(shù)據(jù)控制外設(shè)。對I/O端口編程控制時,要對I/O端口特殊功能寄存器聲明,在C51的編譯器中,這項聲明包含在頭文件reg51.h中,編程時,可通過預(yù)處理命令#include<reg51.h>,把這個頭文件包含進(jìn)去。下面通過案例介紹如何編程對發(fā)光二極管輸出控制。29
【例5-1】
制作流水燈,原理電路見圖5-2,8個發(fā)光二極管LED0~LED7經(jīng)限流電阻分別接至P1口的P1.0~P1.7引腳上,陽極共同接高電平。編寫程序來控制發(fā)光二極管由上至下的反復(fù)循環(huán)流水點亮,每次點亮一個發(fā)光二極管。30圖5-2 {
for(t=0;t<120;t++); }}voidmain()
//主程序{ P1=0xfe; //向P1口送出點亮數(shù)據(jù)
while(1) { delay(500);
P1=_crol_(P1,1);
}}31參考程序:#include<reg51.h>#include<intrins.h> #defineucharunsignedchar #defineuintunsignedint
voiddelay(uinti)//延時函數(shù){
uchart; while(i--)
作業(yè)及練習(xí)題:
電路見圖5-2,制作由上至下再由下至上反復(fù)循環(huán)點亮顯示的流水燈,3種方法實現(xiàn)。(1)數(shù)組的字節(jié)操作實現(xiàn)(2)移位運(yùn)算符實現(xiàn)使用移位運(yùn)算符“>>”、“<<”,把送P1口顯示控制數(shù)據(jù)進(jìn)行移位,從而實現(xiàn)發(fā)光二極管依次點亮。(3)用循環(huán)左、右移位函數(shù)實現(xiàn)使用C51提供的庫函數(shù),即循環(huán)左移n位函數(shù)和循環(huán)右移n位函數(shù),控制發(fā)光二極管點亮。5.1.4
開關(guān)狀態(tài)檢測讀入I/O端口電平,即可檢測開關(guān)處于閉合狀態(tài)還是打開狀態(tài)。(1)
開關(guān)檢測案例1用I/O端口來進(jìn)行開關(guān)狀態(tài)檢測,開關(guān)一端接到I/O端口引腳上,并通過上拉電阻接+5V上,開關(guān)另一端接地,當(dāng)開關(guān)打開時,I/O引腳為高電平,當(dāng)開關(guān)閉合時,I/O引腳為低電平?!纠?-3】
如圖5-3,單片機(jī)的P1.4~P1.7接4個開關(guān)S0~S3,P1.0~P1.3接4個發(fā)光二極管LED0~LED3。編程將P1.4~P1.7上的4個開關(guān)狀態(tài)反映在P1.0~P1.3引腳控制的4個發(fā)光二極管上,開關(guān)閉合,對應(yīng)發(fā)光二極管點亮。例如P1.4引腳上開關(guān)S0狀態(tài),由P1.0腳上LED0顯示,P1.6引腳上開關(guān)S2狀態(tài),由P1.2腳的LED2顯示。3334圖5-3開關(guān)、LED發(fā)光二極管與P1口的連接參考程序如下:#include<reg51.h>#defineucharunsignedcharvoiddelay() //延時函數(shù){
uchar
i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);}voidmain() //主函數(shù){while(1){ unsignedchartemp; //定義臨時變量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引腳接有兩只開關(guān)S0和S1,兩引腳上的高低電平共4種組合,4種組合分別點亮P2.0~P2.3引腳控制的4只LED,即S0、S1均閉合,LED0亮,其余滅;S1閉合、S0打開,LED1亮,其余滅;S0閉合、S1打開,LED2亮,其余滅;S0、S1均打開,LED3亮,其余滅。編程實現(xiàn)此功能。37圖5-4開關(guān)檢測指示器2接口電路與仿真5.1.5
矩陣式鍵盤接口設(shè)計案例矩陣式(也稱行列式)鍵盤用于按鍵數(shù)目較多的場合,由行線和列線組成,按鍵位于行、列交叉點上。見圖5-5,一個44的行、列結(jié)構(gòu)可以構(gòu)成一個16個按鍵的鍵盤,只需要一個8位的并行I/O口即可。如果采用88的行、列結(jié)構(gòu),可以構(gòu)成一個64按鍵的鍵盤,只需要兩個并行I/O口即可。很明顯,在按鍵數(shù)目較多場合,矩陣式鍵盤要比獨立式鍵盤節(jié)省較多I/O口線。39圖5-5
矩陣式(行列式)鍵盤的接口電路掃描法基本原理:先把某一列置低電平,其余各列為高電平,檢查各行線電平的變化,如果某行線電平為低,可確定此行列交叉點處的按鍵被按下。掃描法步驟:△判別有無鍵按下?!魅ザ秳樱ㄑ訒r)。△判別有無鍵按下?!鞲鶕?jù)鍵的行、列信息得到鍵值。△判斷閉合鍵是否釋放,如沒釋放則繼續(xù)等待;如果釋放,返回鍵值。△根據(jù)鍵值轉(zhuǎn)去執(zhí)行該鍵的處理程序。uchar
keyscan()//鍵盤掃描程序,返回uchar型參數(shù){unsignedchari;for(i=0;i<4;i++){P1=_crol_(0xfe,i);temp=P1;temp=temp&0xf0;
while(temp!=0xf0){delay(5);//延時消抖
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ù)下圖所示的電路,編寫程序使數(shù)碼管顯示按鍵的編號。5.1.5
單片機(jī)控制LED數(shù)碼管的顯示(1)LED數(shù)碼管顯示原理LED數(shù)碼管:“8”字型,7段(不包括小數(shù)點)或8段(包括小數(shù)點),每段對應(yīng)一個發(fā)光二極管,共陽極和共陰極兩種,見圖5-5。共陽極數(shù)碼管的陽極連接在一起,接+5V;共陰極數(shù)碼管陰極連在一起接地。對于共陰極數(shù)碼管,當(dāng)某發(fā)光二極管陽極為高電平時,發(fā)光二極管點亮,相應(yīng)段被顯示。同樣,共陽極數(shù)碼管陽極連在一起,公共陽極接+5V,當(dāng)某個發(fā)光二極管陰極接低電平時,該發(fā)光二極管被點亮,相應(yīng)段被顯示。44圖5-58段LED數(shù)碼管結(jié)構(gòu)及外形
為使LED數(shù)碼管顯示不同字符,要把某些段點亮,就要為數(shù)碼管各段提供一個字節(jié)的二進(jìn)制碼,即字型碼(也稱段碼)。習(xí)慣上以“a”段對應(yīng)字型碼字節(jié)的最低位。各字符段碼見表5-1。45
【例5-5】利用單片機(jī)控制一個8段LED數(shù)碼管先循環(huán)顯示單個偶數(shù):0、2、4、6、8,再顯示單個奇數(shù):1、3、5、7、9,如此反復(fù)循環(huán)顯示。本例原理電路及仿真結(jié)果,見圖5-6。參考程序如下:圖5-6控制數(shù)碼管循環(huán)顯示單個數(shù)字的電路及仿真#include"reg51.h"#include"intrins.h"#defineucharunsignedchar#defineuintunsignedint#defineoutP0ucharcodeseg[]={0xc0,0xa4,0x99,0x82,0x80,0xf9,0xb0,0x92,0xf8,0x90,0x01};//共陽極段//碼表voiddelayms(uint); voidmain(void){ uchari;while(1) { out=seg[i]; delayms(900); i++;
if(seg[i]==0x01)i=0;//如段碼為0x01,表明一個循環(huán)顯示已結(jié)束
}47}voiddelayms(uintj) //延時函數(shù) {uchari;for(;j>0;j--) { i=250; while(--i); i=249; while(--i); }}
說明:語句“if(seg[i]==0x01)i=0;”含義:如果欲送出的數(shù)組元素為0x01(數(shù)字“9”段碼0x90的下一個元素,即結(jié)束碼),表明一個循環(huán)顯示已結(jié)束,則重新開始循環(huán)顯示,48(2)LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示
兩種顯示方式:靜態(tài)顯示和動態(tài)顯示。
1).靜態(tài)顯示方式無論多少位LED數(shù)碼管,都同時處于顯示狀態(tài)。多位LED數(shù)碼管工作于靜態(tài)顯示方式時,各位共陰極(或共陽極)連接在一起并接地(或接+5V);每位數(shù)碼管段碼線(a~dp)分別與一個8位I/O口鎖存器輸出相連。如果送往各個LED數(shù)碼管所顯示字符的段碼一經(jīng)確定,則相應(yīng)I/O口鎖存器鎖存的段碼輸出將維持不變,直到送入下一個顯示字符段碼。靜態(tài)顯示方式顯示無閃爍,亮度較高,軟件控制較易。
圖5-7為4位LED數(shù)碼管靜態(tài)顯示電路,各數(shù)碼管可獨立顯示,只要向控制各位I/O口鎖存器送相應(yīng)顯示段碼,該位就能保持相應(yīng)的顯示字符。這樣在同一時間,每一位顯示的字符可各不相同。靜態(tài)顯示方式占用I/O口端口線較多。圖5-7電路,要占用4個8位I/O口(或鎖存器)。如數(shù)碼管數(shù)目增多,則需增加I/O口數(shù)目。50圖5-74位LED靜態(tài)顯示的示意圖【例5-6】單片機(jī)控制2只數(shù)碼管,靜態(tài)顯示2個數(shù)字“27”。原理電路見圖5-8。單片機(jī)用P0口與P1口,分別控制加到兩個數(shù)碼管DS0與DS1的段碼,而共陽極數(shù)碼管DS0與DS1的公共端(公共陽極端)直接接至+5V,因此數(shù)碼管DS0與DS1始終處于導(dǎo)通狀態(tài)。利用P0口與P1口帶有的鎖存功能,只需向單片機(jī)P0口與P1口分別寫入相應(yīng)的顯示字符“2”和“7”的段碼即可。由于一個數(shù)碼管就占用一個I/O端口。如果數(shù)碼管數(shù)目增多,則需增加I/O口,但軟件編程要簡單的多。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) //無限循環(huán)
;}
5354圖5-94位LED數(shù)碼管動態(tài)顯示示意圖2).動態(tài)顯示方式
顯示位數(shù)較多時,靜態(tài)顯示所占的I/O口多,這時常采用動態(tài)顯示。為節(jié)省I/O口,通常將所有顯示器段碼線相應(yīng)段并聯(lián)在一起,由一個8位I/O口控制,各顯示位公共端分別由另一單獨I/O口線控制。圖5-9:4位8段LED動態(tài)顯示器電路示意圖。其中單片機(jī)發(fā)出的段碼占用1個8位I/O(1)端口,而位選控制使用I/O(2)端口中4位口線。動態(tài)顯示就是單片機(jī)向段碼線輸出欲顯示字符的段碼。每一時刻,只有1位位選線有效,即選中某一位顯示,其他各位位選線都無效。每隔一定時間逐位輪流點亮各數(shù)碼管(掃描方式),由于數(shù)碼管余輝和人眼的“視覺暫留”作用,只要控制好每位數(shù)碼管顯示時間和間隔,則可造成“多位同時亮”的假象,達(dá)到同時顯示效果。各位數(shù)碼管輪流點亮的時間間隔(掃描間隔)應(yīng)根據(jù)實際情況定。發(fā)光二極管從導(dǎo)通到發(fā)光有一定的延時,如果點亮?xí)r間太短,發(fā)光太弱,人眼無法看清;時間太長,產(chǎn)生閃爍現(xiàn)象,且此時間越長,占用單片機(jī)時間也越多。55【例5-7】8只數(shù)碼管,分別滾動顯示單個數(shù)字1~8。程序運(yùn)行后,單片機(jī)控制左邊第1個數(shù)碼管顯示1,其他不顯示,延時之后,控制左邊第2個數(shù)碼管顯示1,其他不顯示,直至第8個數(shù)碼管顯示8,其他不顯示,反復(fù)循環(huán)上述過程。圖5-108只數(shù)碼管分別滾動顯示單個數(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}; //共陽數(shù)碼管段碼表voiddelay(uintt) //延時函數(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)為將對象j循環(huán)左移1位
P0=dis_code[i]; //P0口輸出段碼
P2=j; //P2口輸出位控碼
delay(180); //延時,控制每位顯示的時間
}}}595.1.6
單片機(jī)控制LED點陣顯示器顯示
LED點陣顯示器應(yīng)用非常廣泛,在許多公共場合,如商場、銀行、車站、機(jī)場、醫(yī)院隨處可見。不僅能顯示文字、圖形,還能播放動畫、圖像、視頻等信號。LED點陣顯示器分為圖文顯示器和視頻顯示器,有單色顯示,還有彩色顯示。下面僅介紹單片機(jī)如何來控制單色LED點陣顯示器的顯示。(1)LED點陣顯示器結(jié)構(gòu)與顯示原理由若干個發(fā)光二極管按矩陣方式排列而成。陣列點數(shù)可分為5×7、5×8、6×8、8×8點陣;按發(fā)光顏色可分為單色、雙色、三色;按極性排列可分為共陰極和共陽極。
1).LED點陣結(jié)構(gòu)以8×8LED點陣顯示器為例,外形見圖5-11,內(nèi)部結(jié)構(gòu)見圖5-12,由64個發(fā)光二極管組成,且每個發(fā)光二極管是處于行線(R0~R7)和列線(C0~C7)之間交叉點上。
2).LED點陣顯示原理
顯示一個字符?字符由一個個點亮的LED所構(gòu)成。由圖5-12點亮點陣中一個發(fā)光二極管條件:對應(yīng)行為高電平,對應(yīng)列為低電平。如在很短時間內(nèi)依次點亮很多個發(fā)光二極管,LED點陣就可顯示一個穩(wěn)定字符、數(shù)字或其他圖形??刂芁ED點陣顯示器顯示,實質(zhì)就是控制加到行線和列線上編碼,控制點亮某些發(fā)光二極管(點),從而顯示出由不同發(fā)光點組成的各種字符。圖5-118×8LED點陣顯示器外形圖5-128×8LED點陣顯示器(共陰極)的結(jié)構(gòu)
下面以顯示字符“中”為例,見圖5-13。圖5-138×8LED點陣顯示器顯示字符“中”#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è)的狀態(tài)。2、P0、P1、P2、P3四個均是()位的()口(填“串行”還是“并行”),其中P0的功能是();P2口的功能是();而()是雙功能口;()是專門的用戶口。3、MCS-51機(jī)的P0口能驅(qū)動()個TTL負(fù)載,其P1、P2、P3只能驅(qū)動
個TTL負(fù)載,要獲得較大的驅(qū)動能力,應(yīng)采用()輸出。4.P1口的每一位能驅(qū)動()A.2個TTL低電平負(fù)載B.4個TTL低電平負(fù)載
C.8個TTL低電平負(fù)載D.10個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ī)事件中斷源:引起中斷的事件或設(shè)備稱為中斷源采用中斷的優(yōu)點:良好的中斷系統(tǒng)使處理機(jī)具有隨機(jī)應(yīng)變的能力,從而擴(kuò)大應(yīng)用范圍,提高CPU效率51中斷系統(tǒng)的特點:
內(nèi)容豐富,結(jié)構(gòu)合理,邏輯性強(qiáng),高效實用一、中斷的一般功能1、中斷的屏蔽與開放中斷屏蔽:稱為關(guān)中斷,CPU不響應(yīng)中斷請求中斷開放:稱為開中斷,CPU可響應(yīng)中斷請求2、中斷響應(yīng)與中斷返回圖5-18(a)中斷的響應(yīng)與返回中斷請求RETI主程序響應(yīng)中斷中斷服務(wù)子程序返主程序繼續(xù)執(zhí)行主程序PC斷點3、中斷優(yōu)先中斷開放的情況下,如果有幾個中斷請求同時發(fā)生,應(yīng)首先響應(yīng)中斷優(yōu)先級較高的中斷4、中斷嵌套低級中斷請求RETI主程序響應(yīng)低級中斷高級中斷服務(wù)子程序返主程序繼續(xù)執(zhí)行主程序高級中斷請求響應(yīng)高級中斷返低級中斷圖5-18(b)中斷的嵌套示意圖RETI低級中斷服務(wù)子程序低級中斷服務(wù)子程序掛起低級中斷掛起低級中斷低級中斷低級中斷二、MCS-51中斷請求源5個中斷源2個優(yōu)先級2個外部中斷3個內(nèi)部中斷INT0(P3.2)INT1(P3.3)T0T1UART與中斷有關(guān)的特殊功能寄存器:IP:中斷優(yōu)先控制寄存器IE:中斷允許控制寄存器TCON:定時/計數(shù)控制寄存器SCON:UART控制寄存器中斷請求標(biāo)志寄存器可編程,可控MCS–51中斷要點1、定時/計數(shù)器控制寄存器TCONTCON(88H)TF1TF0IE1IT1IE0IT0
INT1INT0觸發(fā)方式控制位0
低電平觸發(fā)1
邊沿↓觸發(fā)
INT1INT0外部中斷請求標(biāo)志1有有效觸發(fā)時0
當(dāng)CPU響應(yīng)中斷時T1T0溢出標(biāo)志1
計數(shù)器“+1”有溢出時,并向CPU請求中斷0
當(dāng)CPU響應(yīng)中斷時,也可由指令清除TR1TR0由硬件自動由硬件自動中斷請求標(biāo)志可編程控制位TR1TR0由硬件自動由硬件自動在每個機(jī)器周期S5P2都采樣引腳P3.3P3.2引腳00記錄有無中斷記錄有無中斷2、串行口控制寄存器SCONTI:串行口發(fā)送中斷標(biāo)志在方式0,串行發(fā)送到第8位結(jié)束時,由硬件置“1”;或在其他方式中,串行發(fā)送到停止位的開始時,由硬件置“1”,并向CPU發(fā)送中斷請求RI:串行口接收中斷標(biāo)志在方式0,串行接收到第8位結(jié)束時,由硬件置“1”;或在其他方式中,串行接收到停止位的開始時,由硬件置“1”,并向CPU發(fā)送中斷請求“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)中斷即被“禁止”或“開放”中斷的開放和禁止是可控,可編程的2、中斷優(yōu)先級寄存器IP///PSPT1PX1PT0PX0IP(B8)ET2INT0INT1T1T0UART0
低級1高級中斷中斷T23、優(yōu)先級結(jié)構(gòu)中斷優(yōu)先級控制遵循的兩個基本原則:⑴一個正在執(zhí)行的低級中斷服務(wù)程序,能被高優(yōu)先級中斷請求所中斷,但不能被同優(yōu)先級中斷請求所中斷。⑵一個正在執(zhí)行的高級中斷服務(wù)程序,不能被任何中斷請求所中斷,直到返回。中斷優(yōu)先級是可控,可編程的在同級的幾個中斷源中同時發(fā)生請求時,內(nèi)部對同級的各中斷源的優(yōu)先級別有一個規(guī)定的查詢順序:外部中斷請求INT0定時/計數(shù)器T0定時/計數(shù)器T1串行口UART定時/計數(shù)器T2外部中斷請求INT1最高最低自然優(yōu)先級自然優(yōu)先級由硬件查詢邏輯完成四、中斷響應(yīng)過程中斷響應(yīng)的三個條件:⑴CPU不是正在處理同級或高級中斷請求⑵現(xiàn)行機(jī)器周期不是所執(zhí)行指令的最后一個機(jī)器周期⑶正在執(zhí)行的指令不是RETI,或不在訪問IE或IP排除法
一個完整的中斷處理過程包括中斷請求、中斷響應(yīng)、中斷處理和中斷返回部分。當(dāng)有中斷請求且滿足中斷響應(yīng)條件時,CPU便會響應(yīng)中斷,其響應(yīng)過程如下:①將相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置1,以禁止同級或低級的中斷嵌套;②將當(dāng)前程序計數(shù)器PC的內(nèi)容壓入堆棧保存,并將相應(yīng)的中斷服務(wù)程序入口地址送入PC,以實現(xiàn)程序的轉(zhuǎn)移;③執(zhí)行中斷服務(wù)程序。響應(yīng)過程的前兩步由硬件自動完成的,中斷服務(wù)程序需要用戶編寫。5、中斷處理過程六、中斷的應(yīng)用例1、在AT89c51的單片機(jī)的P1口上面接有8個LED燈。在外部中斷0輸入引腳接有一個按鈕開關(guān)。要求將外部中斷設(shè)置為電平觸發(fā)。程序啟動時,P1口上的8個LED燈全亮。每按一次按鈕,產(chǎn)生一個低電平觸發(fā)的外部中斷請求,在中斷服務(wù)程序中,讓低4個LED燈與高4個LED燈交替閃爍5次,然后從中斷返回,控制8個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í):主程序為P1口輸出跑馬燈程序),編寫中斷子程序使得發(fā)生外部中斷0,且為下降沿觸發(fā)時,LED燈全亮。中斷結(jié)束后LED繼續(xù)接上次狀態(tài)進(jìn)行跑馬燈閃爍。例:電路結(jié)構(gòu)如下圖所示,欲使與P1.0引腳相連的LED以2秒為周期閃爍,試編程實現(xiàn)。
功能實現(xiàn)分析如下:欲使LED燈以2S為周期閃爍,則定時1S1S的延時時間利用定時器/計數(shù)器來實現(xiàn),設(shè)單片機(jī)的振蕩頻率為6MHz,則其機(jī)器周期為2us,僅僅只利用定時器T0或T1無法實現(xiàn)1秒的定時,要定時1秒需定時器T0和T1共同配合使用來達(dá)到目的。通過使T0定時50ms,在P1.3引腳上輸出一個周期為100ms的方波,計數(shù)器T1對該脈沖進(jìn)行計數(shù),計滿10個,便達(dá)到定時1秒的目的。以1秒為周期對P1.0引腳狀態(tài)求反,便能實現(xiàn)題目的要求。T0作為定時器,工作在方式1下,由TR0來控制啟停;T1作為計數(shù)器,工作在方式2下,由TR1來控制啟停;T0的初值:N=216-50000/2=40536=9E58HT1的初值:N=28-10=246=F6;GATEC/TM1M0GATEC/TM1M001100001=61HTH0=9EH;TL0=58H;TL0=F6H匯編語言參考程序:
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;}例:利用中斷實現(xiàn)例5.5測量INT0引腳上的正脈沖寬度的功能。設(shè)待測脈沖的寬度為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)中斷”的操作,對于定時器中斷T1,要關(guān)中斷應(yīng)復(fù)位中斷允許寄存器的(
)。A.EA位和ET0位B.EA位和ET1位C.EA位和EX0位D.EA位和ES位2、在中斷流程中有“關(guān)中斷”的操作,對于外部中斷0,要關(guān)中斷應(yīng)復(fù)位中斷允許寄存器的(
)。A.EA位和ET0位B.EA位和ET1位C.EA位和EX0位D.EA位和ES位3、在MCS-51單片機(jī)中,需要軟件進(jìn)行中斷撤銷的是:()A.定時中斷B.脈沖觸發(fā)的外部中斷C.電平觸發(fā)的外部中斷D.串行口中斷4、MCS—51單片機(jī)外部中斷請求信號有電平方式和(),在電平方式下,當(dāng)采集到INT0、INT1的有效信號為()時,激活外部中斷。5、3.MCS—51單片機(jī)外部中斷請求信號有電平方式和
()
6、8051單片機(jī)有()個中斷源,()級中斷優(yōu)先級別。7、簡答題
MCS51的中斷系統(tǒng)有幾個中斷源?幾個中斷優(yōu)先級?中斷優(yōu)先級是如何控制的?在出現(xiàn)同級中斷申請時,CPU按什么順序響應(yīng)(按由高級到低級的順序?qū)懗龈鱾€中斷源)?各個中斷源的入口地址是多少?8、編寫程序使P1口外接的LED燈以1S進(jìn)行跑馬燈閃爍,發(fā)生外部中斷0,且為下降沿觸發(fā)時,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、編程實現(xiàn)以定時器/計數(shù)器T0做為定時器,使得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ù)器及其應(yīng)用51系列內(nèi)部有2個16位的定時/計數(shù)器T0、T152系列內(nèi)部有3個16位的定時/計數(shù)器T0、T1、T2功能:定時計數(shù)串行口的波特率發(fā)生器定時/計數(shù)器的可編程特性:⑴確定其工作方式是定時還是計數(shù)⑵預(yù)置定時或計數(shù)初值⑶當(dāng)定時時間到或計數(shù)終止時,要不要發(fā)中斷請求⑷如何啟動定時或計數(shù)器工作可編程5.2.1、定時計數(shù)器的結(jié)構(gòu)與工作原理1、結(jié)構(gòu)圖5-1定時/計數(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)啟動啟動溢出溢出工作方式工作方式“+1`”“+1`”結(jié)構(gòu)2個16位T/C分別由8位計數(shù)器TH0、TL0、
TH1、TL1組成“+1”計數(shù)器控制寄存器TCON:控制T/C的啟停、中斷等方式寄存器TMOD:控制T/C的工作方式⑴定時器定時輸入信號:機(jī)器內(nèi)部震蕩信號的1/12分頻,即每一個機(jī)器周期做一次“+1”運(yùn)算T0T12、工作原理:∵1個機(jī)器周期=12/震蕩頻率若單片機(jī)的晶振主頻為12MHz,則計數(shù)周期為1μs⑵計數(shù)器由外部引腳(T0為P3.4,T1為P3.5)輸入計數(shù)脈沖外部輸入脈沖寬度應(yīng)大于2個機(jī)器周期外部輸入脈沖發(fā)生負(fù)跳變時,進(jìn)行“+1”計數(shù)>TCY>TCY下降沿高電平低電平TCY:為機(jī)器周期定時/計數(shù)器的使用步驟:(1)設(shè)置工作方式,TMOD寄存器(2)設(shè)置定時/計數(shù)初值THi和TLi寄存器(i=0/1)(3)打開相應(yīng)的中斷IE寄存器(4)啟動定時/計數(shù)器TCON寄存器(5)編寫T1和T0溢出中斷服務(wù)程序5.2.2、定時計數(shù)器的工作方式及編程1、方式寄存器TMOD:設(shè)定工作方式GATEC/TM1M0GATEC/TM1M0LSBMSB
(89H)TMOD控制T1控制T0門控位功能選擇位工作方式選擇GATEC/TM1M0GATEC/TM1M0INT1INT0引腳輸入電平的控制1)、GATE:門控位。設(shè)定T1、T0運(yùn)行時,是否受
0:不受外部中斷控制,要啟動定時器/計數(shù)器TRi=12)C/T1:受外部中斷控制,要啟動定時器/計數(shù)器必須TRi和INTi同時為1
0為定時功能
1為計數(shù)功能C/T=
00:方式0,13位計數(shù)器
01:方式1,16位計數(shù)器
10:方式2,可自動重新裝載初值的8位計數(shù)器
11:方式3,T0分為2個8位計數(shù)器,T1停止計數(shù)3)M1、M0工作方式控制端⑴方式0M1M0=0013位的定時計數(shù)器,由TH的8位和TL的低5位組成定時/計數(shù)器方式0邏輯圖以T1為例:T1(P3.5)GATETR1INT1震蕩器÷12TL15位TH18位TF1中斷KC/T=0C/T=1控制111“+1”中斷13位計數(shù)器TF1“+1”“+1”⑵方式1M1M0=0116位的定時計數(shù)器,由TH的8位和TL的8位組成定時/計數(shù)器方式1邏輯圖以T1為例:T1(P3.5)GATETR1INT1震蕩器÷12TL18位TH18位TF1中斷KC/T=0C/T=1控制16位計數(shù)器“+1”1中斷TF1“+1”“+1”⑶方式2M1M0=10可自動重裝載的8位計數(shù)器TH1(TH0)被定義為賦值寄存器TL1(TL0)被定義為計數(shù)器定時/計數(shù)器方式2邏輯圖以T1為例:T1(P3.5)GATETR1INT1震蕩器÷12TL18位TF1中斷KC/T=0C/T=1控制TH18位重裝載重裝載1“+1”中斷TL18位TF1“+1”“+1”⑷方式3M1M0=11T0被分成2個相互獨立的8位計數(shù)器TL0、TH0TL0使用自己本身的一些控制位C/T、GATE、TR0TF0、INT0等。TH0只能做定時器,并使用T1的控制位TR1、TF1,同時占用T1的中斷源定時/計數(shù)器方式3邏輯圖TH0借用了T1的TR1和TF1,因此控制了T1的中斷此時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ù)器的初值設(shè)定:設(shè)定定時時間和計數(shù)值最大計數(shù)值M:不同的工作方式M值不同方式0:M=213=8192方式1:M=216=65536方式2、3:M=28=256(1)定時方式初值X的計算方法:(2n-X)×T=定時值∴X=2n
-定時值/T其中T為機(jī)器周期,時鐘的12分頻,若晶振為6MHz,則T=2μs,若晶振為12MHz,則T=1μs(2)計數(shù)方式初值X的計算方法:N=2n-X(X即為要求計數(shù)的次數(shù))例5-1
若單片機(jī)晶振為12MHz,要求產(chǎn)生500μs定時,試計算X的初值。解:由于T=1μs,產(chǎn)生500μs定時,需要“+1”500次,定時器方能產(chǎn)生溢出。采用方式0:(
13位計數(shù)器)X=213-(500×10-6/10-6
)
=8192-500=7692=1E0CH=F00CH采用方式1:(16位計數(shù)器)X=216-(500×10-6/10-6)=65036=FE0CH?1111000000001100THiTLiF00CH=?暫時寫成3、打開相應(yīng)的中斷:中斷允許寄存器IEEA//ESET1EX1ET0EX0INT0INT1T1T0UARTCPU0
禁止1
允許0
禁止1
允許總中斷總中斷中斷中斷IE(A8)ET2T2CPUIE的相應(yīng)位被置“0”
或“1”
該相應(yīng)中斷即被“禁止”或“開放”中斷的開放和禁止是可控,可編程的4、開啟定時/計數(shù)器:控制寄存器TCONLSBMSB(88H)TCONTF1TR1TF0TR0IE1IT1IE0IT0T1、T0啟/??刂莆籘1、T0溢出標(biāo)志位與外部中斷INT1、INT0有關(guān)將在中斷系統(tǒng)介紹“0”停止“1”啟動“1”有溢出“0”無溢出可編程可控制“+1”亦可由指令清“0”工作“1”“0”記錄有無溢出5、相應(yīng)中斷服務(wù)程序的編寫Void函數(shù)名()interrupt1/3{局部變量定義;執(zhí)行語句}定時器/計數(shù)器上節(jié)知識回顧:
51系列單片機(jī)片內(nèi)有2個16位定時/計數(shù)器:定時器0(T0)和定時器1(T1)。兩個定時器都有定時或事件計數(shù)的功能,可用于定時控制、延時、對外部事件計數(shù)和檢測等場合每個定時器都可由軟件設(shè)置為定時工作方式或計數(shù)工作方式。
1).定時工作方式設(shè)置為定時工作方式時,定時器計數(shù)的脈沖是由51單片機(jī)片內(nèi)振蕩器經(jīng)12分頻后產(chǎn)生的。
2).計數(shù)工作方式設(shè)置為計數(shù)工作方式時,通過引腳T0(P3.4)和T1(P3.5)對外部脈沖信號計數(shù)。定時/計數(shù)器的使用步驟:(1)設(shè)置工作方式,TMOD寄存器(2)設(shè)置定時/計數(shù)初值THi和TLi寄存器(i=0/1)(3)打開相應(yīng)的中斷IE寄存器(4)啟動定時/計數(shù)器TCON寄存器(5)編寫T1和T0溢出中斷服務(wù)程序(1)設(shè)置工作方式TMOD:
GATE:門控信號
GATE=0,TRi=1時即可啟動定時器工作;
GATE=1,INTi=1才可啟動定時器工作。
C/T:定時器/計數(shù)器選擇位
C/T=1,為計數(shù)器方式;
C/T=0,為定時器方式。
M1M0:工作模式選擇位
M1M0=00工作方式0(13位方式)。
M1M0=01工作方式1(16位方式)。
M1M0=10工作方式2(8位自動再裝入方式)。
M1M0=11工作方式3(T0為2個8位方式)。(2)設(shè)置定時/計數(shù)初值計數(shù)方式初值X的計算方法:N=2n-X(X即為要求計數(shù)的次數(shù))定時方式初值X的計算方法:X=2n
-定時值/T(3)、打開相應(yīng)的中斷:中斷允許寄存器IEEA//ESET1EX1ET0EX0INT0INT1T1T0UARTCPU0
禁止1
允許0
禁止1
允許總中斷中斷中斷IE(A8)ET2T2CPUIE的相應(yīng)位被置“0”
或“1”
該相應(yīng)中斷即被“禁止”或“開放”中斷的開放和禁止是可控,可編程的(4)、開啟定時/計數(shù)器:控制寄存器TCONLSBMSB(88H)TCONTF1TR1TF0TR0IE1IT1IE0IT0T1、T0啟/??刂莆籘1、T0溢出標(biāo)志位與外部中斷INT1、INT0有關(guān)將在中斷系統(tǒng)介紹“0”停止“1”啟動“1”有溢出“0”無溢出可編程可控制“+1”亦可由指令清“0”工作“1”“0”記錄有無溢出(5)、相應(yīng)中斷服務(wù)程序的編寫Void函數(shù)名()interrupt1/3{局部變量定義;執(zhí)行語句}1、定時/計數(shù)器T1在GATE=0是運(yùn)行的條件是:()A.P3.2=1B.設(shè)置好定時初值C.TR1=1D.T1開啟2、定時/計數(shù)器T0在GATE=1是運(yùn)行的條件是:()A.P3.2=1和TR0=1B.設(shè)置好定時初值C.TR0=1D.T0開啟3、要測試INT0引腳上的一個正脈沖寬度,那么特殊功能寄存器TMOD的內(nèi)容應(yīng)為()。A.87HB.09HC.00HD.80H4、定時器若工作在循環(huán)定時或循環(huán)計數(shù)場合,應(yīng)選用()。A.工作方式0B.工作方式1C.工作方式2D.工作方式35、定時和計數(shù)都是對()進(jìn)行計數(shù),定時與計數(shù)的區(qū)別()定時器/計數(shù)器練習(xí):6、設(shè)定T1為計數(shù)器方式,工作方
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海南鋪面租賃合同書電子版
- 合同產(chǎn)生質(zhì)量事故考核
- 2024高考政治一輪復(fù)習(xí)課時練16中國特色社會主義最本質(zhì)的特征含解析新人教版
- 2024年高考生物二輪復(fù)習(xí)第一篇專題6考向3生物的進(jìn)化和生物多樣性學(xué)案
- 完美國際黃昏圣殿裝備屬性、所需材料系列介紹(武器篇)投
- 2024購買服務(wù)的合同協(xié)議書
- 2024新疆事業(yè)編制合同到期后單位可以選擇不續(xù)簽
- 2024機(jī)動車輛保險合同樣本
- 2024北京市豬肉入市場廠掛鉤合同范本
- 2024消防工程改造合同
- 20200310公園安全風(fēng)險辨識清單
- 華中科技大學(xué)官方信紙
- 60立方油罐容積細(xì)表
- WI-QA-02-034A0 燈具成品檢驗標(biāo)準(zhǔn)
- 農(nóng)業(yè)信息技術(shù) chapter5 地理信息系統(tǒng)
- 部編版六年級上語文閱讀技巧及解答
- 斯派克max操作手冊
- 項目四 三人表決器ppt課件
- 結(jié)合子的機(jī)械加工工藝規(guī)程及銑槽的夾具設(shè)計
- 林武樟 完整陽宅講義 筆記版[方案]
- 《會滾的汽車》ppt課件
評論
0/150
提交評論