51单片机串行通信原理
- 计算机通信
- 串行通信
- 异步通信
- 同步通信
- 数据传送速率
- 传输方向
- 单片机串行口
- 串行口特殊功能寄存器
- 串行口控制寄存器SCON
- 电源控制寄存器PCON
- 波特率的设定与计算
- PC与多个单片机通信
- 串口如何使用
计算机通信
计算机通信:计算机与外部设备或计算机之间的信息交换。基本的通信方式有两种。
- 并行通信:将传送数据字节的各位用多条数据线同时进行传送。优点:控制简单,传输速度快。缺点:由于传输线较多,长距离传送成本高且接收方的各位同时接受困难。
- 串行通信:所传送的数据各位按顺序一位一位地发送或接收。优点:传输线少,成本低。缺点:控制复杂。
串行通信
异步通信
通信的发送与接收设备使用自己的时钟控制数据的发送和接收过程(两个时钟尽可能一致)。
数据或字符是一帧一帧地传送的。先用一个起始位0表示字符的开始,然后是8位数据,规定低位在前,高位在后。其后是奇偶校验位,此位通过对数据奇偶性的检查,可用于判别字符传送的正确性(可省略)。最后是停止位,用以表示字符的结束。
同步通信
发送方时钟对接收方时钟的完全控制,保持位同步关系也保持字符同步关系。
数据传送速率
波特率: 每秒钟传送二进制代码的位数
单位:位/秒,bps
传输距离随传输速率增加而减少。
调制解调器:由于距离太远时,要先采用调制器把数字信号转换位模拟信号,并加以放大在传送。在接收时,在用解调器把模拟信号转换成数字信号在送入计算机接口。
传输方向
单工:数据传输仅能沿一个方向
半双工:数据传输可以沿两个方向,但要分时进行。
全双工:数据可以同时进行双向输出
单片机串行口
内部硬件结构:两个物理上独立的接受、发送缓冲器SBUF。发送缓冲器只能写入不能读出。接收缓冲器只能读出不能写入。
串行口特殊功能寄存器
串行口控制寄存器SCON
符号 | 字节地址 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
SCON | 98H | SM0/FE | SM1 | SM2 | REN | TB8 | RB8 | TI | RI | 0000 0000 |
- RI:接收中断标志位。在方式0时,接收完第8位数据时,RI由硬件自动置1。在其他方式中,串行接收到停止位时,该位置1。RI=1,表示一帧数据接收完毕,并申请中断,要求CPU从接收SBUF取走数据。RI必须用软件清0。
- TI:发送中断标志位。。在方式0时,发送完第8位数据时,TI由硬件自动置1。在其他方式中,串行发送停止位的开始时,该位置1。TI=1,表示一帧数据发送完毕,并申请中断,在 CPU响应中断后,在中断服务程序中向SBUF写入要发送的下一帧数据。TI必须用软件清0。
- RB8:接收的第9位数据。在方式1时,若SM2=0,RB8接收到的停止位。在方式0中。不使用RB8.
- TB8:发送的第9位数据。其值由软件置1或清0。在双机串行通信时,一般作为奇偶校验位使用;在多级串行通信中用来表示主机发送的是地址帧还是数据帧,TB9=1为地址帧,TB8=0为数据帧。在方式0和方式1中,不使用TB8。
- REN:允许串行接受位。由软件置1或清0。REN=1,允许串行口接收数据;REN=0,禁止串行口接收数据。
- SM2:多机通信控制位。在方式2和方式3时进行。如果SM2=1,则只有当接收到的第九位数据(REB)为1时,才使RI置1,产生中断请求,并将接收到的前8位数据送入SBUF,当接收到的第九位数据位0时,则将接收到的前8位数据丢弃;如果SM2=0,则将前8位数据送入SBUF中,并使RI置1。
- SM0/SM1:方式选择位
SM0 | SM1 | 工作方式 | 功能 | 说明 | 波特率 |
---|---|---|---|---|---|
0 | 0 | 方式0 | 8位同步移位寄存器 | 常用于扩展I/O口 | fosc/12 |
0 | 1 | 方式1 | 10位URAT | 8位数据、起始位、结束位 | 可变(由定时器控制) |
1 | 0 | 方式2 | 11位URAT | 8位数据、起始位0、结束位1和奇偶校验位 | fosc/32或fosc/64 |
1 | 1 | 方式3 | 11位URAT | 8位数据、起始位0、结束位1和奇偶校验位 | 可变(由定时器控制) |
fosc=晶振的频率。
URAT=异步通信寄存器
电源控制寄存器PCON
符号 | 字节地址 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
PCON | 87H | SMOD | SMOD0 | POF | GF1 | GF0 | PD | IDL | 0xx1 0000 |
仅SMOD、SMOD0两位与串口有关
- SMOD0:帧错位检测有效控制位。当SMOD0=1时,SCON寄存器中的SM0/FE位用于FE(帧错误检测)功能。当SMOD0=0时,SCON寄存器中的SM0/FE位用于SM0功能。
- SMOD:波特率选择位。(波特率倍增位):在方式2时,SMOD=1要比SMOD=0时的波特率加倍。
波特率的设定与计算
- 方式0
波 特 率 = f o s c 12 波特率=\frac{f_{osc}}{12} 波特率=12fosc - 方式2
波 特 率 = 2 S M O D 64 × f o s c 波特率=\frac{2^{SMOD} }{64} \times{f_{osc }} 波特率=642SMOD×fosc
串行口工作在方式2时,波特率仅与SMOD位的值有关。 - 方式1和方式三
波 特 率 = 2 S M O D 32 × 定 时 器 T 1 的 溢 出 率 波特率=\frac{2^{SMOD} }{32} \times{定时器T1的溢出率} 波特率=322SMOD×定时器T1的溢出率
T1常设置为方式2定时,即8位重装入方式,并且不允许T1中断。可以避免软件重装初值带来的定时误差。
定 时 器 1 的 溢 出 率 = 1 溢 出 周 期 = 1 ( 256 − X ) × T c y = f o s c 12 × ( 256 − X ) 定时器1的溢出率=\frac{1 }{溢出周期}=\frac{1}{(256-X)\times{T_{cy}}}=\frac{f_{osc}}{12\times{(256-X)}} 定时器1的溢出率=溢出周期1=(256−X)×Tcy1=12×(256−X)fosc
式中Tcy为系统机器周期;X为初值
PC与多个单片机通信
- 采用RS-232标准总线通信
- 采用RS-422标准总线通信
串口如何使用
串行口工作之前,应对其初始化
- 确定T1的工作方式(TMOD);
- 计算T1的初值,装载TH1,TL1;
- 启动T1(TCON中的TR1位)
- 确定串行口控制(SCON)
中断设置(IE,IP寄存器)