《单片机串口通信的调试方法与技术.docx》由会员分享,可在线阅读,更多相关《单片机串口通信的调试方法与技术.docx(11页珍藏版)》请在三一办公上搜索。
1、单片机串口通信的调试方法与技术单片机串口通信的调试方法与技术 摘 要:基于实际的教学和工程经验以及现代先进的软件技术,对单片机技术中经常用到的串口通信方法、串口的调试技术以及常见的问题进行了归类分析与总结,并提出相应的研究解决方法和参考实例。 关键词:单片机;串口;调试;仿真 中图分类号:TN915 文献标示码:A 引言 单片机的串行口在单片机的日常教学实践和实际的工程技术中,应用十分普遍,串口通讯在智能化产品中的技术地位十分重要,这使得单片机借助于RS232、RS485、CAN等总线技术可以与其它单片机、PC机、智能人机交互工具如触摸屏、TC35手机模块等组成小型的智能控制有线或无线网络。因
2、此对单片机串行通信相关问题的调试在所难免。 1 传统的串口调试方法 通常的调试方法如图1所示,是将一个独立的单片机系统采用RS232总线在经过电平转换后连接到PC机的COM1或其它串行端的DB9接口,然后借助于安装在PC上的串口调试工具例如串口调试助手软件,对数据格式和波特率进行设置以后就可以进行调试。 GND RXD TXD 单片机 GND MAX232 电平转换 TXD RXD 电脑串口 a 电气连接 b 串口调试助手 图1 单片机串行口的传统调试方法 这种方法的好处是“真刀真枪”,能够锻炼实际的动手操作能力,能够实时获悉电路实际的工作状况。但这种方法的缺点也十分明显。首先要想用串口就必须
3、具备一个完整的单片机系统、专用的串口线,硬件成本比较高;其次,实际调试起来还要在单片机与PC机之间频繁地插接,操作比较繁琐也费时费力;再者,如果单片机系统电路有故障或者操作不当产生的电源短路很容易烧坏计算机上的串口控制器芯片组。在实际当中笔者的许多同事和学生就有过这种遭遇,这会给我们带来不必要的麻烦。 另外对于笔记本电脑用户来说,通常情况都没有串行口,如果要调试串行口就必须借助于USB端口,使用USB转串口的接口电路扩展出一个串行口,这样的串行口必须安装相应的驱动程序,它根据用户每次使用的不同USB接口扩展出端口号不同的串行口。当然,可以在电脑的设备管理器中查询COM端口号,但这样的办法成本更
4、高而且使用起来也不方便。 2 借助软件技术调试串口 在对串行口的学习和实际的工程测试中,单片机硬件电路往往并不是必须的,也不是学习和技术应用的重点,要解决的关键问题通常是对串口通信协议和数据的交互进行编程和测试。可以采用虚拟串口技术,不使用硬件照样可以又好又快地达到学习或者测试的目的,把 1 硬件成本和损失降到最低,也可以解决电脑的串行端口不够用的问题,因为理论上这种方法可以虚拟出无数多对串行口1。 2.1 电脑串行口的扩展 使用Virtual Serial Port Driver或者类似的其它软件可以扩展出无数对的RS232串口,这些端口是可以在单片机仿真软件或其它软件中随意使用的。如图2所
5、示,COM1和COM2是电脑中原有的两个物理端口,COM3和COM4是虚拟出来的一对端口,即COM3和COM4是连接在一块的。使用的时候如果一个单片机使用COM3,另一个单片机或者串行口调试助手使用COM4,只要它们之间数据格式和波特率一致就可以互相通信了,使用起来和实际的COM1完全一样。 2.2 单片机串口仿真软件的选择 单片机技术发展到现在,出现了各种各样的单片机编程和仿真软件,如Keil、Multisim、图2软件虚拟出来的串口对 AltimDesigner、Proteus等。这里选择性能比较好的Keil与Proteus联合方式,进行的单片机串行口的学习和调试。 Keil是美国Keil
6、 Software公司出品的51系列单片机软件开发系统,Keil软件全Windows界面,生成的目标代码效率非常高2。Proteus软件是来自英国Labcenter electronics公司的EDA工具软件,是目前最好的单片机及其外围器件的仿真工具,它可以仿真MCS-51系列、PIC 、AVR等常用的MCU 及其外围电路3。 2.3 串口学习与调试的现代方法 U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A1
7、3P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161710018LED-BIBYXTAL2VCCR1D19RST293031PSENALEEAP116273849DCDDSRRXDRTSTXDCTSDTRRI a Proteus仿真串口 b COMPIM设置 图3 单片机串行口的仿真与调试 除了前面所讲的传统调试串行口的方法,下面的串行口实例和分析是基于上文用Virtual Serial Port
8、 Driver扩展出多对个虚拟串行口的基础上,例如扩展出了COM3和COM4串行口对,采用Proteus V7.4 SP3、KEIL uVision3 软件和C语言来进行。 首先安装好Proteus V7.4 SP3和KEIL uVision3软件,并对他们进行设置达到可以联合调用和仿真单片机程序。 其次,在Proteus软件中建立起一个单片机系统,如图3所示,添加COMPIM接口部件并对其进行设置,如选择COM3,波特率设置为9600-8-1-NONE模式。该虚拟电路结构简单,使用灵活,甚至不需要接电源、晶振,使用起来非常方便。因为虚拟的单片机和计算ERRORAT89C51COMPIM123
9、45678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7 2 机的串行口部件电平一致不需要加MAX232等电平转换芯片。 基于以上的软件选择和设置,对串行口的调试和使用还可以有以下几种情形: 1)串行口调试助手与串行口调试助手之间的通信。 这种方法通常在验证虚拟的串行口功能是否正常、练习串行通讯,或者进行串行口调试工具的相关参数设置时,在电脑上同时打开两个串行口调试助手软件,分别使用COM3和COM4,在设置好相应的波特率等参数后进行信息的传送,以达到熟练使用串行口助手软件的目的。 还用一种功能比较少用但却非常有用,它涉及到字符格式和16进制格式的信息转换问题。比如想得到一串
10、字符的unicode代码时,让串行口助手软件甲按字符格式发送,而让另一串行口助手软件乙按16进制格式显示,所见即所得,非常快捷。 2)虚拟的单片机与串口调试助手。 采用这种方法,可以练习使用单片机的串行口,或者调试人机交互的效果。在这种情况下,可以让虚拟的单片机使用图2中的COM3,调试助手软件使用COM4,其它的方法和步骤与传统方法完全一致,可以参考下面情形3的中断接收字节部分的代码,编译后下载到如图3a的单片机系统就可以与串行口调试助手交互通信,串行口调试助手发送一个数字,单片机就通过串行口接收并显示出来。 3)真实的单片机与虚拟的单片机间的通讯与调试。 这种方式显得尤为“神奇”,虚实结合
11、,传统技术与仿真技术结合,避免只依重于某一方面而忽视另一方面,顾此失彼,可以达到很好的锻炼学习和使用效果。因为要用到实际的单片机系统,所以虚、实两个串行口必须使用已有的物理串行口,比如COM1。图3所示的电路中的单片机就可以通过COM1口实现与外部单片机的信息交互。下面就简要介绍该种情况下的串行口的仿真与调试方法。 首先,按照图3a搭建虚拟的单片机系统,其中的COMPIM部件也设置为使用COM1,如图3b所示,并设置数据传送格式为9600-8-1-NONE;其次,按照图1a的连接方法把具有相同电路结构的外部单片机系统连接到计算机的COM1端口。 经过以上的设置后,外部的单片机可以发送数据(0-
12、9)到虚拟单片机并显示,也可以接收虚拟单片机发送的数据(0-9)并显示。将下面的代码编译生成BIN或者HEX类型的文件,分别下载到两个单片机运行就可实现这种功能。调试代码如下: #include #define uchar unsigned char #define uint unsigned int sbit led=P00; #define seg7_1 P1/发送显示数码管1 #define seg7_2 P2/接收显示数码管2 uchar code table= 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/0-9字型码 void
13、 delay1s(void) /延时大约1S unsigned char i,j,k; for(k=40;k0;k-) for(i=20;i0;i-) for(j=248;j0;j-); void Uart_SendChar(unsigned char dat) if(TI=1) /判断是否是发送中断 TI=0; /清除发送中断标志位 /发送一个字节 SBUF = dat; /待发送的数据写入缓冲区 while(!TI); /等待发送完成 TI = 0; /清零发送标志位 void ComBreak interrupt 4/中断接收字节 unsigned char RecvData; /定义接
14、收变量 if(RI=1) /判断是否接收数据 RecvData=SBUF; /接收数据 seg7_2=RecvData; /显示接收到的数据 RI=0; /清除接收中断标志位 3 void main/主程序 uchar n; TMOD = 0x20; /波特率发生器采用定时器1,方式2 TH1 = 0xfd; /波特率为9600bps TL1 = 0xfd; SCON = 0x50; /串口工作方式1,允许接收 TR1 = 1; /启动波特率发生器 IE = 0x90; /打开中断开关 while(1) for(n=0;n10;n+) /delay1s;在情形4中添加到甲或乙机 seg7_1=
15、 tablen;/显示发送的数据 SBUF=tablen;/把数字发往另一单片机 led=0; delay1s; led=1; delay1s; 实验现象:如图3a所示,系统上电后,单片机甲每隔1S钟向单片机乙发送0-9的数字,并在P1口的数码管1上显示,LED灯闪烁一次,同时使用中断方式接收乙发送来的字符并显示;单片机乙工作现象与甲类似;每发送或显示10个数据,循环往复1次。 发送显示4)多个单片机间的串行通讯与调试。 在实际的工程中可能会用到多个单片机系统,它们接收显示单片机-甲通过串行口组成一个小型的控制网络,进行数据同步和传输。而这样的实际电路系统比较复杂和庞大,连接和测试都不是很方便
16、,这时利用虚拟的串行口调试技术就显得十分必要和有效。可以先在Proteus中快捷地搭建出这样的系统,在进行通信仿真后再实地调试,事半功倍。发送显示如图4所示为双机系统通过网络标号串行连接,将情形接收显示单片机-乙3的代码编译下载到甲乙两块单片机中,就可循环收发和显示0-9数字。如图甲显示并发送5到乙,乙显示并发送9到甲。为了达到该图中的效果,可以在其中的一个单片机如甲的主程序中让其延迟1秒发送数据即可。 XTAL1U118XTAL29RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7100R1D1LED-BIB
17、Y293031PSENALEEAAT89C51P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A152122232425262728101112131415161712345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDRXDTXDXTAL1U218XTAL29RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P
18、0.7/AD7100R2D2LED-BIBY293031PSENALEEAP2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A152122232425262728101112131415161712345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDTXDRXD3结束语 图4 单片机间的串行收和发 借助先进的软件技术,来完成以往需要结合硬件电路来完成的串行口通信的调试工作,效率高,成本低,性价比高,风险低。实践证明在教学和工程应用中根据具体情况适当选择、组合使用起到了很好的教学和应用效果。 参考文献: 1 Virtual:Serial Port Driver 软件使用手册 2 Keil uVision 软件使用手册 3 Proteus 软件使用手册 VCC193938373635343332VCC1939383736353433324