MCS-51单片机串口通信程序调试方法
一概要由于传统的51单片机在线调试仿真器占用了51单片机的UART口导致在线仿真器无法实现对串口通信程序的debug的调试功能。本文介绍了Keil C51和Proteus联合调试的方式和Keil C51的simulation调试功能实现串口通信程序的debug调试两种不同的方法解决了传统的51单片机在线调试仿真器PZ-51无法对串口通信进行debug调试的问题。二实验环境Keil C51的版本为V9.60.7.0图1 Keil C51版本信息截图三实验内容本次实验使用单片机AT89C51的串口与Proteus的Virtual Terminal虚拟终端进行一个简单的串口通信实现的功能是让Virtual Terminal通过串口向单片机发送数据单片机接收到数据后经串口将数据发送到Virtual Terminal上显示。也可以使用Keil C51进行debug输入指令到命令窗口通过观察watch1的数组值能够知道指令已经发送到单片机中。Virtual Terminal如下图在使用前根据程序设计配置VIRTUAL TERMINAL的参数本实验使用的是12MHz的晶振波特率为4800串口工作于模式18位数据位1位停止位。Virtual TerminaVirtual Terminal参数设置四电路及程序1.电路如下图2.程序1主程序2UART.C3UART.H五虚拟仿真一采用Proteus和Keil C51联调的方法进行仿真串口通信1.Keil C51和Proteus要进行debug仿真实验需要先安装一个Keil Proteus联调插件。安装完成后需进行Keil C51选项设置需使用Proteus VSM Simulater。然后对Proteus在调试选项中选择启动远程编译监视器如下图所示。2.随后点击debug进行仿真实验先让程序全速运行起来然后会在proteus上面弹出终端虚拟显示窗口接着在虚拟终端窗口上输入不超过10个字符的字符串注意回车键按下也包括一个字符比如输入123这时候字符已经发送到AT89C51的RXD端存储在Rec_buf数组当中然后按下回车键单片机又会将接收到的数据123通过TXD端口发送回虚拟窗口Virtual Terminal上显示。仿真效果图如下图所示。3.用proteus进行串口通信时可以利用Keil C51的debug进行断点测试比如将断点设置在接收数据程序上面然后运行程序此时再在虚拟终端上输入数据123按下回车键不会再次在下一行显示123。然后此时可以在watch1上观察到只显示Rec_buf[0]的值为1所以要点击三次全速运行才能将输入的123数值全部显示在数组Rec_buf中。如下图所示。通过debug调试能够更加直观去知道一些数据的变化能够加快修改和优化代码。断点设置虚拟窗口显示Watch1显示数组数值二Keil C51simulation调试串口通信1.首先进行Keil C51的设置设置完成后点击debug然后可以在接收程序的Rec_buf[i] SBUF设置一个断点然后全速运行程序在command window命令窗口使用DIR VTREG命令查看UART接口的VTREG名称。SxIN VTREG表示微控制器片上串行端口的输入。所以在命令窗口里输入SIN1按下空格发送此时程序会跳转到断点处点击step over进行下一步程序此时可以通过watch1看到数组Rec_buf[0]的值为1。在command window命令窗口输入0X0D可以在UART#1看到1。仿真效果图如下图所示。Keil C51设置UART接口的VTREG名称断点设置输入指令Watch1显示数组数值串口显示六实验注意事项仿真开始VIRTUAL TERMINAL的界面如果没有出现可在proteus调试选项选择恢复弹出窗口。开始仿真时VIRTUAL TERMINAL不会显示我们输入的数据只会显示单片机返回的数据。如要显示右击VIRTUAL TERMINAL界面选中Echo Typed characters就会显示我们输入的数据了。七实验总结通过本次实验我们深入了解了串口通信的基本原理、协议及实现方法。实验中我们成功实现了串口通信并验证了程序的正确性。同时在解决实验中出现的问题时学会如何改善程序和调整电路参数提高了实际应用能力。