C51单片机 串口通信RX&TX---适合初学

原料:keil、仿真软件、虚拟串口工具(群文件里的tools)vspdctl.dll记得覆盖
说明:串口中断允许位ES=1时,单片机一接收到数据或者发送数据就会进入串口中断函数(我认为是因为SBUF一有动静,便会触发到中断),所以单片机发送数据给上位机的时候,为了避免数据丢失,建议关闭串口中断ES=0。(这里看不懂,建议看完整篇文章,再回来看,应该看得懂了)

不要着急着操作,先粗略学习一下相关代码。
在文章后面会给出详细步骤和遇到的问题与其解决方案。

画图

C51单片机 串口通信RX&TX---适合初学_第1张图片

最简单的串口通信代码

*难解释。没了解单片机内部怎么运行,可能看不懂 *

#include 
#include 
sbit led=P1^0;
void initUart()//最最最基本的  *串口通信初始化*  要熟记
{
	//首先来个定时器1\工作方式2//0010 0000
	TMOD = 0x20;
	TH1 = 0xfd;//波特率9600/晶振11.0592Mhz
	TL1 = 0xfd;
	TR1=1;
	//串口工作方式1为最常用0101 0000
	SCON=0x50;
	//打开总中断
	EA=1;
	//允许串口中断
	ES=1;
	
}

void main()
{
	initUart();
	led=0;
	while(1);
}
//这里解释一下TI和RI:
/*TI为发送中断标志位,
TI=0时开始传送数据,
知道TI=1时结束,当TI一
直为1时就没法传送数据。


同样,RI为接收中断标志位,RI=0开始接收,RI=1接收完毕,不清零无法继续接收,
左移在下面的在中断要手动清零,让单片机可以开始接收下一次的数据*/
void intt() interrupt 4
{
	if(RI==1)//接收数据完毕
	{
		SBUF='1';
		led=~led;
		RI=0;
	}
	
}

C51单片机 串口通信RX&TX---适合初学_第2张图片

代码效果:电脑发送数据给单片机,单片机的SBUF接收到之后,触发了中断,中断函数开始工作,RI=1是因为SBUF接收完数据了,然后SBUF=‘1’,是将字符1传给SBUF,然后由SBUF发送给电脑,此时电脑收到1;led=~led:仿真软件里面的LED的在闪。
定时器的初始化知识就先不说了,有机会再说。记吧记吧记吧。

1、 不要将串口工作方式和定时器工作方式搞混了。

2、 为什么选择定时器1的工作方式2呢?
答:因为工作方式2有自动重装初值的功能,避免了通过程序反复装入初值而引起的定时误差,使得波特率更稳定。

3、 定时器与波特率有关。所以串口初始化一定要有定时器的存在,否则波特率都没有,怎么收发数据?
这里可以先硬性记一下定时器的初值TL1=0xfd,TH1=0xfd,对应的波特率是9600,要记住是因为这将是我们最常用的。

4、什么是SBUF?
SBUF通俗点说就是一个数据缓冲区,可接受数据,也可发送数据。
比如上面的SBUF=‘1’,就是把字符‘1’存到SBUF中,然后由单片机发给其他终端,比如我的电脑是接收方,则收到了数据1。

C51单片机 串口通信RX&TX---适合初学_第3张图片

虚拟串口

链接:虚拟串口工具
提取码:lj9t

打开虚拟串口工具,打开里面的vspd7.2.308.zip,然后一路next、next、next。安装完之后,记的把另一个不起眼的文件(vspdctl.dll)复制到安装目录下,覆盖原来的 打开就这个样(可能win10直接双击快捷方式打不开,右键管理员打开即可):

C51单片机 串口通信RX&TX---适合初学_第4张图片

点击添加虚拟串口后会产生两个COM,第一个用于串口工具,第二个用于单片机,比如我的虚拟串口是com1和com2,然后com1在串口工具那里选择,com2则在单片机的RS232那里选择

C51单片机 串口通信RX&TX---适合初学_第5张图片

具体操作

1画好线路图
2将c代码用keil生成hex文件
3在仿真软件里双击串口接口,设置好波特率为9600,设置好你电脑对应的第二个虚拟COM号
在这里插入图片描述
4打开电脑的串口工具sscom5.13.1.exe
选择串口(你电脑对应的第一个虚拟COM号)
5用串口工具发送数据
6此时你会发现单片机返回给串口工具的是一些乱码

C51单片机 串口通信RX&TX---适合初学_第6张图片
7那我们去改一下晶振,也就是晶振频率:双击单片机,讲12改为11.0592
C51单片机 串口通信RX&TX---适合初学_第7张图片
8重新来一遍发送数据,此时返回就正常了
C51单片机 串口通信RX&TX---适合初学_第8张图片

你可能感兴趣的:(物联网)