基本原理与概念
串口通信在不同的硬件上的具体表现不同,但基本原理与操作流程都差不多:
UART是一种串行、异步、全双工的通信协议,将所需传输的数据一位接一位地传输,在UART
通讯协议中信号线上的状态位高电平代表’1’,低电平代表’0’。其优点是通信线路简单,只要一对传
输线就可以实现双向通信,成本较低。
其一次通信数据(一帧)有十一位,包括1位起始位(低)、8位数据位、1位校验位、1位停止位(1)
具体流程为:1.空闲时数据线为高电平;
2.发送一个低电平表示起始位;
3.uart的数据位是先发送低位,再发送高位;
4.奇偶校验位校验传输数据中“1”的个数为奇数个(奇校验)或偶数个(偶校验)来指示传输数据是否正确;
5.停止位为高电平,以便下次的起始位能被表现出来;
此为一个流程:
配制
在stc89c51芯片中,其配制流程如下:
1.明确需要的配制:要考虑工作方式与波特率,数据位位数,奇偶校验位,停止位
首先设置定时器工作方式TMOD以及定时器1的初值,初值公式为:
2^8-2smod * focs / 32 / bps / 12,其中smod表示PCON的B7,根据实际情况带入,不是0就是1,bps目标波特率,2^8这里的8来自定时器的工作方式,因为我们使用的是8位自动重装方式,所以是8
工作方式分4种,通过SCON寄存器配制,其区别如下:
模式零:设置方式为将寄存器SCON第6位(sm1)第7(sm2)位置0,其余位保持不变,其波特率为固定值晶振频率/12
模式一:sm1为1,sm0为0,波特率可调,为2的(PCON寄存器第7位的值-5)次方×定时器1的溢出率
模式二:sm1为0,sm0为1,波特率可调,为2的(PCON寄存器第7位的值-6)次方×晶振时钟频率
模式三:sm1为1,sm0为1,波特率可调,为2的(PCON寄存器第7位的值-5)次方×定时器1的溢出率
综上所述,需要调节TMOD/SCON/PCON寄存器,还需通过调节TCON来设置计数器,初始化代码如下:
void uart_init(u8 baud)
{
TMOD|=0X20; //设置计数器工作方式 2
SCON=0X50; //设置为工作方式 1
PCON=0X80; //波特率加倍
TH1=baud; //计数器初始值设置
TL1=baud;
TCON=0x40;
}
配制完毕,即可通过SBUF寄存器写入一帧数据(一个char类型字符):
void send(char a)
{
SBUF=a;
while(SCON & 0x01 ==0);//证明发送完毕
SCON &=~(0x01<<1);//清除T1,防止下次发送出错
}