基于C8051F020的通用串口适配器的设计
扫描二维码
随时随地手机看文章
串行通信的广泛应用可使各种传输设备有机地连成一体,能够安全可靠地进行数据交换和信息传递。但是由于各个设备传输信道上的信号不同,所应用的串口也各种各样,要完成众多设备相互之间的通信,就必然要涉及到各个设备之间的串口转换问题。
为了使计算机的RS-232接口与各种不同的串口进行通信,从而测试或控制不同设备的工作状态,本文设计了一种通用串口适配器,适配器有4个对外接口,其中,1口连接控制计算机,2、3、4口连接不同标准串口的通信设备,如图1所示。
2 硬件设计
为了实现对适配器的自动控制以及扩展其他接口,采用了C8051F020单片机。适配器选用了C8051F020微处理器、MAX4534电子模拟开关、MAX232电平转换器以及RS-485/RS-422信号转换器MAX491等。
整个系统以C8051F020为核心,原理框图如图2所示。通过串口1控制从上位机串口发送的数据的接收、存储和判别,然后通过串口2控制电子模拟开关,使其内部的模拟开关接通相应的串口,最后实现计算机与各个串口的通信。
2.1 与上位机通信电路
C8051F020引脚的信号电平为TTL类型,而PC机串口的异步串行通信基于RS-232标准。两者通信信号的逻辑电平不一致,必须进行信号电平转换。因此,选用Maxim公司的MAX232实现TTL电平与RS-232电平的双向转换。
MAX232包含两路接收和驱动器,适用于各种EIA-232C和V.28/V.24的通信接口。该器件内置一个电源电压转换器,可将5 V电压转换成RS-232C输出电平所需的±10 V电压。所以,采用此器件的串行通信系统只需单一的+5 V电源。
串口通信的RS-232通信距离以不超过12 m为宜。接口采用9针串口DB9,串口传输数据只要有接收数据引脚和发送引脚就可实现。 2.2 模拟开关控制电路
该控制电路主要由MAX4534(一对四)完成。地址端A0和A1与单片机I/O端口相连,开关1、2、3、4分别与各测试设备的串口相连,MAX4534的内部连接逻辑如图3所示。
当上位机实现与单片机的握手后,若与RS-422口通信。则需先发送一个检测信号TEST,该信号经MAX232电平转换后,送至单片机C8051F020,单片机接收到信号后,通过其I/O端口P6.0和P6.1的输出状态分别控制开关MAX4534的地址端A0和A1。若A0和A1均为0,则接通开关NO1,如表1所示,使检测电路的MAX491接收端处于导通状态,从而形成通路。此时单片机回发一个通路信号给上位机,当上位机接收到通路信号后,MCU的串口TXD端就可自由发送数据,从设备发来的回应信号也可以被MCU正常接收,从而完成整个通信过程.
2.3 RS-232(TTL电平)接口电路设计
因为从单片机引脚出来的信号为TTL电平,所以TTL电平的RS-232接口无需进行电平转换,可以直接通过模拟开关MAX4534与串口相连。
对于五线RS-232接口,由于C8051F020串口只有两根线连接RXD和TXD,RTS和CTS通过其两个I/O口实现。
2.4 RS-422接口的转换电路设计
RS-232串行接口属于个人计算机(PC)及电信应用领域中最为成功的串行数据标准;而RS-422串行接口则是工业应用领域中最为成功的串行数据标准。上述这些数据标准并不直接相互兼容。RS-422标准全称为"平衡电压数字接口电路的电气特性",它定义了接口电路的特性,与RS-232不同,RS-422数据信号采用差分传输方式,也称作平衡传输,它使用一对儿双绞线,将其中一条线路定义为A,另一条线路定义为B。通常情况下,发送驱动器A、B之间的正电平为+2 V~+6 V,是一个逻辑状态;负电平为-2 V~-6 V。RS-422的最大传输距离为4000英尺(约1 219 m),最大传输速率为10 Mb/s,最多可接10个节点,具有单独的发送和接收通道,故无需控制数据方向。
RS-232与RS-422之间的电平转换由Maxim公司的差分平衡型收发器MAX491实现,它适用于RS-422/RS-485通信标准,内部包含1个发送驱动器和1个接收器。RE为接收器输入允许端,接地;DE为驱动器输出允许端,接+5 V电压。单片机控制信号使MAX491接收端自动禁能,以免整个有线通信环路形成正反馈造成自激,而MAX491发送端则自由导通,控制信号正常传输。
3 软件编程
软件程序主要包括上位机可视化界面程序和单片机与PC串口通信程序。单片机采用C51语言编程,上位机的操作界面程序采用C++Builder进行可视化编程。
3.1 上位机可视化界面编程
以C++Builder为开发工具,利用串行通信控件MSComm进行编程,实现对单片机的控制。本通信系统中规定的字符格式为:每一帧的数据占10位,其中,1位起始位,8位数据位,1位停止位,无奇偶校验位。中间的8位数据位即为有效的通信传输字节。为了增强通信的可靠性、减少通信的误码率,双方的波特率设置为4 800 b/s,以较低速度进行通信。软件握手协议规定如下:PC机发送握手信号0xFF给单片机,单片机接收到的上位机数据若为握手信号0xFF,则回送一个正确信号060606给PC机,表示握手成功,PC机即可发送数据包,单片机经校验正确后将该数据包直接存储接收,并从中分解有效的数据信息;若单片机接收到的上位机数据不是握手信号,则回送一个错误信号151515,并继续等待。人机界面如图4所示。
进入控制界面后,首先根据上位机与单片机的通讯协议,选择串口号、通讯波特率、奇偶校验位、数据位以及停止位。当上位机在界面的接口选项中点击要通信的串口时,就会触发一个传输信号给单片机,单片机根据协议控制电子模拟开关接通相应的串口电路,同时回发一个通路信号给上位机,从而使界面上的串口指示呈绿色状态,表明通信电路已接通,可以发送和接收数据。上位机通信流程如图5所示。
3.2 单片机与PC串口通信编程
在本设计中主要用到单片机的定时器、I/O端口、UART、优先权交叉开关、中断设置、时钟信号、寄存器、D/A和A/D等。定义C8051F020的UART0与计算机连接,UART1与各串口相连。首先优先权交叉开关译码器将交叉开关端口P0~P3的引脚分配给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所示。
4 结束语
在对核心器件C8051F020编程和对硬件板调试时采用Cygnal IDE Cygnal集成开发环境软件。Cygnal集成开发环境采用标准的Windows95/98/NT/2000作为界面,利用PC机的串行口和目标板的JTAG接口实现IDE与目标系统中的单片机通信(每套开发系统都有RS-232至JTAG协议转换所需的串行适配器),与目标系统连接后可进行非插入式、全速在线调试和在系统内编程。
此外,该串口适配器很容易扩展其他的接口,可用I/O口接数字接口,也可以通过单片机的A/D和D/A接模拟信号接口。若外围接口过多,则可以合并为一个或几个接口,只需在电路中加继电器(继电器由单片机的I/O控制)进行输出切换即可。