官术网_书友最值得收藏!

3.4 MCS-51單片機并行的I/O接口

在MCS-51單片機內部包含有4個并行的I/O接口,分別稱為P0口、P1口、P2口和P3口,每一個口都是8位的,每個口的位都有一個輸出鎖存器和一個輸入緩沖器。輸出鎖存器用于存放需要輸出的數據,每個端口的8位輸出鎖存器構成一個特殊功能寄存器,且冠名與端口相同;輸入緩沖器用于對端口引腳上輸入的數據進行緩沖,因此各引腳上輸入的數據必須一直保持到CPU把它讀走為止。P0、P1、P2和P3端口的電路形式不同,其功能也不同。

3.4.1 P1口

圖3-10所示為P1口的位結構原理圖。

圖3-10 P1口的位結構示意圖

圖中的鎖存器起輸出作用,場效應管V1與上拉電阻組成輸出驅動器,以增大負載能力。三態門1是輸入緩沖器,三態門2在端口操作時使用。

P1口作為通用的I/O接口使用,具有輸出、讀引腳、讀鎖存器三種工作方式。

(1)輸出方式

單片機執行寫P1口的指令,如執行

            MOV     P1,#data

P1口工作于輸出方式,此時數據data經內部總線送入鎖存器存儲。如果某位的數據為1,則

該位鎖存器輸出端Q=1,使V1截止,從而在引腳P1.X上出現高電平;反之,如果數據為0,則Q=0,使V1導通,在引腳P1.X上出現低電平。

(2)讀引腳方式

單片機的有些指令用于讀引腳,它們一般都是以I/O端口為源操作數的指令,如執行

            MOV     A,P1

這時,控制器打開三態門1,引腳P1.X上的數據經三態門1進入芯片的內部總線,并送到累加器A。輸入時無鎖存功能。

在單片機執行讀引腳操作時,如果鎖存器原來寄存的數據Q=0,那么由于,將使V1導通,引腳被始終鉗位在低電平上,不可能輸入高電平。為此,使用讀引腳指令前,必須先用輸出指令置Q=1,使V1截止。這就是P1被稱為準雙向口的原因。“準雙向”的含義為輸出直接操作,輸入前需先置“1”,再輸入。

(3)讀鎖存器方式

MCS-51系列單片機有很多指令可以直接進行端口操作,如ANL、ORL、XRL、JBC、CPL、INC、DEC、DJNZ、MOV PX.X,C、CLR PX.X、SETB PX.X等。這些指令的執行過程分成“讀—修改—寫”三步,即先將端口的數據讀入CPU,在ALU中進行運算,運算結果再送回端口。執行“讀—修改—寫”類指令時,CPU實際是通過三態門2讀回鎖存器Q端的數據的。

這種讀鎖存器的方式是為了避免可能出現的錯誤。例如,用一根口線去驅動端口外的一個晶體管基極,當向口線寫“1”時,該晶體管導通,導通后的PN結會把端口引腳的高電平拉低,這樣直接讀引腳就會把本來的“1”誤讀為“0”。但若從鎖存器Q端讀,就能避免這樣的錯誤,得到正確的數據。也就是說,如果某位輸出為1,有外接器件拉低電平,就有區別了,讀鎖存器狀態是1,讀引腳狀態是0,鎖存器狀態取決于單片機企圖輸出什么電平。引腳狀態則是引腳的實際電平。

是讀引腳還是讀鎖存器,其過程CPU內部會自動處理,讀者不必在意。但應注意,當作為讀引腳方式使用時,應先對該口寫“1”,使場效應管截止,再進行讀操作,以防止場效應管處于導通狀態,使引腳為“0”,從而引起誤讀。

P1口能驅動4個LSTTL負載。通常把100μA的電流定義為1個LSTTL負載的電流,所以P1口吸收或輸出電流不大于400μA。P1口有內部上拉電阻,因此在輸入時,即使由集電極開路或漏極開路電路驅動,也無須外接上拉電阻。

P1口作為一般的I/O接口使用時,記為P1.7~P1.0。

3.4.2 P3口

圖3-11所示為是P3口的位結構原理圖。

圖3-11 P3口的位結構示意圖

P3口為多功能口。當第二功能輸出端保持“1”時,與非門3對鎖存器Q端是暢通的,這時P3口完全實現第一功能,即作為通用的I/O接口使用,而且是一個準雙向I/O接口,其功能與P1口是相同的。P3口除了作為準雙向通用I/O接口使用外,每一根端口線還有第二功能,見表3-3。

在應用中,P3口的各位如不設置為第二功能,則自動處于第一功能。在更多的情況下,根據需要可將幾條口線設置為第二功能,剩下的口線作為第一功能使用,此時宜采用位操作形式。

圖3-11下方的輸入通道中有兩個緩沖器1和4。第二功能輸入信號取自緩沖器4,而通用輸入信號取自“讀引腳”緩沖器1的輸出端。

P3口的負載能力和P1口相同,能驅動4個LSTTL負載。P3口作為一般的I/O接口使用時記為P3.7~P3.0;作為第二功能口使用時,提供1個全雙工的串行口、2個外部中斷源的中斷輸入、2個計數器的計數脈沖輸入、2個對外部RAM及I/O口的讀/寫控制信號。

