随着计算机技术和测控技术的不断发展,在以单片机为核心的数据采集系统中,需要实现单片机和计算机之间的数据交换,以发挥单片机和计算机各自的长处、提升整个系统的性能价格比。在计算机网络和工业控制系统中,经常需要采用串行通信来实现远程数据传输。目前有多种接口标准可用于串行通信,包括 RS-232、RS-422、RS-485 等:RS-232 是最早的串行接口标准,在短距离、较低波特率串行通信中得到了广泛应用,但存在着传输速度慢、传输距离短、信号容易受到干扰等不足,其应用局限性已日益突出;而 RS-485 通信采用差分方式来消除噪声,即信号在发送前分解为正负两条线路,到达接收端时将信号相减,使噪声相互抵消、还原成原来的信号,这种方式对共模干扰抑制能力较强,已广泛应用于工业控制等领域。
要实现单片机与计算机之间的 RS-485 通信,一般可以采用 2 种方法:一种是在单片机与计算机两端分别采用 RS-232 与 RS-485 电平转换装置;另一种是采用 RS-485 通信卡,将其插在计算机主板上。前一种方法的优点是硬件装置安装简便、软件编程相对简单,缺点是通信速率被限制在 20 kb/s 以内;第二种方法的优点是通信距离较远、速率较高,可达 10 Mb/s,缺点是需要安装通信卡和驱动程序并进行必要的设置。本文采用第二种方法。
电路设计
系统采用 UART 串行总线进行通信,因为 UART 是一种广泛应用于远距离、低速率、低成本通信的串行传输接口,具有数据线少的特点,在数字系统设计中得到了大量应用。基本的 UART 通信只需要两根数据线(RXD、TXD)即可完成数据的相互通信,接收和发送都是全双工形式,其中 RXD 是接收端、TXD 是发送端。单片机与外部电路的连接关系如图 1 所示。

图 1 单片机与 RS-485 通信卡的连接电路
C8051F020 单片机有 2 个 UART(UART0 和 UART1),以 UART0 为例,它的 TxD 和 RXD 分别与数字 I/O 引脚 P0.0 和 P0.1 复用,通过交叉开关配置寄存器进行选择。由于 MAX485 工作在半双工状态,它与单片机连接时的接线比较简单,只需要用单片机某一个引脚(如 P0.2)来控制 RE 和 DE 这 2 个引脚。PCL-846B 通信卡有 4 个通道,选择通道 1 与单片机进行通信,另外将通道 2 和通道 4 进行连接,以自发自收的方式实现通信卡的自检。
在使用 RS-485 通信卡进行通信时,当信号传递到通信线路两端时,如果阻抗不匹配,可能会产生信号反射问题;信号反射会造成信号的失真和变形,从而导致通信错误。其解决方法就是在通信线路的两端各连接一个终端匹配电阻,保证阻抗匹配:当通信距离较短(一般小于 300 m)时,可不使用终端电阻;当通信距离大于 300 m 时,应当使用终端电阻,其阻值必须与通信线路的线性阻抗相同,电阻值一般选取 120 Ω 左右,当通信距离较长时可以选用 300 Ω。