P3.0 RXD (串行接口輸入)
P3.1 TXD (串行接口輸出)
P3.2 INT0 (外部中斷0輸入)
P3.3 INT1 (外部中斷1輸入)
P3.4 T0 (定時(shí)/計(jì)數(shù)器0的外部輸入)
P3.5 T1 (定時(shí)/計(jì)數(shù)器1的外部輸入)
P3.6 WR (片外數(shù)據(jù)存儲(chǔ)器 “寫(xiě)”選通控制輸出)
P3.7 RD (片外數(shù)據(jù)存儲(chǔ)器 “讀” 選通控制輸出)
P3接口相應(yīng)接口線處于第二功能,應(yīng)滿足的條件:
(1) 串行I/0口處于運(yùn)行狀態(tài)(RXD、TXD)
(2)外部中斷已經(jīng)打開(kāi)(INT0、INT1)
(3)定時(shí)器/計(jì)數(shù)器處于外部計(jì)數(shù)狀態(tài)(T0、T1)
(4)執(zhí)行讀/寫(xiě)外部RAM的指令(RD、WR)
但是,疑問(wèn)是P3接口的一位接口線倘若處于設(shè)置成第二功能,是否就不能用作第一功能的通用I/O口呢?做以下實(shí)驗(yàn):
#include
#include
sbitRXD_IO=P3^0;
sbitTXD_IO=P3^1;
sbitINT0_IO=P3^2;
sbitINT1_IO=P3^3;
sbitT0_IO=P3^4;
sbitT1_IO=P3^5;
voidmain(void)
{
SCON=0x50;
ES=1;
TMOD=0x55;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
IT0=1;
EX0=1;
EA=1;
#progarm //延時(shí)一段時(shí)間
RXD_IO=0;
TXD_IO=0;
INT0_IO=0;
INT1_IO=0;
T0_IO=0;
T1_IO=0;
while(1);
}
實(shí)驗(yàn)結(jié)果是:所有的接口都能像通用I/O口那樣正常輸出。實(shí)際上做了另一個(gè)實(shí)驗(yàn),所有的接口也能正常讀入。
結(jié)論:即使將P3接口設(shè)置成第二功能,但是第一功能的通用I/O口功能仍然存在。
試想,一個(gè)端口怎么可能同時(shí)有兩種功能呢,但是實(shí)驗(yàn)結(jié)果如此,該當(dāng)如何解釋?
一個(gè)合理的解釋:一個(gè)端口不可能同時(shí)有兩種功能,而上述實(shí)驗(yàn)結(jié)論只是給人的印象是“同時(shí)”。當(dāng)單片機(jī)的
P3端口的第二功能打開(kāi)后,例如外部中斷0,這個(gè)外設(shè)并不會(huì)一直檢測(cè)是否有外部觸發(fā)信號(hào)輸入,而是在機(jī)器
周期內(nèi)只在特定的時(shí)刻的時(shí)刻來(lái)檢測(cè),或者說(shuō)只在特定的時(shí)刻執(zhí)行這個(gè)第二功能,其他時(shí)間并沒(méi)有執(zhí)行這個(gè)第
而功能,這樣就可以當(dāng)做第一功能的普通I/O口來(lái)使用。
評(píng)價(jià):51單片機(jī)這種多功能I/O口并不能很好的分離兩種功能,在使用第二功能時(shí),有可能會(huì)因?yàn)槭褂玫谝还δ?/p>
而與第二功能沖突,這是危險(xiǎn)的。
單片機(jī)P0、P1、P2口在作為通用I/O口時(shí)被稱為“準(zhǔn)雙向口”,為什么?
準(zhǔn)雙向口,指的是I/O口在作為輸入時(shí),由于上拉電阻的存在,它只能讀入兩種狀態(tài),“0”(低電平)和“非0”
(高電平),而不能像真正的雙向I/O口那樣能讀入三種狀態(tài)“0”(低電平)、“1”(高電平)和“Z”(高阻態(tài))。
具體說(shuō)來(lái)就是,如果給單片機(jī)I/O口不輸入信號(hào),這時(shí)它讀入的是“1”(高電平),這在大多數(shù)情況下不能算作錯(cuò)誤。
責(zé)任編輯;zl
評(píng)論