串口芯片的簡單理解
串口芯片的引腳如下:

內(nèi)部結(jié)構(gòu)如下:

上面兩個圖比較復(fù)雜,也似乎很難記住。其實(shí),對于串口通信芯片,最關(guān)鍵的就是每塊芯片有一根發(fā)送信號線和一根接收信號線,兩塊8251連接如圖所示:

兩塊8251要進(jìn)行通信,只要各自檢查下面的兩個引腳就行:
①TxRDY(Transmitter Ready):發(fā)送器準(zhǔn)備好,高電平有效。如果該信號有效,就表示發(fā)送緩沖器已空,通知CPU可以向芯片送入新的數(shù)據(jù)。
②RxRDY(Receiver Ready):接收器準(zhǔn)備好,高電平有效。如果RxRDY為高,表示接收緩沖器中已經(jīng)有組裝好了的一個數(shù)據(jù)字符,通知CPU讀取數(shù)據(jù)。
如果都準(zhǔn)備好了,再通過下面兩個引腳發(fā)送和接收數(shù)據(jù):
①TxD:發(fā)送數(shù)據(jù)線。
②RxD:接收數(shù)據(jù)線。

上圖是進(jìn)行通信的兩塊8251連接圖:
初始化程序由兩部分組成:
①將一方定義為發(fā)送方,發(fā)送方CPU查詢到TxRDY有效時,則CPU向8251A并行輸出一個待發(fā)送的字節(jié)數(shù)據(jù);
②將對方定義為接收方,接收方CPU查詢到RxRDY有效時,則從8251A輸入一個已接收到的字節(jié)數(shù)據(jù),直到全部數(shù)據(jù)傳送完畢為止。
程序如下:
發(fā)送程序如下:
START:MOV DX,3F9H
MOV AL,7FH ??;異步方式,8位數(shù)據(jù),
;一位停止位,偶校驗(yàn)
OUT DX,AL 波特率因子為64,允許發(fā)送
MOV AL,11H ?。徊僮髅钭?/p>
OUT DX,AL
MOV DI,1000H ;設(shè)置地址指針
MOV CX,40H ;設(shè)置計(jì)數(shù)器初值
-----------------------------------------------------------------------------------------
程序到這里是設(shè)置芯片的工作狀態(tài),包括同步異步等。
L1: MOV DX,3F9H
IN AL,DX
AND AL,01H ;查詢TxRDY是否有效
JZ L1 ;無效則等待
MOV DX,3F8H
MOV AL,[DI] ;向8251A輸出一個字節(jié)數(shù)據(jù)
OUT DX,AL
INC DI ?。恍薷牡刂分羔?/p>
LOOP L1 ;未傳送完,則繼續(xù)下一個
HLT
--------------------------------------------------------------------------------
這一部分就是發(fā)送數(shù)據(jù),很簡單,TxRDY準(zhǔn)備好了就發(fā)送。
接收程序如下:
BEGIN:MOV DX,3F9H
MOV AL,7FH ;異步方式,8位數(shù)據(jù),1位停止位
OUT DX,AL ;偶校驗(yàn),波特率因子64,允許接收
MOV AL,14H?。徊僮髅钭郑ㄖ肊R,RxE 為1)
------------------------------------------------------------------------------
程序到這里也是設(shè)置芯片的工作狀態(tài),包括同步異步等。
MOV DX,AL
MOV SI, 2000H?。辉O(shè)置地址指針
MOV CX,40H ?。辉O(shè)置計(jì)數(shù)器初值
L2:MOV DX,3F9H
IN AL,DX;讀取狀態(tài)字
TEST AL,38H ;查詢接收器是否有錯。
JNZ ERR ;有錯則轉(zhuǎn)錯誤處理
AND AL,02H ;無誤則查狀態(tài)位D1(RxRDY)
JZ L2 ;接收未準(zhǔn)備好則等待
MOV DX,3F8H
IN AL,DX ;接受準(zhǔn)備好,則接收1個字節(jié)數(shù)據(jù)
MOV?。跾I],AL
INC SI ;修改接收數(shù)據(jù)區(qū)地址
LOOP L2
JMP L3
ERR:CALL ERR-OUT(略)
L3:MOV AX,4C00H??;已接收完,返回DOS
INT 21H
--------------------------------------------------------------------------------
這一部分就是接收數(shù)據(jù),很簡單,RxRDY準(zhǔn)備好了就接收。
因此,上述程序總結(jié)一下就非常簡單:
1:設(shè)置芯片工作狀態(tài);
2:檢查發(fā)送是否準(zhǔn)備好,準(zhǔn)備好則發(fā)送數(shù)據(jù);
3:檢查接收是否準(zhǔn)備好,準(zhǔn)備好則接收數(shù)據(jù)。