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

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

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

画图

在这里插入图片描述

最简单的串口通信代码

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

#include <reg52.h>
#include <stdio.h>
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;
	}
	
}

在这里插入图片描述

代码效果:电脑发送数据给单片机,单片机的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。

在这里插入图片描述

虚拟串口

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

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

在这里插入图片描述

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

在这里插入图片描述

具体操作

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

在这里插入图片描述
7那我们去改一下晶振,也就是晶振频率:双击单片机,讲12改为11.0592
在这里插入图片描述
8重新来一遍发送数据,此时返回就正常了
在这里插入图片描述

  • 11
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值