第4章并行端口_第1頁
第4章并行端口_第2頁
第4章并行端口_第3頁
第4章并行端口_第4頁
第4章并行端口_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章

AT89S51片內(nèi)并行端口的

原理及編程14個雙向的8位并行I/O端口:P0~P3,它們的輸出鎖存器屬于特殊功能寄存器。4個端口可以按字節(jié)和位尋址。24.1AT89S51的并行I/O端口的結(jié)構(gòu)及工作原理雙功能的8位并行端口,字節(jié)地址為80H,位地址為80H~87H。34.1.1P0口圖4-1P0口某一位的位電路結(jié)構(gòu)1.位電路結(jié)構(gòu)P0口某位的電路包括:(1)一個數(shù)據(jù)輸出鎖存器,用于數(shù)據(jù)位鎖存。(2)兩個三態(tài)數(shù)據(jù)輸入緩沖器,分別是用于讀鎖存器的輸入緩沖器BUF1和讀引腳的輸入緩沖器BUF2。(3)一個多路轉(zhuǎn)接開關(guān)MUX,一個輸入來自鎖存器的端,另一輸入為地址/數(shù)據(jù)信號的反相輸出。MUX由“控制”信號控制,實現(xiàn)鎖存器的輸出和地址/數(shù)據(jù)信號之間的轉(zhuǎn)接。

