对串口通信的理解
目前很多博主都写的很好,今天来说点不一样的,学到串口通信了,差不多已经是单片机最后几个功能了,其实串口通信理解起来很简单,当成我也是想了很久,想明白后,发现所需要发送的数据其实都会转换成一个个电平,高电平是1,低电平是0。
假设我要发送一帧数据为0X50,我们先把16进制转化为2进制,那么就是0101 0000,那么在这一帧数据发送是在,第5位和第6位是发送的是高电平,其他都是低电平。还有就是那单片机咋知道一次发8位,我们接着来看说明书,说明书是最好的教科书。
配置寄存器
SCON寄存器
先来看看SCON控制寄存器,第一步就是看工作模式,一般使用的是模式一,这不干好就是8位,对应是一字节了吗,就这样把SM0,SM1两位给配置好了,接着看,SM2设置0,说明书写了,接着看REN位,这位不用说都知道写1,后面的TB8、RB8不作理会,最后两位都是在中断里面该干的,直接写0完事,所以SCON寄存器就配置好了,SCON = 0X50;这不简简单单配置好了一个寄存器,再看下一个寄存器。
SBUF
这个寄存器dddd,不用多说。
工作方式
串口的波特率是通过定时器产生的,先来看看,所以要初始化一个定时器,偷一下懒通过STC-ISP,波特率计算公式为
初始化代码
void UartInit(void) //115200bps@24.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xCC;