89C51單片機的P0~P3端口進行輸入時要設(shè)置為1,為什么是這樣的?
89C51單片機的P0~P3口不是標準意義的雙向口 ,他只是準雙向口,
你可以對照著P0口的結(jié)構(gòu)圖看這段話,向端口寫1,就是向鎖存器寫1,
也就是讓其口輸出FF,為什么,是這樣的,給鎖存器寫1,那么鎖存器
的反向端就輸出0,那么和它相接的MOS管也就在截止狀態(tài),也就是呈高
阻態(tài),這樣P0口上數(shù)據(jù)就會從讀引腳的三態(tài)緩沖器上正確的輸入,如果
不寫1,那么鎖存器上次鎖存的可能為0,那么反向端有可能出現(xiàn)1,這樣
和反向端相接的MOS管就倒通,也就是直接拉到地,那么不管你P0口上輸
入什么信號都會拉成低電平,輸入就錯了
雙向口與準雙向口的區(qū)別主要是:準雙向口I/O口操作時做數(shù)據(jù)輸入時需
要對其置1,否則若前一位為低電平,后一位輸入的電平為高則MOS管拉不起來
導致出錯。而雙向口則不需要做此動作,因為雙向口有懸浮態(tài)。
準雙向口只能有效的讀取0,而對1則是采用讀取非零的方式,就是讀入的
時候要先向接口上寫1,然后再讀。
真正的雙向口正如其名,就是真正的雙向io不需要任何預(yù)操作可直接讀入讀出
轉(zhuǎn)自:http://wenwen.soso.com/z/q184033008.htm
對照MCS-51的各通道結(jié)構(gòu):
I/O口有三種操作方式:輸出數(shù)據(jù)方式,讀端口數(shù)據(jù)方式,讀端口引腳方式
輸出數(shù)據(jù)方式:
只要一條數(shù)據(jù)操作指令就可以把輸出數(shù)據(jù)寫入P0~3的端口鎖存器,然后通過輸出驅(qū)動器送到端口引腳。
eg. MOV P0, A
MOV P0, #data
讀端口數(shù)據(jù)方式:
是一種僅對鎖存器中數(shù)據(jù)進行讀入的操作方式,讀入的這個數(shù)據(jù)并非端口引腳輸入的數(shù)據(jù)。CPU只要一條傳送指令就可以把端口鎖存器中的數(shù)絕讀入累加器A或內(nèi)部RAM中。
eg. MOV A, P1
MOV R1, P1
讀端口引腳方式:
從端口引腳線上讀入信息。CPU首先必須將欲讀端口引腳所對應(yīng)的鎖存器置位,以便驅(qū)動T2管(其他端口的T管)截止;然后打開輸入三態(tài)緩沖器,使相應(yīng)端口引腳上的信號輸入MCS-51內(nèi)部數(shù)據(jù)總線。所以,要用兩條指令來完成讀端口引腳。
eg. MOV P1, #0FH
MOV A, P1 ; 先使P1口低四位置位,然后讀P1端口第四位引腳線信號送往A。