(4)數(shù)據(jù)輸出的控制和驅(qū)動電路,由兩個場效應管(FET)組成。4(1)P0口用作地址/數(shù)據(jù)總線當外擴存儲器或I/O時,P0口分時復用為地址/數(shù)據(jù)總線使用。當作為地址或數(shù)據(jù)輸出時,“控制”信號為1。52.P0口工作過程分析11110導通截止510001截止導通推挽輸出(1)P0口用作地址/數(shù)據(jù)總線當作為數(shù)據(jù)輸入時,僅從外部讀入信息,“控制”信號為0。62.P0口工作過程分析11110導通截止60CPU自動寫入1000截止截止高阻數(shù)據(jù)輸入(2)P0口用作通用I/O口當作為通用I/O口時,“控制”信號為0,要外接上拉電阻。72.P0口工作過程分析0數(shù)據(jù)寫脈沖0截止數(shù)據(jù)(2)P0口用作通用I/O口輸入時:“讀引腳”和“讀鎖存器”82.P0口工作過程分析0數(shù)據(jù)讀鎖存器0截止0數(shù)據(jù)讀引腳0截止數(shù)據(jù)0截止P0口為雙功能口——地址/數(shù)據(jù)復用口和通用I/O口。當P0口用作地址/數(shù)據(jù)復用口時,是一個真正的雙向口,輸出低8位地址或輸出/輸入8位數(shù)據(jù)。當P0口用作通用I/O口時,是一個準雙向口。用作輸入時,應首先向鎖存器寫1。單片機復位后,鎖存器自動被置1;當P0口由原來的輸出狀態(tài)轉(zhuǎn)變?yōu)檩斎霠顟B(tài)時,應首先置鎖存器為1,方可執(zhí)行輸入操作。93.P0口的特點單功能I/O口,字節(jié)地址為90H,位地址為90H~97H。104.1.2P1口圖4-2P1口某一位的位電路結(jié)構(gòu)2.工作過程分析P1口只能作為通用的I/O口使用。P1口作為輸入口時,分為“讀鎖存器”和“讀引腳”兩種方式。P1口有內(nèi)部上拉電阻,為準雙向口。“讀引腳”輸入時,必須先向鎖存器寫入1。11P2口是一個雙功能口,字節(jié)地址為A0H,位地址為A0H~A7H。124.1.3P2口圖4-3P2口某一位的位電路結(jié)構(gòu)工作過程分析(1)P2口用作地址總線在內(nèi)部控制信號作用下,MUX與“地址”接通。當“地址”線為0時,場效應管導通,P2口引腳輸出0;當“地址”線為1時,場效應管截止,P2口引腳輸出1。(2)P2口用作通用I/O在內(nèi)部控制信號作用下,MUX與鎖存器的Q端接通。CPU輸出1時,Q=1,場效應管截止,P2.x引腳輸出1;CPU輸出0時,Q=0,場效應管導通,P2.x引腳輸出0。輸入時,分為“讀鎖存器”和“讀引腳”兩種方式。133.P2口的特點作為地址輸出線使用時,P2口可以輸出外部存儲器的高8位地址,與P0口輸出的低8位地址一起構(gòu)成16位地址,可以尋址64KB的地址空間。作為通用I/O口使用時,P2口為一個準雙向口。功能與P1口一樣。P2口作為高8位地址總線使用時就不能再作為通用I/O口。14P3口電路中增加了引腳的第二功能,P3口的每一位都可以分別定義為第二輸入功能或第二輸出功能。P3口的字節(jié)地址為B0H,位地址為B0H~B7H。154.1.4P3口圖4-4P3口某一位的位電路結(jié)構(gòu)2.工作過程分析(1)P3口用作第二輸入/輸出功能選擇第二輸出功能時,鎖存器置“1”,“與非門”開啟。當?shù)诙敵鰹?時,場效應管截止,P3.x引腳輸出為1;當?shù)诙敵鰹?時,場效應管導通,P3.x引腳輸出為0。16選擇第二輸入功能時,鎖存器和第二輸出功能端均應置1,保證場效應管截止,P3.x引腳的信息由輸入緩沖器BUF3的輸出獲得。(2)P3口用作第一功能——通用I/O口第二輸出功能端應保持高電平,“與非門”為開啟狀態(tài)。CPU輸出1時,Q=1,場效應管截止,P3.x引腳輸出為1;CPU輸出0時,Q=0,場效應管導通,P3.x引腳輸出為0。用作第一功能通用輸入時,P3.x位的輸出鎖存器和第二輸出功能均應置1,場效應管截止,P3.x引腳信息通過輸入BUF3和BUF2進入內(nèi)部總線,完成“讀引腳”操作。當P3口實現(xiàn)第一功能通用輸入時,也可以執(zhí)行“讀鎖存器”操作,此時Q端信息經(jīng)過緩沖器BUF1進入內(nèi)部總線。173.P3口的特點P3口內(nèi)部有上拉電阻,為準雙向口。P3口作為第二功能的輸出/輸入,或第一功能的通用I/O輸入,均須將相應位的鎖存器置1。、由于復位后P3口鎖存器自動置1,所以不需要任何設(shè)置工作,就可以進入第二功能操作。當某位不作第二功能使用時,可作為第一功能的通用I/O使用。18P0口與P1、P2、P3口相比,P0口的驅(qū)動能力較大,每位可驅(qū)動8個LSTTL輸入,而P1、P2、P3口的每一位的驅(qū)動能力,只有P0口的一半。當P0口的某位為高電平時,可提供400A的電流;當P0口的某位為低電平(0.45V)時,可提供3.2mA的灌電流,如低電平允許提高,灌電流可相應加大。所以,任一個口要想獲得較大的驅(qū)動能力,只能用低電平輸出。194.1.5P1~P3口驅(qū)動LED發(fā)光二極管的問題(a)不恰當?shù)倪B接:高電平驅(qū)動(b)恰當?shù)倪B接:低電平驅(qū)動圖4-5發(fā)光二極管與AT89S51并行口的直接連接上拉電阻限制了拉電流4.2.1從左到右的流水燈的制作【例4-1】

如圖4-6所示,8個發(fā)光二極管LED0~LED7經(jīng)限流電阻分別接至P1口的P1.0~P1.7引腳上,陽極共同接高電平。編程來實現(xiàn)發(fā)光二極管的從左到右的流水點亮,即按照LED0→LED1→┉→LED7的順序,每次點亮一個發(fā)光二極管,延時一段時間后熄滅這個發(fā)光二極管,然后點亮下一個發(fā)光二極管,重復循環(huán)。214.2并行I/O端口的C51編程舉例圖4-68個發(fā)光二極管與并行口P1的連接#include<reg51.h>#include<intrins.h> /*包含移位函數(shù)的頭文件*/#defineucharunsignedchar #defineuintunsignedint voiddelay(uinti){ /*延時函數(shù)*/ uchart; while(i--){ for(t=0;t<120;t++); }}voidmain() { /*主程序*/ P1=0xfe; while(1){ P1=_crol_(0,1); /*C51函數(shù)庫中的左移函數(shù),P1中的數(shù)據(jù)循環(huán)左移1位*/ delay(500);/*500為延時參數(shù),可根據(jù)實際需要調(diào)整*/ }}Proteus的使用,例4-1244.2.2左右來回循環(huán)的流水燈的制作在【例4-1】的基礎(chǔ)上,增加了從右到左點亮發(fā)光二極管的功能,即制作左右來回循環(huán)的節(jié)日彩燈,顯示規(guī)律如圖4-7所示。具體電路如圖4-6所示。

