基于Proteus的51单片机学习笔记之串口的使用

串口是在单片机中用的比较多的通信方式,下面废话不多说直接上代码。

#include "reg52.h"
#include "uart.h"
/******************/
/*	函数名:void UART_Init()	
 *	日期:2021/4/24
 *	参数:无 	 	
 *	功能:串口初始化
 *     		设置波特率为9600,使用定时器1,晶振频率11.0592Mhz
 *	例子:
/*****************/
void UART_Init()
{
	//设置波特率9600
	TMOD |= 0x20; //定时器1工作于自动重装载模式
	TH1 = 0xfd;
	TH0 = 0xfd;
	TR1 = 1;	  //启动定时器1
	ET1 = 0;	  //禁止定时器1中断
	PCON &= 0x7f; //设置SMOD=0,波特率不加倍
	SCON = 0x50;  //工作于方式1  8位无校验异步通信的收发模式,并清空收发中断标志位
	EA = 1;		  //总中断允许
	ES = 0;		  //禁止串口收发中断(本程序中不使用串口中断)
}
/******************/
/*	函数名:void UART_Init()	
 * 	日期:2021/4/24
 *	参数:无
 *	功能:串口发送函数
 *	例子:
/*****************/
//
void UART_Send_Data(u8 byte)
{
	SBUF = byte;
	while (!TI)
		;	//等待串口数据发送完毕
	TI = 0; //将发送中断标志位清0,为下次发送数据做准备
}
/******************/
/*	函数名:void UART_Init()	
 *	日期:2021/4/24
 *	参数:无
 *	功能:串口接收函数
 *	例子:
/*****************/
//
u8 UART_Receive_Data()
{
	u8 temp;
	while (!RI)
		; //等待串口接收到数据(RI被置1)
	temp = SBUF;
	RI = 0; //清空接收中断标志位,为下次接收做准备
	return temp;
}

在51单片机中对于串口的初始化一定要分清楚各个寄存器的功能,因为是寄存器操作,串口的配置参数依赖与寄存器的配置是否正确。

具体关于51单片机的寄存器功能网络上资料很多各位可以自行查询。单片机的串口通讯也是一个学习的点,有机会分享一些奇奇怪怪的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值