在單片機(jī)中,I/O口是一個集數(shù)據(jù)輸入緩沖、數(shù)據(jù)輸出驅(qū)動及鎖存等多項功能于一體的I/O電路。MCS-51單片機(jī)共有4個8位的I/O口(分別記作P0口、P1口、P2口、P3口),這些I/O口主要用以實現(xiàn)數(shù)據(jù)的輸入和輸出,可以靈活方便地進(jìn)行各種測試和控制。
P0、P1、P2、P3的共同特點是當(dāng)不需要進(jìn)行系統(tǒng)擴(kuò)展時,都能作為通用的I/O口來使用,對這些口既可以按口尋址,進(jìn)行字節(jié)數(shù)據(jù)操作;也可以按口線尋址,進(jìn)行位操作。
MCS-51單片機(jī)中沒有專門的I/O指令,數(shù)據(jù)的I/O操作都是使用MOV傳送指令來完成的。我們通過P1.n口線的電路邏輯圖(圖1),從數(shù)據(jù)輸出、數(shù)據(jù)輸入、“讀—改—寫”操作三個方面來分析I/O口指令。
P1.n口線的電路邏輯圖由三個部分組成:①一個數(shù)據(jù)輸出鎖存器,用于輸出數(shù)據(jù)的鎖存;②兩個三態(tài)輸入緩沖器,BUF1用于讀鎖存器,BUF2用于讀引腳;③一個數(shù)據(jù)輸出驅(qū)動電路,由場效應(yīng)管VT和片內(nèi)上拉電阻R組成。
一、數(shù)據(jù)輸出
輸出數(shù)據(jù)時, 來自CPU的寫脈沖加在D觸發(fā)器的CP端,用MOV指令把輸出的數(shù)據(jù)從內(nèi)部總線寫入口線電路鎖存器的Q端,并向端口引腳輸出??梢暂敵鰯?shù)據(jù)的指令有:位輸出指令(MOVPm.n,C ),字節(jié)輸出指令(MOVPm,#data 、MOVPm,A 、MOVPm,Rn、MOVPm,@Ri 、MOVPm,direct)(指令中m可以為0~3,分別代表P0~P3口,n可以為0~7,分別代表某個口的第0~第7位。)
二、數(shù)據(jù)輸入
鎖存器原狀態(tài)Q端為高電平“1”,Q-端則為低電平“0”,場效應(yīng)管VT截止,執(zhí)行輸入指令時,產(chǎn)生“讀引腳”信號打開BUF2緩沖器,引腳P1.0口線上的數(shù)據(jù)“0”/“1”就經(jīng)BUF2緩沖器讀入內(nèi)部總線來。
鎖存器原狀態(tài)Q端為低電平“0”,Q-端則為高電平“1”,導(dǎo)通的場效應(yīng)管VT會將外界輸入的任何信號都拉低為低電平,這時從引腳 P1.0口線上讀入的數(shù)據(jù)都為低電平“0”。這樣就不能反映出P1.0引腳輸入的是“1”還是“0”,這實際上就是封鎖了口線,使外界的信號不能輸入。更為嚴(yán)重的是,當(dāng)外界輸入信號為高電平信號時,在拉低過程中產(chǎn)生的大電流還有可能把晶體管燒壞。這就是MCS—51的4個I/O口從引腳輸入數(shù)據(jù)時存在的一個特殊問題。
為此,在從引腳數(shù)據(jù)輸入之前(即在使用MOV輸入指令前)必須先向電路中的輸出鎖存器Q寫入“1”(即用指令把口線引腳設(shè)置為高電平),使鎖存器的Q=1,Q-=0,場效應(yīng)管VT截止,以避免鎖存器Q端為“0”狀態(tài)時對引腳數(shù)據(jù)輸入的干擾。
數(shù)據(jù)輸入的指令有:從口位輸入數(shù)據(jù)的指令(MOV C,Pm.n)、從口字節(jié)輸入數(shù)據(jù)的指令(MOV A,Pm、MOV Rn,Pm、MOV@Ri,Pm、MOV direct,Pm)。
三、“讀(輸入)—改(運算或修改)—寫(輸出)”指令
對于口的操作還有這樣一些指令,它們的操作過程是:先將鎖存器Q端的狀態(tài)讀入內(nèi)部總線(讀端口又稱讀鎖存器),然后對讀出數(shù)據(jù)進(jìn)行運算或修改操作,最后再把結(jié)果回送輸出給口。我們把它稱之為“讀—改—寫”指令。
以口做目的操作數(shù)的邏輯運算指令:ANL Pm,A;ANL Pm,#data;ORL P.m,A;ORL P.m,#data;XRL P.m,A;XRL P.m,#data
對口加1、減1指令:INC Pm;DEC Pm
對口的位操作指令:CLR Pm.n;SETB Pm.n;CPL Pm.n;
口的位邏輯運算指令:ANL C,Pm.n ;ORL C,P.m.n;
口的位狀態(tài)判斷指令:JB P.mn,rel; JNB P.mn,rel;JBC Pm.n,rel;
對于這類“讀—改—寫”指令,不直接讀引腳而讀鎖存器(又稱讀端口)是為了避免直接讀引腳可能出現(xiàn)的錯誤。使用時,CPU能根據(jù)不同的指令,分別發(fā)出“讀引腳”和“讀鎖存器”信號,以完成讀引腳還是讀鎖存器的操作。
(作者單位:江蘇省常州技師學(xué)院)