首页 理论教育 零起点学Proteus单片机仿真技术实现PC与虚拟终端通信

零起点学Proteus单片机仿真技术实现PC与虚拟终端通信

时间:2023-11-06 理论教育 版权反馈
【摘要】:前面我们实现了单片机之间的串口通信。这一节我们介绍一下PC与单片机的串口通信,这里,PC用虚拟终端替代,虚拟终端是系统提供的虚拟仪器之一。图10-6 PC机与单片机通信虚拟终端的选择方法如图10-7所示。虚拟终端的RXD与TXD与单片机的RXD和TXD交叉相连。主程序开始进行了外部中断的设置、清空单片机端口和调用串口通信设置初始化子程序,在无限循环中的工作就是接收数据和显示数据。

零起点学Proteus单片机仿真技术实现PC与虚拟终端通信

前面我们实现了单片机之间的串口通信。这一节我们介绍一下PC(Personal Computer,个人计算机)与单片机的串口通信,这里,PC用虚拟终端替代,虚拟终端是系统提供的虚拟仪器之一。

PC与单片机串口通信最常用的方法就是用超级终端或串口调试软件实现,在PC端也需要设置波特率、数据位、停止位等参数与单片机设置的参数一一对应。首先,我们设计原理图,选择元器件见表10-4。

表10-4 选择元器件

978-7-111-36904-2-Chapter10-14.jpg

原理图如图10-6所示。

978-7-111-36904-2-Chapter10-15.jpg

图10-6 PC机(虚拟终端)与单片机通信

虚拟终端的选择方法如图10-7所示。

首先在模式工具栏选择“虚拟仪器模式”,然后选择“VIRTUAL TERMINAL”即可。虚拟终端的RXD与TXD与单片机的RXD和TXD交叉相连。

4位数码管接在单片机的P0口,片选线接在P2口的P2.0~P2.3。按键接在P3.2引脚,以便使用外部中断处理。

下面看一下对上述原理图的程序:

978-7-111-36904-2-Chapter10-16.jpg

978-7-111-36904-2-Chapter10-17.jpg

图10-7 选择虚拟终端

978-7-111-36904-2-Chapter10-18.jpg

978-7-111-36904-2-Chapter10-19.jpg

978-7-111-36904-2-Chapter10-20.jpg

这个程序的前面部分是定义,包括数码管码段表、变量的定义,和子程序的定义,有延时子程序、显示子程序、串口定义初始化子程序、发送字符串子程序。在程序最后还有一个外部中断处理子程序。

主程序开始进行了外部中断的设置、清空单片机端口和调用串口通信设置初始化子程序,在无限循环中的工作就是接收数据和显示数据。

与前面例子相同,判断是否接收到数据就是判断RI中断标志是否为1,若RI==1,就从缓冲区去数据dat=SBUF,并将RI清零,以便下次接收。随后通过调用显示子程序显示接收的数据display(dat)。

在串口通信初始化中,我们将波特率设置成9600,因此,在仿真运行前,需要将虚拟终端的属性也进行相应的设置。双击虚拟终端,如图10-8所示的方法设置属性。

978-7-111-36904-2-Chapter10-21.jpg

图10-8 虚拟终端属性设置

编译程序生成可执行程序,并将程序加入单片机中,运行仿真。要使虚拟终端弹出运行,还必须保证在仿真运行时,在右键单击虚拟终端弹出的菜单中选中“Virtual Terminal”,如图10-9所示。

978-7-111-36904-2-Chapter10-22.jpg(www.xing528.com)

图10-9 设置虚拟终端运行菜单

在虚拟终端仿真运行中,还可以设置其他参数,以满足各种需要,如图10-10所示。

978-7-111-36904-2-Chapter10-23.jpg

图10-10 虚拟终端的弹出菜单选项

以下分别对这些选项进行说明:

978-7-111-36904-2-Chapter10-24.jpg

首先,我们选择Echo Typed Characters,这样,当我们敲键盘字符时,就会在虚拟终端上显示出来,并发送给单片机,否则,就不会显示所敲字符,但仍然会发送。下面我们运行仿真,在终端上输入数字0~9,如图10-11所示。

978-7-111-36904-2-Chapter10-25.jpg

图10-11 在虚拟终端输入字符

我们在键盘上输入的字符与显示的字符是一致,但单片机上接收的数据却不一样,这是因为键盘上的所有字符都属于ASCII编码,传输以后还有一个转换的变化造成的。但接收的数据与输入的字符是一一对应的:

978-7-111-36904-2-Chapter10-26.jpg

可以看出,输入数字与接收数字差112,修改程序,将接收数据减去112就会使接收数据与输入数字一致。修改程序如下:

978-7-111-36904-2-Chapter10-27.jpg

再次运行仿真,如图10-12所示。

978-7-111-36904-2-Chapter10-28.jpg

图10-12 输入数字与接收数据一致

其实,可以通过上述程序,你可以测试出所有键盘字符的值,例如,回车是13,空格是96等等,从而可以用这些值判断用户从键盘上输入什么字符。

我们也可以将输入字符用十六进制显示,将虚拟终端的选项Hex Display Mode选中,当我们输入0~9时就会显示十六进制数字,如图10-13所示。

978-7-111-36904-2-Chapter10-29.jpg

图10-13 十六进制模式显示字符

现在,我们输入的字符显示的方式不同,在单片机方面接收的数据还是一样的。接着,我们来做一下单片机发送数据给PC的操作,通过按钮操作,发送一个字符串。这个字符串是程序中预先定义好的,当按钮按下时,就触发了一个外部中断,中断处理程序就发送了我们定义的字符串“123”,如图10-14所示。

这样,我们就实现了单片机与PC机通信的仿真。在实际程序设计中,数据转换的值会有所不同,其他都是一致的。

978-7-111-36904-2-Chapter10-30.jpg

图10-14 单片机向PC发送字符串

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