原理:
这里需要解释一下,串口通信是需要占用定时器1的,所以使用了串口通信就不能使用定时器1,除非是代码优化。
这个需要配置几个寄存器,都比较简单,TMOD寄存器设置定时器计数器的工作方式,SCON则是设置串口通信的工作方式,PCON则是波特率加倍操作,都是比较简单的。
计时器初始值的设置有专门的工具
链接:https://pan.baidu.com/s/1BSi8YCaRWtBGLaV2gslpSw
提取码:1234
使用方法:
设置定时器工作方式,单片机晶振,所需波特率,是否开启倍频,最好让误差为零。
代码:
#include <reg51.h>
typedef unsigned int u16; //对系统默认数据类型进行重定义
typedef unsigned char u8;
void uart_init(u8 baud)
{
TMOD|=0X20; //设置计数器工作方式2
SCON=0X50; //设置为工作方式1
PCON=0X80; //波特率加倍
TH1=baud; //计数器初始值设置
TL1=baud;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void main()
{
uart_init(0XFA);//波特率为9600
while(1)
{
}
}
void uart() interrupt 4 //串口通信中断函数
{
u8 rec_data;
RI = 0; //清除接收中断标志位
rec_data=SBUF; //存储接收到的数据
SBUF=rec_data; //将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
运行结果:
发给单片机什么,单片机就回复你什么。