您好,欢迎访问一九零五行业门户网

PIC单片机与PC机异步串行通信的设计

引言
因为具有运行速度快、低功耗、价格低、体积小等优点,microchip公司推出的pic系列单片机已经得到越来越广泛的应用。应用之一是作为下位机与上位机(例如pc机)通信,它被广泛应用在工业控制、数据采集和检测等领域中。单片机与pc机通信的方式有串行通信、并行通信。其中,串行通信具有硬件电路简单、软件实现容易和运行可靠等优点,十分适合对实时性要求不太高的场合。由于部分pic单片机不具备串行通信所需的硬件usart口,故系统设计者需要用软件实现pic单片机与pc机之间的串行通信。笔者介绍利用pic单片机的中断功能实现异步串行通信的方法。
异步串行通信基本概念
异步串行通信字符格式如图1所示。通信线路上传送的每个字符包括1个起始位、5~8个数据位、1个奇偶校验位(可无)和1~2个停止位。每个字符的传送都是以起始位作为开始标志,紧跟其后的是要传送的数据(低位先传送),然后是奇偶校验位,zui后是停止位。相邻字符之间的时间间隔即空闲时间可为任意长。线路空闲时应表现为“1”,当检测到“0”时,表示一帧字符的开始。
图1异步串行通信字符格式
串行接口硬件电路
选用的单片机型号为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可解决这个问题。
图2pic16c711与pc机之间的接口电路
单片机通信程序框图
单片机与pc机之间的通信方式为半双工方式。一帧数据包括一位起始位、8位数据位、一位停止位和无奇偶校验位。设发送和接收数据的波特率为9600b/s,则每一位占用的时间td为1/9600s,约为104μs。单片机晶振频率为4mhz。单片机执行一条指令耗费时间1μs。
单片机接收数据程序框图
pic16c711单片机的rb0引脚具备外部引脚跳变沿中断功能,向rb0引脚送一个上跳沿或下跳沿信号,则intcon寄存器的外部引脚跳变沿中断标志位intf被置1。如果总中断和外部引脚跳变沿中断都使能,并且此时单片机没有执行其他中断服务子程序,程序进入int中断服务子程序。根据异步串行通信的特点,通信线路空闲时单片机接收的是高电平,起始位到来时单片机接收到低电平,因此空闲位和起始位之间是一个下跳沿。单片机接收到下跳沿即起始位后,马上进入中断服务子程序,准备接收一帧数据。因此在主程序中设置由下跳沿引起外部引脚跳变沿中断。以下内容主要分析接收子程序即中断服务子程序。单片机接收数据程序框图如图3所示。进入中断服务子程序后,首先保护中断现场,然后检测起始位是否是“真的”。由于可能存在的各种干扰,单片机有可能接收到的干扰信号正好是一个下跳沿,而实际上此时根本没有数据到来,从而造成误接收数据。因此检测起始位的真实性是有必要的。采取的方法是在52μs(起始位的中点)后,检测一次rb0上的信号。程序框图中是延时47μs后检测rb0上的信号,原因是保护中断现场的几条指令要耗费几个μs。如果是低电平,则起始位是“真的”,否则为干扰信号,单片机清intf标志位,然后退出中断服务子程序,回到主程序。若起始位是“真的”,则准备接收数据。本文规定数据位为8位,故首先设置接收计数器r_cnt内容为8。然后将status寄存器中的c位清零,并右移接收数据寄存器rcv_r。c的内容即0移入rcv_rzui高位,接下来接收数据位。
为尽量保证数据的准确性,应该在每位数据的中点检测该位数据。因此,检测*位数据的时刻距离检测起始位的时刻应该是一位数据所占的时间即104μs,此后的每一位数据检测时刻之间也是如此。此时又要用到延时程序。因为每两次检测时刻之间除了延时之外,指令(c清零、右移等指令)还要占用时间,这些指令占用5~6μs,因此,为了尽量保证在每一位的中心位置检测数据,延时时间定为98μs。如果检测得到的数据位为1,则置rcv_rzui高位为1。如果数据位为0,则不必改变zui高位,因为c为0且已经移入rcv_r的zui高位。然后,将接收计数器内容减1。8位数据接收完毕后,清intf标志。zui后,退出中断服务子程序。至此,8位数据接收全部存放于rcv_r中。
图3单片机接收数据程序框图
单片机发送数据程序框图
用rb5引脚作为发送引脚,单片机发送数据程序框图如图4所示。当有数据要从单片机发往pc机时,单片机调用发送子程序。在发送子程序中,首先设置发送计数器内容为8,然后发送起始位,起始位应持续104μs。因此要调用延时子程序,延时子程序执行完后,rb5上的信号并未立刻变成*位数据的值,这是因为还要执行几条指令,如右移trs_r、置位等rb5上的信号才会变化。假设延时104μs,那么加上几条指令的执行时间,起始位就比104μs宽了。因此,延时子程序少于104μs,根据具体的程序定为97μs。然后,右移发送数据寄存器trs_r,将其zui低位即要发送的数据位移入c中,再根据c中的内容将rb5清零或置1,然后将发送计数器内容减1,并判断其是否为0。若为1,则说明未发送完毕,继续发送;否则,发送停止位。zui后,退出发送子程序。
图4单片机发送数据程序框图
pc机通信程序
vb6.0提供了串行通讯mscomm(盒)控件来为应用程序提供串行通信,它将串口设备当作一个目标封装起来,容易操作,编程很方便,其良好的用户界面、简单方便的串行通信和实用性强的优点,无需借用其他语言就可以开发出的通信软件,因而pc机软件采用vb6.0语言编写。
mscomm控件的调出及其主要属性如下。
(1)mscomm控件的调出
vb6.0的mscomm控件并不会主动出现在工具箱中,当需要它时,让它出现在工具箱中的步骤如下:
①选择菜单上的“工程”;
②在“工程”菜单中选择“部件”;
③出现对话框后,在可勾选的项目中勾选microsoftcommcontrol6.0;
④按下“确定”按钮,即可在工具箱中见到“盒”的图标,就可以将此控件加载进行串行通信。
(2)mscomm属性
mscomm属性很多,其重要的属性说明如下:
①commport:设定或返回通信端口号。端口号由1开始往上递增,zui大值是16。
②settings:设定通信端口初始化参数。其格式为“baud,p,d,s”,其中baud为波特率,可设为1200、2400、9600、14400、19200和28800等几种;p为校验位(e表示偶校验、o表示奇校验、m表示符号校验(即在校验位放置一个1的位)、s表示空白校验(即在校验位放置一个0的位)、n表示无校验位(默认值));d为数据位数,可选值为4、5、6、7、8(默认值);s表示停止位数,可选值为1、1.5、2。
③portopen:设定并返回通信端口的状态。
使用串行端口之前必须先打开该端口(portopen=true),而在使用完毕后必须关闭该端口(portopen=false)。
④input:从输入缓冲区返回并清除字符。这是一种fifo(firstinfirstout)机制。如buffer$=mscomm1.input,表示将输入缓冲区的字符读入buffer字符串变量中。
⑤output:将一个字符或字符串写入传输缓冲区,如mscomm1.output=“abcd”。此即将abcd4个字符通过串行端口传送出去。
⑥inbuffercount:传回在接收缓冲区中的字符数,是指已接收,并在接收缓冲区等待读取的字符数。
⑦inputmode:设定和返回类型。该属性设为0时,数据通过input属性以文本方式取回,如设为1,则数据通过input属性以二进制方式取回。
结论
利用pic16c711的外部中断输入引脚rb0/int接收数据,避免了查询法带来的耗费大量系统资源的缺点。pic系列单片机执行指令的速度快,提高了系统效率。pic16c711内部无硬件uart,本文用软件模拟它与pc之间的串行异步通信,从而降低了硬件成本。vb具备mscomm(盒)控件,实现串行通信非常方便。
其它类似信息

推荐信息