《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 通用串口适配器的设计与实现

通用串口适配器的设计与实现

2008-07-08
作者:王晓宁1, 谭业双1, 吕洪斌2

    摘 要: 介绍了基于单片机C8051F020的通用串口" title="串口">串口适配器的设计与实现方法。通过用C51语言对单片机进行编程,控制与RS-232(232电平)、RS-232(TTL电平)、422接口的数据通信;用C++ Builder作为开发平台,通过RS-232接口实现上位机" title="上位机">上位机对适配器各通信端口的控制。
    关键词: 适配器  串行通信  RS-232  C51

 

    串行通信的广泛应用使得各种传输设备可以有机地连成一体,能够安全可靠地进行数据交换和信息的传递。但是由于各设备传输信道上的信号不同,所应用的串口也各种各样,要完成众多设备间的通信,就必然涉及到各设备之间的串口转换问题。
    为了使计算机的RS-232口与各种不同的串口进行通信,从而测试或控制不同设备的工作状态,本文设计了一种通用串口适配器。该适配器有4个对外接口,1口连接控制计算机,2、3、4口可以连接不同标准串口的通信设备。其示意图如图1所示。

                   
1 硬件设计
    为了实现对适配器的自动控制以及方便扩展其他接口,适配器采用了C8051F020单片机系统。适配器所选主要芯片分别是C8051F020微处理芯片、电子模拟开关" title="模拟开关">模拟开关MAX4534芯片、MAX232电平转换芯片以及RS-485/RS-422信号的转换芯片MAX491。
    用C8051F020作为系统核心,整个系统的原理框图如图2所示。通过串口1控制从上位计算机串口发出的数据的接收、存储和判别,然后通过串口2控制电子模拟开关,使其内部的模拟开关接通相应的串口,最后实现计算机与各个串口的通信。

                     
1.1 与上位机通信电路
    C8051F020引脚的信号电平为TTL类型,而PC机串口的异步串行通信基于RS-232标准。两者通信信号的逻辑电平不一致,必须进行信号电平转换。为此,在电路中选用MAXIM公司的MAX232芯片,以实现TTL电平与RS-232电平的双向转换。
    MAX232芯片包含两路接收器和驱动器,适用于各种EIA-232C和V.28/V.24的通信接口。MAX232芯片内部有一个电源电压变换器,可以把5V电压变换成RS-232C输出电平所需的±10V电压。所以,采用此芯片接口的串行通信系统只需单一的+5V电源即可。
    串口通信的RS-232通信距离一般以不超过12m为宜,接口采用9针串口DB9,串口传输数据只要有接收数据针脚和发送针脚就能实现。
1.2 模拟开关控制电路
    该电路主要由芯片MAX4534(一对四)来完成。地址端A0和A1与单片机I/O" title="I/O">I/O端口相连,开关1、2、3、4分别与各测试设备的串口相连,其内部连接逻辑如图3所示。

                        
    当上位机与单片机实现握手之后,若选择与RS-422口通信,先发一个检测信号TEST,该信号经MAX232芯片电平转换后,送给单片机F020,单片机收到信号后,通过其I/O端口的P6.0和P6.1的输出状态分别控制开关MAX4534的地址端A0和A1。若A0和A1分别为0,则接通开关NO1,如表1所示,使得检测电路的MAX491接收端处于导通态,从而形成一个通路。此时单片机回发一个通路信号给上位机,当上位机收到通路信号后,MCU的串口TXD端就可以自由发送数据,从设备发来的回应信号也可以被MCU正常接收,从而完成整个通信过程。

                         
1.3 RS-232(TTL电平)接口电路的设计
    因为从单片机引脚出来的信号即为TTL电平,所以TTL电平的RS-232接口无需进行电平转换,直接通过模拟开关MAX4534与串口相连。
    对于五线RS-232接口,由于C8051F020串口只有两根线接RXD和TXD,RTS和CTS通过其两个I/O口来实现。
1.4 422口的转换电路设计
    RS-232串行接口属于个人计算机(PC)及电信应用领域中最为成功的串行数据标准;而RS-422串行接口则是工业应用领域中最为成功的串行数据标准,上述这些数据标准并不直接相互兼容。RS-422标准全称是“平衡电压数字接口电路的电气特性”,它定义了接口电路的特性。与RS-232不同,RS-422数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为A,另一线定义为B。通常情况下,发送驱动器A、B之间的正电平在+2~+6V,是一个逻辑状态,负电平在-2~-6V。RS-422的最大传输距离为4 000英尺(约1219米),最大传输速率为10Mbps,最多可接10个节点,具有单独的发送和接收通道,故无需控制数据方向。
    RS-232与RS-422之间的电平转换采用MAXIM公司生产的差分平衡型收发器芯片MAX491实现,它适合于RS-422/RS-485通信标准,包含1个发送驱动器和1个接收器。RE为接收器输入允许端,接地;DE为驱动器输出允许端,接+5V 的电压。单片机控制信号使MAX491接收端自动禁能,以免整个有线通信环路形成正反馈造成自激,而MAX491发送端则自由导通,控制信号正常输出。
