基于8250的多机通信设计
实现串行通信的方法很多,例如可以根据通信协议的要求,用编写程序的方法完成串行通信中数据字符的接收和发送,但这种方法比较麻烦;为了快速、简便、有效的实现串行通信,PC系列及其兼容机都可以采用一个可编程异步串行通信接口芯片来执行异步串行通信协议。这种异步通信接口芯片的核心是一个大规模集成通信组件,称为通用异步接收/发送器,或简称UART(Universal Asynchronous Receiver/Transmitter)。
1﹒ 8051实现多机通信原理
8051串行通信相关的三个控制寄存器SCON(Serial Controller)、PCON(Power Controller)和IE(Interrupted Enhanced)分别用于设定四种不同的通信方式及定义波特率。它的串行口工作方式3是可变波特率的9位数据异步通信方式,发送或接收一帧数据为1l 位:1位起始位,8位数据位、1位附加的校验位和1位停止位。其中附加的第9位数据是可编程的,利用这一可控的第9位数据,可以实现多机通信。
2﹒ PC机与8051通信原理
PC机的串行通信适配器,其核心为可编程异步收发器UART8250芯片,8250有10个可寻址寄存器供CPU读/写,以实现与外界的通信,并制定通信协议和提供通信状态信息。
8051单片机的串行通道是一个全双工的串行通信口,既可以实现双机通信,也可以实现多机通信。当串行口工作在方式2或方式3时,若串行控制寄存器SCON的多机通信控制位SM2由软件设置为“1”,则为多机方式;若SM2为“0”,则为9位异步通信方式。
在多机通信时,8051发送的帧格式是11位,其中第9位是SCON中的发送数据位TB8,它是多机通信时发送地址(TB8=1)或发送数据(TB8=0)的标志。串行发送时自动装入串行帧格式的相应位。在接收端,一帧数据的第9位信息被装入SCON的接受数据位RB8中,接收机根据RB8以及SM2的状态确定是否产生串行中断标志,从而可以响应或不响应串行中断,这样就实现了串行中断。
PC机的串行通信由接口芯片8250完成。它是一种通用的异步接受/发送器,是专门为了适用于Intel公司的微处理机的数据通信而设计的。它接受来自CPU的并行数据,然后将其转换为连续的串行数据,通过发送器的移位寄存器发送出去。虽然8250不具备多机通信功能也不能产生TB8或RB8,但可以灵活地使用8250,用软件完成上述功能。8250可以发送多种字长,其中一帧最长为11位,与8250发送的帧格式相比,差别仅在第9位,即PC机的 8250发送的第9位是奇/偶校验位,而不是相应的地址/数据位标志,可以采用软件编程的方法使8250的奇/偶校验位形成正确的地址/数据标志。
3﹒ PC机与8051的多机通信控制
虽然8250本身并不具备8051系列单片机的多机通信功能,但通过软件的办法,可使得8250满足8051单片机通信的要求。
8250的端口地址范围为3F8H~3FEH或2F8H~2FEH。其内部寄存器的端口地址见表1。
表1 8250内部寄存器的端口地址
序号 | 名称 | 端口地址 | 输入/输出形式 |
1 | 数据发送保持寄存器 | 3F8H | 输出 |
2 | 数据接受寄存器 | 3F8H | 输入 |
3 | 波特率因子寄存器(低位) | 3F8H | 输出 |
4 | 波特率因子寄存器(高位) | 3F9H | 输出 |
5 | 中断控制寄存器 | 3F9H | 输出 |
6 | 中断识别寄存器 | 3FAH | 输入 |
7 | 通信线路控制寄存器 | 3FBH | 输出 |
8 | MODEM控制寄存器 | 3FCH | 输出 |
9 | 通信线路状态寄存器 | 3FDH | 输入 |
10 | MODEM状态寄存器 | 3FEH | 输入 |
8250可发送11位数据帧,这11位数据帧由1位起始位、8位数据位、1位奇偶校验位和1位停止位组成,其格式如下:
起始位 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | 奇偶位 | 停止位 |
而8051单片机通信的典型数据格式为:
起始位 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | TB8 | 停止位 |
其中TB8是可编程位,通过使其为0或1而将数据帧和地址帧区别开来。
比较上面两种数据格式可知:它们的数据位长度相同,不同仅在于奇偶校验位和TB8。如果通过软件的方法可以编程8250的奇偶校验位,使得在发送地址时为“1”,发送数据时为“0”,则8250的奇偶校验位完全模拟单片机多机通信的TB8位。方法是把8250的通信线控制寄存器写入特定的控制字。
仔细研究串行卡的通信线控制寄存器3FBH的DS位功能可发现,在串行口初始化时设定3FB的D5=1,D3=1,而在发送地址时设置D4=0,在发送数据时设置D4=1,这样实现了8051中TB8的功能,不必每次都进行调整。这种方法不仅节省了软件开支,而且提高了通信速度。
通过对8250的线路控制寄存器(LCR)的设置,可使8250具有很大的灵活性。要使8250与8051实现多机通信,关键在于控制它的线路状态,使它的数据传输格式与8051保持一致。根据8250线路控制寄存器的结构特点,可以在编程中作如下选择:
若要求8250发送帧的奇偶校验位为1,只需要执行
MOV DX,3FBH
MOV AL,2BH
OUT DX,AL
这三条语句,此时帧格式为:
起始位 | D0 |
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)