1,接线方式:
RXD: 数据输入引脚;对应stc89的P3.0口;
TXD:数据的发送端口;对应P3.1口;
注意:单片机的的串口TX,RX与外设交叉接线;
2串口编程要素
输出/输入数据缓冲器SBUF(也就是两个缓冲器都叫SBUFF地址都为99H),但是他们两个是独立的寄存器,英雌可以同时收发。
代码体现:
`char data = SBUF; //接收数据`SBUF = data;
相关寄存器
1.串口是异步串行通讯,由于双方硬件不同时钟频率也不同,因此我们要约定通信速度:波特率;由STC_ISP中的串口助手完成。选择波特率,校验位,停止位。
PCON寄存器:
图中手册有误,当SMOD=0波特率不加倍;SMOD=1波特率加倍;
SMOD0,用于精细通讯控制是不允许发生帧错误打开用于监测。当SMOD0 = 1时发生帧错误后SCON作出相应的动作;
SCON寄存器
1,B7位当PCON中的SMOD0 = 1时该位执行FE功能,用于帧错误监测。当监测到一个停止位错误,通过UART置位。必须由软件清零
否者执行SM0功能与SM0一起确定串口工作方式;
SM0 | SM1 | 工作方式 | 功能 | 波特率 |
---|---|---|---|---|
0 | 0 | 方式0 | 同步移位串行方式:移位寄存器 | SYSclk/12 |
0 | 1 | 方式1 | 8位UART波特率可变 | (2^SMOD/32)*定时器1的溢出率 |
1 | 0 | 方式2 | 9位UART | 2^SMOD/64)*SYSclk系统工作时钟频率 |
1 | 1 | 方式3 | 9位UART波特率可变 | (2^SMOD/32)*定时器1的溢出率 |
可以发现选择波特率可变方式时均用到了定时器1,这是因为波特率的本质是速度这是和单片机晶振相关的,而访问单片机的晶振就必须通过定时器完成。
SM2:多机通信控制位,一般来说51单片机很少用到多机通信,感兴趣可以查手册了解。
REN:允许/禁止串行接收控制位。注意是接收控制位发送与他无关。
TI:发送中断标志
RI:接收中断标志位
AUXR寄存器:配置成0x01减少电磁辐射
配置串口代码:
void UartInit()
{SCON = 0x40; //SCON =0100 0000 串口工作方式配置在工作方式1PCON = 0x00;TMOD &= 0x0F; //高四位与上0000,低四位与1111;清零寄存器的高四位同时不影响定时器0的工作状态TMOD |=0x20; //配置定时器1的工作方式位8位自动重载TR1 = 1; //启动定时器1TH1 = 0xFD; //配置串口波特率计算方式见下图TL1 = 0xFD;}