8051單片機端口結(jié)構(gòu)—P0口
8051單片機有四個8位并行I/O端口,記作P0,P1,P2和P3.每個端口都是8位準(zhǔn)雙向口,共占有32條引腳。每一條I/O線都 可以獨立的用作輸入或輸出。
每個端口都包括鎖存器,一個輸出驅(qū)動器,作輸出時數(shù)據(jù)可以鎖存,作輸入時數(shù)據(jù)可以緩沖。在無片外擴展存儲器的系統(tǒng)中,這四個端口的每一位都可以作為準(zhǔn)雙向通用I/O端口使用。
在具有片外擴展存儲器系統(tǒng)中,P2口送出高8位地址,P0口為雙向總線,分別送出低8位地址和數(shù)據(jù)輸入/輸出。8051單片機四個I/O端口的電路設(shè)計非常巧妙,熟悉I/O端口邏輯電路,不但有利于正確合理地使用端口,而且會對設(shè)計單片機外圍邏輯電路有所啟發(fā)。
P0口的每一位由一個輸出鎖存器 ,二個三態(tài)輸入緩沖器,輸出驅(qū)動電路,控制電路與門,反相器,MUX控制構(gòu)成。當(dāng)CPU使控制線C=0時,數(shù)控開關(guān)MUX向下,P0口為通用I/O口;當(dāng)C=1時,開關(guān)拔向反相器的輸出,端口分時為地址/數(shù)據(jù)總線使用。
我們先來看P0口作為I/O口使用的情況:
當(dāng)8051組成的系統(tǒng)無外擴存儲器,CPU對片內(nèi)存儲器和I/O口讀寫時 。執(zhí)行MOV指令,或EA=1的條件下執(zhí)行MOVC指令時,由硬件自動使控制線C=0,開關(guān)MUX倒向下,它輸出級T2與鎖存器的Q反端接通;同時,因與門輸出為0,輸出級中的上拉場效應(yīng)管T1處于截止?fàn)顟B(tài),因此,輸出級是漏極開路電路。這時P0口可作一般I/O口用。
一般I/O口又有輸入和輸出兩種操作,我們先來看看P0用作輸出口的情況。當(dāng)CPU執(zhí)行輸出指令時,寫入脈沖加在D鎖存器上,這樣與內(nèi)部總線相連的數(shù)據(jù)取 反相后就出現(xiàn)在Q上,若D端數(shù)據(jù)為0,則反端數(shù)據(jù)為1,場效應(yīng)管T2導(dǎo)通,輸出0.此時引腳被上拉電阻拉成高電平,這樣數(shù)據(jù)總線上的信號1被準(zhǔn)確的送出到引腳上 。
8051有幾條輸出指令功能特別強,屬于“讀-改-寫”指令。例如,執(zhí)行一條ANL P0,A。指令的過程是:不直接讀引腳上的數(shù)據(jù),而是讀P0口D端鎖存器中的數(shù)據(jù),當(dāng)“讀鎖存器”信號有效,三態(tài)緩沖器1導(dǎo)通,Q端數(shù)據(jù)內(nèi)部總線和累加器A中的數(shù)據(jù)進行“邏輯與”操作,結(jié)果送回P0端口鎖存器。此時,鎖存器的內(nèi)部和引腳是一致的。
下面分析P0口作輸入口的情況,緩沖器2用于CPU直接讀口數(shù)據(jù)。當(dāng)執(zhí)行一條由端口輸入的指令時,“讀引腳”脈沖把該三態(tài)緩沖器打開,這樣,端口上的數(shù)據(jù)經(jīng)過緩沖器2讀入到內(nèi)部總線。這類操作由數(shù)據(jù)傳送指令實現(xiàn)。在讀入端口引腳數(shù)據(jù)時,由于輸出驅(qū)動場效應(yīng)管T2并接在引腳上,如果T2導(dǎo)通就會將輸入的高電平拉成低電平,以至于產(chǎn)生誤讀。所以,在端口進行輸入操作前,應(yīng)先向端口鎖存器寫入“1”,也就是使鎖存器Q反=0,因為控制線C=0,因此T1和T2截止,引腳處于懸浮狀態(tài),可作高阻抗輸入。
下面我們看看控制線C=0時,P0口作為地址/數(shù)據(jù)總線使用的情況。當(dāng)8031外擴存儲器組成系統(tǒng),CPU對外存儲器讀寫,CPU片外存儲器讀寫,即執(zhí)行MOVX指令,或在EA=0的條件下執(zhí)行MOVC指令時,由內(nèi)部硬件自動使控制線C=1,開關(guān)MUX撥向反相器3輸出端。這時P0可作地址/數(shù)據(jù)總線分別使用,并且又分為兩種情況。
1、P0口可作輸出地址/數(shù)據(jù)總線。在擴展系統(tǒng)中,一種是以P0口引腳輸入低8位地址或數(shù)據(jù)信息。
2、另一種情況是有P0口輸入數(shù)據(jù)。這種情況是在“讀引腳”信號有效時打開輸入緩沖器使數(shù)據(jù)進入內(nèi)部總線。
綜上所述,P0即可作一般I/O端口使用, 也可作地址/數(shù)據(jù)總線使用。