2 软件编程
    软件程序主要包括:上位机可视化界面程序和单片机与PC串口通信程序。单片机采用C51语言编程,上位机的操作显示界面采用C++ Builder进行可视化编程。
2.1 上位机可视化界面编程
    以C++ Builder为开发工具,利用串行通信控件MSComm进行编程,实现对单片机的控制。本通信系统中规定的字符格式为:每一帧的数据占10位,其中1位起始位,8位数据位,1位停止位,无奇偶校验位。中间的8位数据位即为有效的通信传输字节。为了增强通信的可靠性、减少通信的误码率,双方的波特率设置为4 800bps,以较低速度进行通信。软件握手协议规定如下:PC机发送握手信号0xFF给单片机,单片机接收到的上位机数据若为握手信号0xFF,则回送一个正确信号060606给PC机,表示握手成功,PC机即可发送数据包,单片机经校验正确后将该数据包直接存储接收,并从中分解有效的数据信息;若单片机接收到的上位机数据不是握手信号,则回送一个错误信号151515,并继续等待。 人机界面如图4所示。

                             
    进入控制界面后,首先根据上位机与单片机的通信协议,选择串口号、通信波特率、奇偶校验位、数据位以及停止位。当上位机在界面的接口选项中点击要通信的串口时,就会触发一个传输信号给单片机,单片机根据协议控制电子模拟开关接通相应的串口电路,同时回发一个通路信号给上位机,从而使界面上的串口指示呈现绿色状态,表明通信电路已接通,可以开始发送和接收数据了。上位机通信流程如图5所示。

                             
2.2 单片机与PC串口通信编程
    在本设计中主要用到了单片机的定时器,I/O端口、UART、优先权交叉开关" title="交叉开关">交叉开关、中断设置、时钟信号、寄存器、D/A和A/D等。定义F020的UART0与计算机连接,UART1与各串口相连。首先优先权交叉开关译码器将交叉开关端口P0~3的引脚分配给UART0、UART1、/INT0 和/INT1。设置XBARE=1以使能交叉开关。UART0 有最高优先权,所以P0.0 被分配给TX0,P0.1 被分配给RX0;其次是UART1,P0.2 被分配给TX1,P0.3 被分配给RX1;P0.4 被分配给/INT0。由于外部存储器接口选在低端口(EMIFLE=1),所以交叉开关跳过P0.6(/RD)和P0.7(/WR)。又因为外部存储器接口被配置为复用方式,所以交叉开关也跳过P0.5(ALE)。下一个未被跳过的引脚P1.0 被分配给/INT1。将外部存储器接口配置为复用方式并使用低端口,将P1.2、P1.3 和P1.4 配置为模拟输入,以便用ADC1 测量加在这些引脚上的电压。
    当交叉开关配置寄存器XBR0、XBR1 和XBR2 中外设的对应使能位被设置为逻辑‘1’时,交叉开关将端口引脚分配给外设。将UART0 的TX 引脚(TX0,P0.0)、UART1 的TX 引脚(TX1,P0.2)、ALE、/RD、/WR(P0.[7:3])的输出设置为推挽方式,通过设置P0MDOUT=0xE5 来实现。通过设置P2MDOUT=0xFF、P3MDOUT=0xFF和P6MDOUT=0xFF 将EMIF 端口(P2、P3、P6)的输出方式配置为推挽方式。单片机通信主程序流程如图6所示。

                                    
    本设计在对其核心器件C8051F020编程和对硬件板调试时用到了Cygnal IDE Cygnal集成开发环境软件。Cygnal集成开发环境使用标准的Windows95/98/NT/2000作为界面,利用PC机的串行口和目标板的JTAG接口实现IDE与目标系统中的单片机通信(每套开发系统都有RS-232至JTAG协议转换所需的串行适配器),与目标系统连接后可进行非插入式、全速的在线调试并在系统内编程。在整个程序中,单片机的编程操作要完全符合时序规范要求,在实践中很好地实现了单片机控制PC与各串口的通信功能,各项指标达到了预先的设计要求。
    此外,该串口适配器可以很容易扩展其他接口的接入,可以用I/O口接数字接口,也可以通过单片机的A/D和D/A接模拟信号接口。若外围接口过多,则可以合并为一个或几个接口,只需在电路中加继电器(继电器受单片机的I/O控制)进行输出切换即可。
参考文献
[1] 潘琢金,施国君. C8051FXXX高速SOC单片机原理及运用[M]. 北京:北京航空航天大学出版社,2002.
[2] 扈啸. 单片机数据通信技术从入门到精通[M]. 西安:西安电子科技大学出版社,2002.
[3] 马忠梅,籍顺心,张凯.单片机的C语言应用程序设计(第三版)[M]. 北京:北京航空航天大学出版社,2003.
[4] 王修才,刘祖望.单片机接口技术[M].上海: 复旦大学出版社,2004.
[5] 垄建伟,熊光明. Visual C++/Turbo C串口通信编程实践[M].北京:电子工业出版社,2004.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。