C51单片机学习笔记之串口通信

简介

串口通信就是单片机和pc之间的一种通信方式。

通信方式:并行,串行,同步,异步(最常用的)

传输方向:单工,半双工(不同时间),全双工

基本结构

相关寄存器

SCON串口控制寄存器(主要用方式1)

D7D6D5D4D3D2D1D0
符号SM0SM1SM2RENTB8RB8TIRI
多机通信控制位允许接收位是要发送的第9位数据位接收到的第9位数据位发送中断标志位接收中断标志位
主要用于方式2,3中1允许接收
0拒绝接收

TB8——在方式2和方式3中,TB8是要作为数据帧第9位被发送出去的,在多机通信中,可用于判断当前数据帧的数据是地址还是数据,TB8=0为数据,TB8=1为地址 

RB8——当单片机已经接收一帧数据帧时,会把数据帧中的第9位放到 RB8中。方式0不使用RB8,在方式2和方式3中,RB8为接收到的数据帧的第9位数据位。

TI——方式1、2、3中。当发送数据完毕,硬件会将其置1,当 TI 被置1,会向CPU发送中断请求。我们记得要在中断服务程序中把 IT 置回0

RI——当接受完一帧数据时,RI  由硬件置1,当RI 被置1,会向CPU请求中断。同样要在中断服务程序中把 RI 置回0。

SM0SM1工作方式功能波特率
00方式08位同步移位寄存器晶振频率 / 12
01方式110位UART可变
10方式211位晶振频率/32或晶振频率/64
11方式311位可变

PCON功率控制寄存器

D7D6D5D4D3D2D1D0
PCONSMOD

这个寄存器只有一个位SMOD,在方式1,2.,3时,波特率都与SMOD有关,当SMOD=1时,波特率会增加一倍。复位时,SMOD变回0。

SBUF寄存器:51单片机中的特殊寄存器,串行数据缓冲器(一个接收一个发送),两个其实是共用的一个地址99H,但是两个在物理上面是分开的。
当发送使用时,就采用SBUF=XXX;  (XXX为需要传送的数据)
当接收使用时,采用XXX=SBUF;
记得因为是串行的所以传输都是一位一位进行的。

波特率计算 

 

 代码部分

#include <REGX52.H>
#include "delay.h"
#include "DigitalTube.h"
void init()
{
		SCON=0x50;//配置寄存器
		PCON=0;//波特率不加倍

		TMOD |=0X20;//定时器选择工作模式2
		TH1=TL1=0xfd;//波特率9600
   	EA=1;//中断打开
	  ES=1;//接受中断
		ET1=1;//定时器中断关闭
   	TR1=1;//定时器开关打开
}
void UART_SendByte() interrupt 4
{

	unsigned char date;	//定义一个数据
	delay();
	date = SBUF;//pc发送数据
	RI = 0;	//接收关闭
	print(date/10,1);//控制数码管
	print(date%10,2);
	SBUF = date;//pc接收数据
	while(!TI);//判断发送是否关闭
	TI = 0;//发送关闭
}

 结论

代码部分我只给了中断配置及串口通信的代码,其余大家自由发挥。本章重点是搞清楚串口通信的寄存器配置,波特率的计算,以及与之前中断、定时器相关知识相结合。——中断——定时器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值