25圖4-7節(jié)日彩燈的花樣顯示的規(guī)律為了使顯示效果更加絢麗多彩,圖4-6中的P1端口8個引腳分別接有不同顏色的發(fā)光二極管。具體如表4-1所示。

26【例4-2】左右來回循環(huán)的流水燈的電路連接見圖4-6,顯示規(guī)律如圖4-7。實現(xiàn)本任務要求,可以有多種軟件實現(xiàn)方法。下面列出了3種,具體如下。(1)數(shù)組的字節(jié)操作實現(xiàn) 本方法是建立一個字符型數(shù)組,將控制8個LED顯示的8位數(shù)據(jù)作為數(shù)組元素,依次送到P1口來實現(xiàn)。參考程序如下:

#include<reg51.h> #defineucharunsignedchar uchartab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xff7,0xf7,0xfb,0xfe,0xff};/*前8個數(shù)據(jù)為左移點亮數(shù)據(jù),后8個為右移點亮數(shù)據(jù)*/27voiddelay(){ uchari,j; for(i=0;i<255;i++); for(j=0;j<255;j++);}voidmain() /*主函數(shù)*/{ uchari while(1) { for(i=0;i<15;i++); { P1=tab[i]; delay(); } }}28(2)移位運算符實現(xiàn)本方法是使用移位運算符“>>”“<<”來把送到P1口的顯示控制數(shù)據(jù)進行移位,從而實現(xiàn)發(fā)光二極管依次點亮。參考程序如下:

#include<reg51.h> #defineucharunsignedchar voiddelay(){ uchari,j; for(i=0;i<255;i++) for(j=0;j<255;j++); } voidmain(){ /*主函數(shù)*/ uchari,temp; while(1){ temp=0x01; /*左移初值賦給temp*/ for(i=0;i<8;i++){29 P1=~temp; /*temp取反后送P1口*/ delay(); temp=temp<<1; /*temp中數(shù)據(jù)左移一位*/ } temp=0x80; /*賦右移初值給temp*/ for(i=0;i<8;i++){ P1=~temp; /*temp取反后送P1口*/ delay(); temp=temp>>1; /*temp中數(shù)據(jù)右移一位*/ } }}30(3)用移位函數(shù)實現(xiàn)#include<reg51.h>#include<intrins.h> /*包含左、右移位函數(shù)的頭文件*/#defineucharunsignedchar voiddelay(){ uchari,j; for(i=0;i<255;i++) for(j=0;j<255;j++);}voidmain() { /*主函數(shù)*/ uchari,temp; while(1){ temp=0xfe; /*初值為0x11111110*/31 for(i=0;i<7;i++){ P1=temp; /*temp值送入P1口*/ delay(); /*延時*/ temp=_crol_(temp,1); /*執(zhí)行左移函數(shù),temp中的數(shù)據(jù)循環(huán)左移1位*/ } for(i=0;i<7;i++){ P1=temp; /*temp值送入P1口*/ delay(); /*延時*/ temp=_cror_(temp,1); /*執(zhí)行右移函數(shù),temp中的數(shù)據(jù)循環(huán)右移1位*/ } }}324.2.3開關(guān)量檢測指示器1I/O端口另一應用是作為輸入端口來檢測開關(guān)的狀態(tài)。【例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引腳控制的4個發(fā)光二極管上。1個發(fā)光二極管的狀態(tài),對應一個開關(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)閉合的引腳,對應的LED發(fā)光二極管點亮。接口電路見圖4-8。3334圖4-8開關(guān)、LED發(fā)光二極管與并行口P1的連接參考程序如下:

#include<reg51.h> 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位狀態(tài)移至低4位*/ P1=temp; /*臨時變量值寫入P1口輸出*/ } }354.2.4開關(guān)量檢測指示器2【例4-4】如圖4-9所示,AT89S51單片機P1.0和P1.1引腳接有兩只開關(guān)S0和S1,兩只引腳上的高低電平共有4種組合,這4種組合分別點亮P2.0~P2.3引腳控制的4只LED:LED0~LED3(高電平點亮),編程實現(xiàn)此功能。3637圖4-9開關(guān)檢測指示器2的接口電路參考程序如

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論