串口是在单片机中用的比较多的通信方式,下面废话不多说直接上代码。
#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单片机的寄存器功能网络上资料很多各位可以自行查询。单片机的串口通讯也是一个学习的点,有机会分享一些奇奇怪怪的问题。