基本的 51 單片機(jī)有四個(gè)并行口,其中還包含了一個(gè)串行口。
當(dāng)接口不夠用的時(shí)候,大家就會(huì)想到,使用什么外接芯片來擴(kuò)充。
但是,各種教材、參考書、網(wǎng)絡(luò)文章,介紹擴(kuò)充并行口的花樣不少,擴(kuò)充串行口的方法,幾乎無人問津。
偶爾見到一個(gè),也是使用 8250、8251 等“巨型”芯片來擴(kuò)充的
使用這些芯片,就要占用單片機(jī)很多的更為緊缺的并行口,基本上就是得不償失。更別說還要設(shè)置復(fù)雜的控制字了。
使用簡單的三態(tài)門,即可為單片機(jī)擴(kuò)充串行口,僅僅占用單片機(jī)的一、二個(gè)引腳作為控制引線而已。
實(shí)際上是很簡單的,就像使用 74LS373、74LS244 擴(kuò)充并行口一樣,為串行口,配上合適三態(tài)門就行了。
選用 74LS125(低電平開門)、74LS126(高電平開門) 都行。
使用其它的具有三態(tài)輸出的芯片也可以,如:74LS244、74LS373 等等。
只是這些芯片的控制線,是成組的控制,不是單獨(dú)的一個(gè)門、一個(gè)門的進(jìn)行控制,就有些不夠方便。
下面就是設(shè)計(jì)的擴(kuò)充兩個(gè)串口通道的電路圖:
為了控制簡單,以及介紹全面一些,在圖中使用了兩種三態(tài)門。用同一種,也是可以的。
兩組三態(tài)門,均以 P3.4 作為控制信號。
當(dāng) P3.4 輸出高電平時(shí),74LS126 開門,通道1導(dǎo)通,單片機(jī)即可對 74LS164 進(jìn)行串行輸出,驅(qū)動(dòng)數(shù)碼管;
當(dāng) P3.4 輸出低電平時(shí),74LS125 開門,通道2導(dǎo)通,單片機(jī)即可與其它串口設(shè)備進(jìn)行全雙工的通信。
如果需要,還可以在 125 的右邊再接上 TTL-RS232 電平轉(zhuǎn)換芯片(或 RS485 總線芯片),進(jìn)行遠(yuǎn)距離通信。
圖中是接上了一個(gè) PROTEUS 軟件的虛擬終端,用來代表另一個(gè)串口通信設(shè)備。
做而論道用匯編語言寫了一小段程序,可以控制這個(gè)串口擴(kuò)展電路進(jìn)行工作。
;=================================================
ORG 0000H
SJMP START
ORG 0023H
AJMP S_INT
START:
MOV TMOD, #20H
MOV TH1, #0FDH ;設(shè)置波特率9600@11.0592MHz
MOV TL1, #0FDH
SETB TR1
MOV IE, #90H ;開串口中斷
CLR P3.4 ;選通74LS125(通道2)
MOV SCON, #50H ;串口方式1, 可接收
SJMP $
;-----------------------------------
S_INT: ;串口中斷程序
JNB RI, S_END
CLR RI
MOV A, SBUF ;取出收到的數(shù)據(jù)
;---------------------
SETB P3.4 ;選通74LS126(通道1)
MOV SCON, #0 ;串口通信方式0
MOV B, #16
DIV AB
XCH A, B
ADD A, #(TAB - $ - 3)
MOVC A, @A + PC ;取七段碼
MOV SBUF, A ;串口輸出
JNB TI, $ ;等待發(fā)送完畢
CLR TI
MOV A, B
ADD A, #(TAB - $ - 3)
MOVC A, @A + PC
MOV SBUF, A
JNB TI, $
CLR TI
;---------------------
CLR P3.4 ;選通74LS125(通道2)
MOV SCON, #50H ;串口方式1, 可接收
MOV SBUF, #'O'
JNB TI, $
CLR TI
MOV SBUF, #'K'
JNB TI, $
CLR TI
MOV SBUF, #13 ;
JNB TI, $
CLR TI
MOV SBUF, #10 ;
JNB TI, $
CLR TI
;---------------------
S_END:
RETI
TAB: ;共陽段碼表
DB 0C0H, 0F9H, 0A4H, 0B0H, 099H, 092H, 082H, 0F8H;0~7
DB 080H, 090H, 088H, 083H, 0C6H, 0A1H, 086H, 08EH;8~F
END
;=================================================
程序執(zhí)行后,屏幕截圖如下:
在程序控制下,51 單片機(jī)隨時(shí)監(jiān)聽通道2,一旦虛擬終端發(fā)來了一個(gè)字節(jié)的串行數(shù)據(jù),單片機(jī)都要向虛擬終端回送 'OK'
這時(shí),就是單片機(jī)和上位機(jī)之間的雙工串行通信。
然后,單片機(jī)轉(zhuǎn)向串口通道1,以方式0 輸出兩組七段碼,令外接的 74LS164 顯示剛剛收到的數(shù)據(jù)的高、低四位。
這時(shí),就是簡單的 SPI 通信方式。
在圖中可以看到,數(shù)碼管顯示的是 41,這是在虛擬終端窗口中鍵入'A'時(shí)的現(xiàn)象,41 即字符 A 的 ASCII 碼。
虛擬終端,它并不顯示鍵入的內(nèi)容,它僅僅顯示單片機(jī)發(fā)出的信息,在圖中可以看到顯示出來的 OK、回車、換行
74LS125 和 74LS126 都是 14 引腳的集成芯片,和 8250、16550A 等 40 引腳的專用串口芯片相比,要小巧的多。
每片(125 或 126)都含有四個(gè)獨(dú)立工作的三態(tài)門。實(shí)際上,使用一片 125 或 126,也就可以實(shí)現(xiàn)上述的兩個(gè)通道串口通信了。
注意:如果使用了一片芯片,那么通道控制的電平信號是相同的,這就需要使用單片機(jī)的兩個(gè)引腳來分別控制兩個(gè)通道。
多用幾片三態(tài)門,為單片機(jī)多擴(kuò)充幾個(gè)串行口,也是可行的。
做而論道設(shè)計(jì)的這種串口擴(kuò)充方案,硬件電路和軟件,都已經(jīng)在實(shí)際電路中做過實(shí)驗(yàn),可以正常通信。
-
單片機(jī)
+關(guān)注
關(guān)注
6023文章
44376瀏覽量
628393 -
串行
+關(guān)注
關(guān)注
0文章
235瀏覽量
33691
原文標(biāo)題:51單片機(jī)串口的擴(kuò)充方法
文章出處:【微信號:changxuemcu,微信公眾號:暢學(xué)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論