单片机与PC机通信的方式有串行通信、并行通信。其中,串行通信具有硬件电路简单、软件实现容易和运行可靠等优点,十分适合对实时性要求不太高的场合。由于部分PIC单片机不具备串行通信所需的硬件USART口,故系统设计者需要用软件实现PIC单片机与PC机之间的串行通信。笔者介绍利用PIC单片机的中断功能实现异步串行通信的方法。
异步串行通信基本概念
异步串行通信字符格式如图1所示。通信线路上传送的每个字符包括1个起始位、5~8个数据位、1个奇偶校验位(可无)和1~2个停止位。每个字符的传送都是以起始位作为开始标志,紧跟其后的是要传送的数据(低位先传送),然后是奇偶校验位,最后是停止位。相邻字符之间的时间间隔即空闲时间可为任意长。线路空闲时应表现为“1”,当检测到“0”时,表示一帧字符的开始。
串行接口硬件电路
选用的单片机型号为PIC16C711,不具备硬件USART,需要用一般I/O口来模拟串行口。如图2所示,RB0为接收脚,RB5为发送脚。RB0除作为一般I/O引脚外,还可以作为外部中断输入引脚,引起中断的方式分为上跳沿和下跳沿2种方式。在本文中,设置下跳沿引起中断。当起始位到来时,RB0上出现下跳沿,引起中断,如果不是干扰信号则开始接收数据。
RS-485标准的特点是抗干扰能力强,传输速率高、传送距离远。它规定了双端(平衡式)电气接口特性。当单片机与具有RS-485接口的PC机通信时,需要进行信号形式的转换。从单片机发送到PC机的信号首先转换成平衡信号,再送往PC机。从PC机发送到单片机的信号先转换成非平衡信号,再输入单片机。信号形式的转换工作由RS-485接口芯片SN75176完成。SN75176差分总线收发器工作在半双工方式,当工作于发送方式时,发送使能引脚DE为高电平,接收使能引脚也为高电平。当工作于接收方式时,发送使能引脚DE为低电平,接收使能引脚也为低电平。这样,可以将DE与连接在一起,由RB6引脚输出控制信号, 控制SN75176的发送和接收使能。为了减少线路上信号的反射,需要匹配线路的特性阻抗。由于通信载体是双绞线,它的特性阻抗为120Ω左右,所以线路设计时,在RS-485网络传输线的始端和末端各应接1只120Ω的匹配电阻,R1为单片机一侧的匹配电阻。由于RS485芯片的特性,接收器的灵敏度为±200mV,即差分输入端VA-VB≥±200mV时,输出逻辑“1”;VA-VB≤200mV时,输出逻辑“0”。当︱VA-VB︱≤200mV时,输出不确定。因此,当A、B无信号输入时,可能造成接收引脚R上出现低电平,这会误认为通信帧起始位到来而引起工作不正常。为了避免这种情况发生,可以人为的让A端电位高于B端电位,使R引脚在RS485总线不发送期间呈现唯一的高电平,单片机不会被误中断而接收到乱字符。通过在A、B接上拉、下拉电阻R3、R2可解决这个问题。