51串口通信测试(复习总结)

该知识点来源于B站知弦本章便是对其串口通信应用的简单总结!!!

一、串口通信

如下图,51与外部进行串口通信时,

51TXD接外设RXD,51RXD接外设TXD

串口数据都放在SBUF中,通过TI与RI控制发送与接收数据

TI=0:准备(正在)发送,TI=1,发送完毕;RI=0 :准备或正在接收,RI=1:接收完毕。

 二、串口寄存器配置

如下面两张图,

SM0、SM1为配置模式,SM2为多机位(一般为0),

REN为允许接收(一般为1)

TB8/9一般为0,

TI与RI为0(初始化为0才能接收或发送)

由此,假设我们选择方式2可以这么设计 :

SCON=0x50;//0101 0000

 

 三、SMOD

四 、通信方式

在SM0、SM1为0、1时,为8为异步通信方式

下图有其对应的波特率设置公式,若我们设置9600波特率,SMOD=0

那么根据公式有

T1=256-11095200*2^0/(12*9600*32)

     =256-3

      =0xfd

则TH、TL代码为:

TH0/1=0xfd;//   0/1:代表定时器0或1
TL0/1=0xfd;

 

 五、仿真与程序

仿真:仿真其实并不能真实反应通信结果

 程序:

#include "reg52.h"
unsigned int redat=0,flat=0;



void initscon()
{
	SCON=0x50;	//0101 0000:八位异步通信,可接收发送数据
	TMOD=0x20;// 00010 0000:定时器1	,模式2八位自动可重载
	TH1=0xfd;
	TL1=0xfd;
	ES=1;
	EA=1;
	TR1=1;
}

void send_out()
{
	SBUF=redat;
	while(!TI);
	TI=0;
}

void main()
{
	initscon();
	while(1)
	{
		if(flat==1)
		{
			send_out();
			flat=0;
		}
	}
}

void scon_isr() interrupt 4 //串口中断
{
	redat=SBUF;
	while(!RI);
	RI=0;
	flat=1;
}

六、实际测试

由于仿真并不能出结果,于是我便拿89c52RC实际测试通信,程序的功能为,串口助手发送什么,其接收到什么数据。

 下面两张图为不同串口助手的测试,结果为:串口程序调试成功!!!!

 

七、总结

 在51串口通信中:

配置好SCON后

再使用定时器配置波特率(波特率计算公式须记)

串口中断的编号为4

RITI可以灵活运用

!!!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值