電氣二-第四章并行io端口_第1頁
電氣二-第四章并行io端口_第2頁
電氣二-第四章并行io端口_第3頁
電氣二-第四章并行io端口_第4頁
電氣二-第四章并行io端口_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第4行IO端口AT89S51片原理及編1雙向的8位并行I/O端口P0、P1、P2和P3的電路結(jié)構(gòu)、工作原理及應(yīng)用,并介紹使用51對個8位并行I/端口的編程。2AT89S51的并行I/OT89S51共有4個雙向的8位并行I/O端口:P0、P1、P2和P3,它們的輸出鎖存器屬于特殊功能寄存器。4個端口除了按字節(jié)輸入/輸出外,還可位尋址,便于實現(xiàn)位控功能。AT89S51的并行I/O4個8位的并行I/O接口P0,P1,P2和P3 位地址或字節(jié)地雙功能的8位并行端口,可作為一般輸入/輸出口使用,還可在系統(tǒng)擴展時作為地址/數(shù)據(jù)服用總線口,分時輸出低8位地址A0~A7與8位數(shù)據(jù)D0~D7。P0口某一位的位電路結(jié)構(gòu)如圖1所示。讀鎖存讀引

地址/數(shù)D QDQCLKCLK

引①輸出

通用IO使CPU發(fā)出控制電平“0”“與”門,將輸出上讀鎖存讀引

地址/數(shù)控D QDQCLKCLK

P0口引 讀鎖存讀引

地址/數(shù)控D QDQCLKCLK

引②輸入 分讀引腳或讀鎖存讀引腳:由傳送指令(MOV)實現(xiàn) 讀鎖存讀引

地址/數(shù)控D QDQCLKCLK

引②輸入 分讀引腳或讀鎖存讀鎖存器:有些指如:ANLP0,A稱為“讀-改-寫”上面一個緩沖器用于讀端口鎖存器數(shù)據(jù)讀鎖存讀引

地址/數(shù)控D QDQCLKCLK

引 讀鎖存讀引

地址/數(shù)控D QDQCLKCLK

引從圖中可以看出,在讀入端口數(shù)據(jù)時,由于輸出驅(qū)動FET并接在引腳上,如果T2導(dǎo)通,就會將輸入的高電平拉成低電平,產(chǎn)生 。所以在端口進行輸入操作前,應(yīng)先向端口鎖存器寫“1”,使T2截止,引腳處于懸浮狀態(tài),變?yōu)楦咦杩馆斎?。這就是所謂的準雙向口讀鎖存DD讀引

地址/數(shù)控QQCLKCLK

引2、P0作為地址/數(shù)據(jù)總在系統(tǒng)擴展時,P0端口作為地址/數(shù)據(jù)總線使用時,分為:P0引腳輸出地址/數(shù)據(jù)信息讀鎖存讀引

地址/數(shù)控D QDQCLKCLK

引2、P0作為地址/數(shù)據(jù)總CPU發(fā)出控制電平“1”,打開“與”門,又使多路開關(guān)MUX把CPU的地址/數(shù)據(jù)總線與T2柵極反相接通,輸出地址或數(shù)據(jù)。由圖上可以看出,上下兩個FET處于反相,構(gòu)成了推拉式的輸出電路,其負載能力大大增強。讀鎖存讀引

地址/數(shù)控D QDQCLKCLK

引2、P0作為地址/數(shù)據(jù)總 P0引腳輸出地址/輸入數(shù) 引腳”控制信號有效,下面的緩沖器打開,外部數(shù)據(jù)讀總線讀鎖存讀引

地址/數(shù)控D QDQCLKCLK

引P0雙向口,用作與外部器的連接,輸出低8位地址電阻,端口不存在高阻抗(懸浮)狀態(tài),因此是一個準雙向口。為保證引腳信號的正確讀入,應(yīng)首先 單片機復(fù)位后,鎖存器自動被置1;當P0口由原來的輸出狀態(tài)轉(zhuǎn)變?yōu)檩斎霠顟B(tài)時,應(yīng)首先置鎖存器為P1讀鎖存寫鎖存讀引

