P3端口:
雙功能靜態(tài)I/O口P3端口的一位結(jié)構(gòu)見下圖。
由上圖可見,P3端口和Pl端口的結(jié)構(gòu)相似,區(qū)別僅在于P3端口的各端口線有兩種功能選擇。當處于第一功能時,第二輸出功能線為1,此時,內(nèi)部總線信號經(jīng)鎖存器和場效應(yīng)管輸入/輸出,其作用與P1端口作用相同,也是靜態(tài)準雙向I/O端口。當處于第二功能時,鎖存器輸出1,通過第二輸出功能線輸出特定的內(nèi)含信號,在輸入方面,即可以通過緩沖器讀入引腳信號,還可以通過替代輸入功能讀入片內(nèi)的特定第二功能信號。由于輸出信號鎖存并且有雙重功能,故P3端口為靜態(tài)雙功能端口。
P3口的特殊功能(即第二功能):
使P3端品各線處于第二功能的條件是:
1串行I/O處于運行狀態(tài)(RXD,TXD);
2打開了處部中斷(INT0,INT1);
3定時器/計數(shù)器處于外部計數(shù)狀態(tài)(T0,T1)
4執(zhí)行讀寫外部RAM的指令(RD,WR)
在應(yīng)用中,如不設(shè)定P3端口各位的第二功能(WR,RD信叼的產(chǎn)生不用設(shè)置),則P3端口線自動處于第一功能狀態(tài),也就是靜態(tài)I/O端口的工作狀態(tài)。在更多的場合是根據(jù)應(yīng)用的需要,把幾條端口線設(shè)置為第二功能,而另外幾條端口線處于第一功能運行狀態(tài)。在這種情況下,不宜對P3端口作字節(jié)操作,需采用位操作的形式。
端口的負載能力和輸入/輸出操作:
P0端口能驅(qū)動8個LSTTL負載。如需增加負載能力,可在P0總線上增加總線驅(qū)動器。P1,P2,P3端口各能驅(qū)動4個LSTTL負載。
前已述及,由于P0-P3端口已映射成特殊功能寄存器中的P0一P3端口寄存器,所以對這些端口寄存器的讀/寫就實現(xiàn)了信息從相應(yīng)端口的輸入/輸出。例如:
MOV A, P1 ;把Pl端口線上的信息輸入到A
MoV P1, A ;把A的內(nèi)容由P1端口輸出
MOV P3, #0FFH ;使P3端口線各位置l
串行端口:
MCS-51系列單片機片內(nèi)有一個串行I/O端口,通過引腳RXD(P3.0)和TXD(P3.1)可與外設(shè)電路進行全雙工的串行異步通信。
1.串行端口的基本特點
8031單片機的串行端口有4種基本工作方式,通過編程設(shè)置,可以使其工作在任一方式,以滿足不同應(yīng)用場合的需要。其中,方式0主要用于外接移位寄存器,以擴展單片機的I/O電路;方式1多用于雙機之間或與外設(shè)電路的通信;方式2,3除有方式l的功能外,還可用作多機通信,以構(gòu)成分布式多微機系統(tǒng)。
串行端口有兩個控制寄存器,用來設(shè)置工作方式、發(fā)送或接收的狀態(tài)、特征位、數(shù)據(jù)傳送的波特率(每秒傳送的位數(shù))以及作為中斷標志等。
串行端口有一個數(shù)據(jù)寄存器SBUF(在特殊功能寄存器中的字節(jié)地址為99H),該寄存器為發(fā)送和接收所共同。發(fā)送時,只寫不讀;接收時,只讀不寫。在一定條件下,向陽UF寫入數(shù)據(jù)就啟動了發(fā)送過程;讀SBUf就啟動了接收過程。
串行通信的波特率可以程控設(shè)定。在不同工作方式中,由時鐘振蕩頻率的分頻值或由定時器Tl的定時溢出時間確定,使用十分方便靈活。
2.串行端口的工作方式
①方式0
8位移位寄存器輸入/輸出方式。多用于外接移位寄存器以擴展I/O端口。波特率固定為fosc/12。其中,fosc為時鐘頻率。
在方式0中,串行端口作為輸出時,只要向串行緩沖器SBUF寫入一字節(jié)數(shù)據(jù)后,串行端口就把此8位數(shù)據(jù)以等的波特率,從RXD引腳逐位輸出(從低位到高位);此時,TXD輸出頻率為fosc/12的同步移位脈沖。數(shù)據(jù)發(fā)送前,僅管不使用中斷,中斷標志TI還必須清零,8位數(shù)據(jù)發(fā)送完后,TI自動置1。如要再發(fā)送,必須用軟件將TI清零。
串行端口作為輸入時,RXD為數(shù)據(jù)輸入端,TXD仍為同步信號輸出端,輸出頻率為fosc/12的同步移位脈沖,使外部數(shù)據(jù)逐位移入RxD。當接收到8位數(shù)據(jù)(一幀)后,中斷標志RI自動置。如果再接收,必須用軟件先將RI清零。
串行方式0發(fā)送和接收的時序過程見下圖。
②方式1
10位異步通信方式。其中,1個起始位(0),8個數(shù)據(jù)位(由低位到高位)和1個停止位(1)。波特率由定時器T1的溢出率和SMOD位的狀態(tài)確定。
一條寫SBUF指令就可啟動數(shù)據(jù)發(fā)送過程。在發(fā)送移位時鐘(由波特率確定)的同步下,從TxD先送出起始位,然后是8位數(shù)據(jù)位,最后是停止位。這樣的一幀10位數(shù)據(jù)發(fā)送完后,中斷標志TI置位。
在允許接收的條件下(REN=1),當RXD出現(xiàn)由1到O的負跳變時,即被當成是串行發(fā)送來的一幀數(shù)據(jù)的起始位,從而啟動一次接收過程。當8位數(shù)據(jù)接收完,并檢測到高電乎停止位后,即把接收到的8位數(shù)據(jù)裝入SBUF,置位RI,一幀數(shù)據(jù)的接收過程就完成了。
方式1的數(shù)據(jù)傳送波特率可以編程設(shè)置,使用范圍寬,其計算式為:
波特率=2SMOD/32×(定時器T1的溢出率)
其中,SMOD是控制寄存器PCON中的一位程控位,其取值有0和l兩種狀態(tài)。顯然,當SMOD=0時,波特率=1/32(定時器Tl溢出率),而當SMOD=1時,波特率=1/16(定時器T1溢出率)。所謂定時器的溢出率,就是指定時器一秒鐘內(nèi)的溢出次數(shù)。波特率的算法,以及要求一定波特率時定時器定時初值的求法,后面將詳細討論。 ·
串行方式1的發(fā)送和接收過程的時序見下圖。
③方式2,3
11位異步通信方式。其中,1個起始位(0),8個數(shù)據(jù)位(由低位到高位),1個附加的第9位和1個停止住(1)。方式2和方式3除波特率不同外,其它性能完全相同。方式2,3的發(fā)送、接收時序見下圖。
由圖可見,方式2和方式3與方式l的操作過程基本相同,主要差別在于方式2,3有第9位數(shù)據(jù)。
發(fā)送時,發(fā)送機的這第9位數(shù)據(jù)來自該機SCON中的TB8,而接收機將接收到的這第9位數(shù)據(jù)送入本機SCON中的RB8。這個第9位數(shù)據(jù)通常用作數(shù)據(jù)的奇偶檢驗位,或在多機通信中作為地址/數(shù)據(jù)的特征位。
方式2和方式3的波特率計算式如下:
方式2的波特率=2SMOD/64×fosc
方式3的波特率=2SMOD/32×定時器T1的溢出率
由此可見,在晶振時鐘頻率一定的條件下,方式2只有兩種波特率,而方式3可通過編程設(shè)置成多種波特率,這正是這兩種方式的差別所在。
3.串行端口的控制寄存器
串行端口共有2個控制寄存器SCON和PCON,用以設(shè)置串行端口的工作方式、接收/發(fā)送的運行狀態(tài)、接收/發(fā)送數(shù)據(jù)的特征、波特率的大小,以及作為運行的中斷標志等。