内部构造如下:
上面两个图比较繁芜,也彷佛很难记住。实在,对付串口通信芯片,最关键的便是每块芯片有一根发送旗子暗记线和一根吸收旗子暗记线,两块8251连接如图所示:

两块8251要进行通信,只要各自检讨下面的两个引脚就行:

①TxRDY(Transmitter Ready):发送器准备好,高电平有效。如果该旗子暗记有效,就表示发送缓冲器已空,关照CPU可以向芯片送入新的数据。
②RxRDY(Receiver Ready):吸收器准备好,高电平有效。如果RxRDY为高,表示吸收缓冲器中已经有组装好了的一个数据字符,关照CPU读取数据。
如果都准备好了,再通过下面两个引脚发送和吸收数据:
①TxD:发送数据线。
②RxD:吸收数据线。
上图是进行通信的两块8251连接图:
初始化程序由两部分组成:
①将一方定义为发送方,发送方CPU查询到TxRDY有效时,则CPU向8251A并行输出一个待发送的字节数据;
②将对方定义为吸收方,吸收方CPU查询到RxRDY有效时,则从8251A输入一个已吸收到的字节数据,直到全部数据传送完毕为止。
程序如下:
发送程序如下:
START:MOV DX,3F9H
MOV AL,7FH ;异步办法,8位数据,
;一位停滞位,偶校验
OUT DX,AL 波特率因子为64,许可发送
MOV AL,11H ;操作命令字
OUT DX,AL
MOV DI,1000H ;设置地址指针
MOV CX,40H ;设置计数器初值
-----------------------------------------------------------------------------------------
程序到这里是设置芯片的事情状态,包括同步异步等。
L1: MOV DX,3F9H
IN AL,DX
AND AL,01H ;查询TxRDY是否有效
JZ L1 ;无效则等待
MOV DX,3F8H
MOV AL,[DI] ;向8251A输出一个字节数据
OUT DX,AL
INC DI ;修正地址指针
LOOP L1 ;未传送完,则连续下一个
HLT
--------------------------------------------------------------------------------
这一部分便是发送数据,很大略,TxRDY准备好了就发送。
吸收程序如下:
BEGIN:MOV DX,3F9H
MOV AL,7FH ;异步办法,8位数据,1位停滞位
OUT DX,AL ;偶校验,波特率因子64,许可吸收
MOV AL,14H ;操作命令字(置ER,RxE 为1)
------------------------------------------------------------------------------
程序到这里也是设置芯片的事情状态,包括同步异步等。
MOV DX,AL
MOV SI, 2000H ;设置地址指针
MOV CX,40H ;设置计数器初值
L2:MOV DX,3F9H
IN AL,DX;读取状态字
TEST AL,38H ;查询吸收器是否有错。
JNZ ERR ;有错则转缺点处理
AND AL,02H ;无误则查状态位D1(RxRDY)
JZ L2 ;吸收未准备好则等待
MOV DX,3F8H
IN AL,DX ;接管准备好,则吸收1个字节数据
MOV [SI],AL
INC SI ;修正吸收数据区地址
LOOP L2
JMP L3
ERR:CALL ERR-OUT(略)
L3:MOV AX,4C00H ;已吸收完,返回DOS
INT 21H
--------------------------------------------------------------------------------
这一部分便是吸收数据,很大略,RxRDY准备好了就吸收。
因此,上述程序总结一下就非常大略:
1:设置芯片事情状态;
2:检讨发送是否准备好,准备好则发送数据;
3:检讨吸收是否准备好,准备好则吸收数据。






