51单片机串行通信(UART)

介绍:STC89C51RC/RD+系列单片机内部集成了一个全双工的串行口通信,有俩个互相独立的接收、发送缓存器,可以同时接受和发送数据。发送缓存器只能发送而不能接收,接收缓存器只能接收而不能发送,因为俩个缓存器共用一个地址(99H),所以俩个缓存器统称为串行口特殊功能寄存器SBUF。

一、寄存器介绍:该系列设有俩个控制寄存器:串行控制寄存器SCON和波特率选择特殊功能寄存器PCON。

1、串行控制寄存器SCON使用介绍:

      

 2、波特率选择特殊功能寄存器PCON(电源控制寄存器)使用介绍:

3、串口行数据缓冲寄存器SBUF介绍说明:数据的存放地址

               

4、与串口中断相关的寄存器IE、IPH、IP:

五、波特率介绍和计算方式:

介绍:串口通信的速率(发送和接收各数据位的时间间隔)

计算方式:

                                     Bd=1  /(定时器溢出率)÷  16

           如:某定时器溢出率为 13us,那么Bd=(1/13us) ÷ 16=0.00480749MHz=4807.69Mz

 二、串口中断结构和中断优先级:

                                                                   中断结构

                                                         中断优先级

三、寄存器配置:

代码:

void UART_Init()
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF3;		//设置定时初始值
	TH1 = 0xF3;		//设置定时重载值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时		
	//中断
	EA=1;       //启动所有中断
	ES=1;				//启动串口中断
}

四、通过SBUF接收和发送数据:

代码:

                                          接收:SBUF数据可从电脑获取(数据可由软件定义)

void UART_SendByte(unsigned char Byte)  //写入一个数据
{
	
	SBUF=Byte;
	while(TI==0);   //  TI:发送中断标志位
	TI=0;
	
}

                                             发送:电脑发送的数据可被SBUF获取

void UART_Routine()  interrupt 4  //发送数据是通过中断发送的
{
	if(RI==1)  //防止发的时候也进入中断  
		         //原因:接收完成和发送完成都会进入中断
	{
		P2=SBUF;   // 使P2获取发送的数据

		UART_SendByte(SBUF);
		RI=0;      //接收中断标志位
	}
	
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值