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