串口通信
-
UART(universal asynchronous receiver transmitter,通用异步收发器):可用来实现串口通信。
-
串口硬件:
- 基础串口包含TXD/RXD两个通信线,他们
交叉连接
。(如DB9通常使用2(RXD),3(TXD),5(GND)。) - 当串口两头电平标准不一样时,需要叫
电平转换芯片
。- TTL电平:5V表示1,0V表示0
- RS232电平:-3~ -15V表示1,+3~ +15V表示1。
- 485电平:两线压差+2~ +6V表示1,-2~ -6V表示0(差分信号)。
- 常见通信接口比较:
- 基础串口包含TXD/RXD两个通信线,他们
-
串口术语:
- 全双工:可以在同一时刻内互传数据,如RS485协议。
- 半双工:通信双方可以互传数据,但是必须
分时复用
同一根数据线,如RS232协议。 - 单工:单向通信(比如遥控器)。
- 异步: 通信双方各自约定通信速率。
- 同步: 通信双方靠一根
时钟线
来约束通信速率。 - 总线: 连接各个设备的数据传输线路。
-
51单片机的UART:
- STC89C52有1个UART资源:
P3.0/RxD
,P3.1/TxD
。 - UART有四种工作模式:
- 模式0:同步移位寄存器。
- 模式1:8位UART,波特率可变(常用)。
- 模式2:9位UART,波特率固定。
- 模式3:9位UART,波特率可变。
- 时序图:
- STC89C52有1个UART资源:
-
串口使用的相关寄存器:
-
串口模式图
-
串口和中断系统:
-
利用STC-ISP自动计算波特率:
AUXR 89C52没有用上,可以删掉。
- 串口通信配置,串口只能使用
定时器T1
,且配置为8位自动重装
模式。禁止定时器1中断是因为它只需要溢出的波特率发生器(T1溢出率)
,而不需要生成中断。:
#include <REGX52.H>
#include "Delay.h"//初始化
void UART_Init()
{//串口配置SCON=0x40;PCON=0;//定时器T1配置8位自动重装//9600bps@11.0592MHzPCON &= 0x7F; //波特率不倍速SCON = 0x50; //8位数据,可变波特率TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xFD; //设定定时初值TH1 = 0xFD; //设定定时器重装值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1
}//发送数据
void UART_SendByte(unsigned char Byte)
{SBUF=Byte; //发生数据的方法很简单,只需要给SBUF赋值即可。while(TI==0); //检查是否发送完成,发完硬件会自动配置。TI=0; //软件复位。
}void main()
{UART_Init();
UART_SendByte(0x66);while(1){}
}