CLK

圖4-2P1口某一位的位電路結(jié)4.2.3P2口作為普通I/OCPU發(fā)出控制電平“0”,使多路開關(guān)MUX倒向鎖存讀鎖

地 控

寫鎖存讀引

CLK

2.P2口作為地址總在系統(tǒng)擴展片外程序器擴展數(shù)據(jù)器且容量超過256B(用MOVX@DPTR指令)時,CPU發(fā)出控制電平“1”,使多路開關(guān)MUX倒地址線。此時,P2輸出高8位地址。讀鎖

地 控

RT

寫鎖存讀引

CLK

讀鎖存讀引

第二輸出功QQDQQD第二輸入功

圖4-4P3口某一位的位電路結(jié)二、P3第二功能此時引腳部分輸入(Q=1、W=1),部分輸出(Q=1、W讀鎖存讀引

第二輸出功QQDQQD第二輸入功

P1~P3口驅(qū)動LED在實際應(yīng)用中,常用P1~P3端口驅(qū)動LED發(fā)光二極管,下面來討論1~P3端口與LED發(fā)光二極管的驅(qū)動連接問題。P0口與P1、P2、P3口相比,P0口的驅(qū)動能力較大,每位可驅(qū)動8個LSTTL輸入,而P1、P2、P3只有P0口的一半。當P0口的某位為高電平時,可提供40uA的電流;當P0口的某位為低電平(45V)時,可提供2mA的灌電流,如低電平允許提高,灌電流可相應(yīng)加大。所以,任一個口要想獲得較大的驅(qū)動能力,只能用低電平輸出。例如,使用單片機的并行端口P1~P3直接驅(qū)動發(fā)光二極管,電路如圖4-5所示。(a)不恰當?shù)倪B接:高電平驅(qū)動(b)恰當?shù)倪B接:低電平驅(qū)動圖4-5發(fā)光二極管與AT89S51并行口的直接連接由于P~P3口 有30Ω左右的上拉電阻,如果高電平輸出,則強行從P1、P2和P3口輸出的電流d會造成單片機端口的損壞,如圖-5(a)所示。如果端口引腳為低電平,能使電流d從單片機的外部流入 ,則將大大增加流過的電流值,如圖5(b)所示。所以,當P1~P3端口驅(qū)動LED發(fā)光二極管時,應(yīng)該采用低電平驅(qū)動。并行I/O端口的C51編程舉本節(jié)通過幾個應(yīng)用舉例,介紹片內(nèi)O端口的應(yīng)用以及51的編程。片內(nèi)I/O端口作為輸出使用時,最常用的應(yīng)用是控制相應(yīng)I/O引腳上的LED點亮與熄【例-1】如圖-6所示,8個發(fā)光二極管LE0~LE7經(jīng)限流電阻分別接至P1口的P0~P7引腳上,陽極共同接高電平。編程來實現(xiàn)發(fā)光二極管的從左到右的流水點亮,即按照LED0→LED1→┉→LED7的順序,每次點亮一發(fā)光二極管,延時一段時間后熄滅這個發(fā)光二極管,然后點亮下一個發(fā)光二極管,重復(fù)循環(huán)。參考程序如下:圖4- 8個發(fā)光二極管與并行口P1的連#include#include<intrins.h> #defineucharunsignedchar#defineuintunsignedvoiddelay(uint /*延時函數(shù) uchart;while(i--);{for(t=0;t<120;}}voidmain( /*主程序 while(1){P1=_crol_0,1/*C51函數(shù)庫中的左移函數(shù),P1中的數(shù)據(jù)循環(huán)左移delay(500);/*500為延時參數(shù),可根據(jù)實際需要調(diào)整}}左右來回循環(huán)的流水燈的制圖4- 節(jié)日彩燈的花樣顯示的規(guī)腳分別接有不同顏色的發(fā)光二極管。具體如表4-1所示?!纠孔笥襾砘匮h(huán)的流水燈的電路連接見圖-6,顯示規(guī)律如圖4-7。實現(xiàn)本任務(wù)要求,可以有多種軟件實現(xiàn)方法。下面列出了3種,具體如下。本方法是建立一個字符型數(shù)組,將控制8個LED顯示的8位數(shù)據(jù)作為數(shù)組元素,依次送到P1口來實現(xiàn)。參考程序如下:#include#defineucharunsigneduchartab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf0x7f,0xbf0xdf0xef0xff70xf7,0xfb0xfe0xff};/*前8個數(shù)voiddelay( ucharfor(i=0;i<255;i++);for(j=0;j<255;}voidmain( /*主函數(shù) uchariwhile(1){for(i=0;i<15; delay(}}}本方法是使用移位運算符“>>”“<<”來把送到1口的顯示控制數(shù)據(jù)進行移位,從而實現(xiàn)發(fā)光二極管依次點亮。參考程序如下:#include#defineucharunsignedcharvoiddelay() uchari,j;for(i=0;i<255;i++);for(j=0;j<255;}voidmain( /*主函數(shù) ucharwhile for(i=0;i<8;i++); /*temp取反后送P1口*/delay(); /*temp中數(shù)據(jù)左移一位 /*賦右移初值給for(i=0;i<8; /*temp取反后送P1*/delay(); /*temp中數(shù)據(jù)右移一位}}}本方法是使用51中提供的庫函數(shù),即左移位函數(shù)和右移n位函數(shù),實現(xiàn)發(fā)光二極管的依次點亮。參考程序如下:#include#include<intrins.h> #defineucharunsignedcharvoiddelay( uchari,j;for(i=0;i<255;i++);for(j=0;j<255;}voidmain( /*主函數(shù) uchari,temp;while(1) /*初值為for(i=0;i<7; /*temp值送入P1口delay( /*延時temp=_crol_(temp,1)/*執(zhí)行左移函數(shù),temp中的數(shù)據(jù)循左移1位}for(i=0;i<7; /*temp值送入P1口*/delay(); temp=_cror_temp,1)/*執(zhí)行右移函數(shù),temp中的數(shù)據(jù)循環(huán)右}}}開關(guān)量檢測指示器【例4-3】AT89S51單片機的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引腳個開關(guān)的狀態(tài),例如P1.4引腳上開關(guān)S0的狀態(tài),由P1.0腳上的LED0顯示,P1.6引腳上開關(guān)S2的狀態(tài),由P1.2腳上的LED2顯示。凡是開關(guān)閉合的引腳,對應(yīng)的LED發(fā)光圖4- 開關(guān)、LED發(fā)光二極管與并行口P1的連參考程序如#includevoidmain(/*主函數(shù){{whileunsignedchar/*定義臨時變量

/*P1口低4位置1,作為輸入;高4位置1,發(fā)光二極管熄滅temp= 低4位,送臨時變量temp*/temp=temp>>4;/*temp的內(nèi)容右移4位,P1口高4位狀態(tài)移至低4位P1=/*臨時變量值寫入P1口輸出}}開關(guān)量檢測指示器LED0~LED3(高電平點亮),編程實現(xiàn)此功能。圖4- 開關(guān)檢測指示器2的接口電參考程序如下#include<reg51.h> /*包含頭文件reg51.h*/voidmain() /*主函數(shù)main()*/ charstate; /*P1口為輸入* /*讀入P1口的狀態(tài),送入a*/ P1口的高6位*/switcha /*判斷P1口的低2位的狀態(tài)* case0:P2=P2Ι0x01;break;/*P1.1、P1.0=00,點亮P2.0腳

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論