用Proteus在51单片机进行串口连接

控制/MCU

1878人已加入

描述

有事耽搁了几天,今天断续学习。

串口的理论知识我就不记了,网上多的是。51单片机的串口,有4种方式,分别为方式0,方式1,方式2,方式3.由于我的目的,使用串口主要是为了和电脑进行通信,所以主要使用方式1(事实上我也只学了方式1,其他方式等用到的时候再学吧)。

串口的方式1,其波特率与定时器T1相关,公式如下:

方式1波特率 = (2SMOD×32)/(T1溢出率)

SMOD是一个寄存器,一般我们就取0了

T1的溢出率,即每秒T1计数满几次(相关知识可以看看前面笔记的记录)

正是因为如上的公式,所以设置TH1和TL1的初值,就能控制方式1的波特率了。不过一般波特率是固定的那么几种,像2400,4800和9600等,要用的时候查一下初值就成了。

由于用的是Proteus来模拟串口(我的笔记本电脑根本没串口),所以需要一个虚拟串口的软件。推荐使用的是Visual Serial Port Driver,用起来非常的简单,直接点击Add Pair就成了,会自动增加一对串口,模拟的时候,分别连接这两个端口就成。添加好后,可以把这个程序关闭,端口仍旧可以使用。

单片机

要说一下的是,这软件是一个收费软件(能免费使用14天),所以,如果只想学习一下串口的话,我们就自私一下吧,不购买了,直接使用一个控制软件时间的软件(比如Run As Date),让程序以为时间一直没变,就能一直试用了……

要试验一下Proteus是否可以进行串口连接,可以直接打开安装目录下的SAMPLESInteractive SimulationCOMPIM Demo,设置好波特率等参数后,使用“串口调试助手”,向Proteus发送数据,看看能否接收到。

单片机

运行后的效果:

如果像上图一样,在“助手”中输入数据,可以在Proteus的虚拟终端中接收到,说明可以进行串口的仿真了。如果不能接收,则需要检查一下,波特率等参数是否设置的一致,特别是串口,要设置的“成双成对”,如从“串口助手”的COM1发送到Proteus的COM2

------------------------------------------------------------------

开始进入实际编码,我希望写一个上位机程序,来控制单片机,单片机很简单,就是从P2口,接8个LED灯,而上位机程序则可以控制灯的亮或者暗,原理图如下:

实物做的时候,由于电脑的串口和单片机的串口电平不同,需要使用MAX232芯片做电平转换,但是这里是模拟,就不加芯片了,同样能正常运行。加上虚拟终端,是为了直接看到接收到的数据,方便调试。

上位机程序如下图,使用C#编写,编程工具是VS 2008,因为用的是最简单的语法,所以是基于.NET 2.0写的。

上位机写的特别简单,选择好端口后连接,然后控制单片机。可以做到控制任意灯的开和关,下面的控制则可以做到全开或全关,流水灯则是让单片机演示一次流水灯(演示期间不再接受上位机控制)。上位机的控制代码特别简单,就是给单片机发送一个8位的byte(这个花了我很多时间,因为单片机上的char是8位的,我自然而然的把C#上的char也当成是8位了,结果就是发给单片机的时候会出现错误,感谢群里大虾的热情帮助)。控制格式如下(最低位为第0位):

位数 作用
0 表示选择第几个灯,0001表示选择第1个灯,0101表示选择第5个灯,当第5,6,7位任意位为1时,则无效
1
2
3
4 表示选择的灯是开还是关,1表示开
5 1表示流水灯
6 1表示全灭
7 1表示全开

数据位从高位检查起,所以如果第7位为1 ,则后面几位不管设置成什么,都会是灯全开的效果。

单片机程序和上位机程序都写得很简单,里面有详细注释,应该一看就能明白了。演示效果如下(录制的不是很流畅……):

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
一路走来有点醉 2019-04-23
0 回复 举报
PC与单片机并口通信怎么连接呢? 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分