欢迎光临散文网 会员登陆 & 注册

串口芯片的简单理解

2023-03-26 17:49 作者:我爱计算机科学  | 我要投稿

串口芯片的引脚如下:

内部结构如下:

上面两个图比较复杂,也似乎很难记住。其实,对于串口通信芯片,最关键的就是每块芯片有一根发送信号线和一根接收信号线,两块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:检查接收是否准备好,准备好则接收数据。


串口芯片的简单理解的评论 (共 条)

分享到微博请遵守国家法律