3.4.3 P0口

圖3-12所示為P0口的位結構原理圖。

圖3-12 P0口的位結構示意圖

P0口的輸出驅動電路由上拉場效應管V2和驅動場效應管V1組成,控制電路包括一個與門、一個非門和多路開關MUX。

PO口既可以作為通用的I/O接口進行數據的輸入/輸出,也可以作為單片機系統的地址/數據線使用,為此在P0口的電路中有一個多路轉換電路MUX。在控制信號的作用下,多路轉換電路可以分別接通鎖存器輸出或地址/數據線輸出。

P0口作為通用的I/O接口使用時,CPU內部發出控制電平0封鎖與門,即與門的輸出為0(不會受另一條輸入端狀態的限制),上拉場效應管V2處于截止狀態,多路開關與Q端接通。此時輸出級是漏極開路電路。這時P0口與P1口一樣,有輸出、讀引腳和讀鎖存器三種工作方式。

(1)輸出方式

當寫脈沖加在鎖存器時鐘端CP端上時,與內部總線相連的D端數據取反后出現在Q端,又經輸出V1反相,在P0引腳上出現的數據正好是內部總線的數據。當要從P0口輸入數據時,引腳信息仍經輸入緩沖器進入內部總線。

在輸出數據時,由于V2截止,輸出級是漏極開路電路,要使“1”信號正常輸出,必須外接上拉電阻。

(2)讀引腳方式

P0口作為通用I/O接口使用時,是準雙向口。其特點是在輸入數據時,應先把口置1,此時鎖存器的Q端為0,使輸出級的兩個場效應管V1、V2均截止,引腳處于懸浮狀態,這時才可做高阻輸入。因為從P0口引腳輸入數據時,V2一直處于截止狀態,所以引腳上的外部信號既加在三態緩沖器1的輸入端,又加在V1的漏極。若在此之前曾輸出鎖存過數據0,則V1是導通的,這樣引腳上的電位就始終被鉗位在低電平,使輸入高電平無法讀入。因此在輸入數據時,應先向P0口寫1,使V1、V2均截止,方可得到正確的引腳信息。

(3)讀鎖存器方式

此時V2截止,與P1口在讀鎖存器方式時“讀—修改—寫”的工作過程一樣。

在P0口用做地址/數據分時功能連接外部存儲器時,由于訪問外部存儲器期間,CPU會自動向P0口的鎖存器寫入FFH,因此對用戶而言,P0口此時才是真正的三態雙向口。

在訪問片外存儲器而需從P0口輸出地址或數據信號時,控制信號應為高電平“1”,使轉換開關MUX把反相器的輸出端與V2接通,同時把與門打開。當地址或數據為“1”時,經反相器使V1截止,而經與門使V2導通,P0.X引腳上出現相應的高電平“1”;當地址或數據為“0”時,經反相器使V1導通而V2截止,引腳上出現相應的低電平“0”。這樣就將地址/數據的信號輸出了。

綜上所述,P0口在有外部擴展存儲器時,被作為地址/數據總線口,此時是一個真正的雙向口;在沒有外部擴展存儲器時,P0口也可作為通用的I/O接口,但此時只是一個準雙向口。另外,P0口的輸出級能以吸收電流的方式驅動8個LSTTL負載,即灌入電流不大于800μA。

P0口作為一般的I/O接口使用時,記為P0.7~P0.0;作為數據口使用時,記為D7~D0;作為地址線使用時,要增加一個鎖存器,鎖存器的輸出是地址線的低8位,記為A7~A0。

3.4.4 P2口

圖3-13所示為P2口的位結構原理圖。

圖3-13 P2口的位結構示意圖

P2口既可作為通用的I/O接口使用,也可作為地址總線使用,故其位結構比P1口多了一個多路控制開關MUX。

當P2口作為通用I/O接口使用時,多路開關MUX倒向鎖存器的輸出端Q,構成一個準雙向口。其功能與P1口相同,有輸出、讀引腳、讀鎖存器三種工作方式。

P2口的另一功能是作為系統擴展的地址總線口。當單片機從片外ROM中取指令,或者執行訪問片外RAM、片外ROM的指令時,多路開關MUX接通“地址”,P2口出現程序指針PC的高8位地址或數據指針DPTR的高8位地址。以上操作對鎖存器的內容不受影響,所以取指令或訪問外部存儲器結束后,由于多路開關MUX又與鎖存器Q端接通,引腳上將恢復原來的數據。

P2口的負載能力和P1口的相同,能驅動4個LSTTL負載。P2口作為一般的I/O接口使用時,記為P2.7~P2.0;作為地址口使用時是地址的高8位,記為A15~A8。

主站蜘蛛池模板: 河南省| 巴彦县| 石林| 乌兰浩特市| 克山县| 长沙县| 台中市| 灵寿县| 孟津县| 新余市| 景洪市| 周至县| 墨脱县| 湄潭县| 攀枝花市| 赞皇县| 体育| 镇宁| 广南县| 英山县| 建始县| 连城县| 阜新市| 普洱| 伊吾县| 遂宁市| 云南省| 邹城市| 潮州市| 阳原县| 永德县| 道真| 黄冈市| 南华县| 甘孜| 托克托县| 潮州市| 永和县| 兰州市| 体育| 晋宁县|