51手記之標準51(二)
有4組8位I/O口:P0、P1、P2、P3
P0為雙向三態(tài)輸入輸出口,P1、P2、P3為準雙向口,P0的驅動能力是單個其余口的兩倍!
外擴數(shù)據(jù)RAM時,P0口可作數(shù)據(jù)/地址總線,P2口作地址總線的高8位
51的基礎是8031,8031的I/O口只有P1口!
雙向三態(tài)I/O口:口線內無固定上拉電阻,由兩個MOS管串接,既可開漏輸出,又可處于高阻的“浮空”狀態(tài),故稱為雙向三態(tài)I/O口。
P0口是雙向指的是它被用作地址/數(shù)據(jù)端口時,只有在這個時候,P0口才處于兩個開關管推挽狀態(tài),當兩個開關管都關閉時,才會出現(xiàn)高阻狀態(tài).當P0口用于一般I/O口時,內部接Vcc的那個開關管是與引腳(端口)脫離聯(lián)系的,這個時候,只有拉地的那個開關管其作用,P0口作為輸出,是必須外接上拉電阻的,不然就無法輸出高電平;
如果P0口作為輸入,則必須先對端口寫1,使拉地的開關管斷開,這個時候,如果不接上拉電阻,則是高阻狀態(tài),就是一個雙向口,如果接上拉電阻,則本身輸出高電平,對輸入信號的邏輯無影響(注意是對邏輯無影響,對實際參數(shù)有無影響我不確定,但是我認為是有的).
準雙向I/O口:各口線在片內均有固定的上拉電阻,當這三個準雙向I/O口作輸入口使用時,要向該口先寫1,另外準雙向I/O口無高阻的“浮空”狀態(tài)。
雙向與準雙向,根本原則是雙向包含了高阻這個狀態(tài),而不在于是否需要先寫1或者不寫,P1~P3口因為有內部上拉電阻,因此無論如何不是雙向;P0口內部無上拉電阻,在處于數(shù)據(jù)/地址功能時,自動完成3態(tài)的轉換,是雙向,處于一般I/O口時,如果不接外部上拉,而且先向端口寫了1,那么就處于高阻狀態(tài),此時,它也是一個人為的雙向口,這與它處于地址/數(shù)據(jù)功能時的自動雙向有區(qū)別,以及與P1~P3處于輸入時輸出鎖存器為1是有區(qū)別的跟I2C總線上那種漏極開路或者集電極開路結構差不多. 通過上拉電阻(或者下拉電阻)來提供一種電平的驅動.
當作為輸入使用時,就將開關斷開,這樣就只剩下上拉(或者下拉)電阻,因而阻抗比較高,
可以由其它設備驅動該IO口。準雙向口在做為輸入使用時,實際上還是一種輸出狀態(tài).
只是該輸出狀態(tài)的內阻比較大而已. 而真正的雙向IO口,有方向控制寄存器,作為輸入
使用時輸出部分被斷開.
雙向口與準雙向口的區(qū)別為雙向口有高阻態(tài),輸入為真正的外部信號,準雙向口內部有上拉,故高電平為內部給出不是真正的外部信號!軟件做處理時都要先向口寫“1”!
評論