串口的理论常识我就不记了,网上多的是。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是否能够进行串口衔接,能够直接翻开装置目录下的\SAMPLES\Interactive Simulation\COMPIM 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表明开
51表明流水灯
61表明全灭
71表明全开
数据位从高位检查起,所以假如第7位为1 ,则后边几位不论设置成什么,都会是灯全开的作用。
单片机程序和上位机程序都写得很简略,里边有具体注释,应该一看就能理解了。演示作用如下(录制的不是很流通……):