51单片机——UART

对于单片机来说 , 通信则与传感器、存储芯片、外围控制芯片等技术紧密结合 , 成为整个单片机系统的“神经中枢” 。
1、初步认识
一位一位的发送出去的 , 要发送 8 次才能发送完一个字节 。
STC89C52有两个引脚是专门用来做 UART串行通信的 , 一个是 P3.0一个是 P3.1 , 它们还分别有另外的名字叫做RXD和TXD , 由它们组成的通信接口就叫做串行接口 , 简称串口 。
波特率:发送二进制数据位的速率 , 习惯上用 baud 表示;即我们发送一位二进制数据的持续时间=1/baud 。
通信过程:在UART 通信的时候 , 一个字节是 8 位 , 规定当没有通信信号发生时 , 通信线路保持高电平 , 当要发送数据之前 , 先发一位 0 表示起始位 , 然后发送8 位数据位 , 数据位是先低后高的顺序 , 数据位发完后再发一位 1 表示停止位 。
 
2、RS232通信接口与USB转串口通信
RS232 接口一共有 9 个引脚 , 分别定义是: 1、载波检测 DCD; 2、接收数据 RXD; 3、发送数据 TXD; 4、数据终端准备好 DTR;5、信号地线 SG; 6、数据准备好 DSR; 7、请求发送 RTS; 8、清除发送 CTS; 9、振铃提示RI 。我们要让这个串口和我们单片机进行通信 , 我们只需要关心其中的 2 脚 RXD、 3 脚 TXD 和 5 脚 GND 即可 。
负逻辑:低电平代表的是 1 , 而高电平代表的是 0 , 因此需要电平转换芯片 MAX232 。RS232 串口和 UART串口 , 它们的协议类型是一样的 , 只是电平标准不同而已 , 而 MAX232 这个芯片起到的就是中间人的作用 , 它把 UART 电平转换成 RS232 电平 , 也把RS232 电平转换成 UART 电平 。
USB 转串口芯CH340T:实现 USB通信协议和标准UART 串行通信协议的转换 。
3、通信的三种基本类型
单工通信就是指只允许一方向另外一方传送信息 , 而另一方不能回传信息;
半双工通信是指数据可以在双方之间相互传播 , 但是同一时刻只能其中一方发给另外一方;
全双工通信就发送数据的同时也能够接收数据 , 两者同步进行 。
4、串口通信
1、配置串口为模式 1 。
2、配置定时器 T1 为模式 2 , 即自动重装模式 。
3、根据波特率计算 TH1 和 TL1 的初值 , 如果有需要可以使用 PCON 进行波特率加倍 。
4、打开定时器控制寄存器 TR1 , 让定时器跑起来 。
定时器的重载值计算公式为:TH1= TL1 = 256 - 晶振值/12 /2/16 /波特率
【51单片机——UART】 
#include
void ConfigUART(unsigned int baud);
int main(void)
{
EA = 1; //使能总中断
ConfigUART(9600); //配置波特率为9600
while (1);
return 0;
}
/* 串口配置函数 , baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
SCON = 0x50; //配置串口为模式1
TMOD &= 0x0F; //清零T1的控制位
TMOD |= 0x20; //配置T1为模式2
TH1 = 256 - (11059200 / 12 / 32) / baud; //计算T1重载值
TL1 = TH1; //初值等于重载值
ET1 = 0; //禁止T1中断
ES = 1; //使能串口中断
TR1 = 1; //启动T1
}
/*UART中断服务函数 */
void InterruptUART() interrupt 4
{
if (RI) //接收到字节
{
RI = 0; //手动清零接收中断标志位
SBUF = SBUF + 1; //接收的数据+1后发回 , 左边是发送SBUF , 右边是接收SBUF
}
if (TI) //字节发送完毕
{
TI = 0; //手动清零发送中断标志位
}
}

    推荐阅读