- 方式 2
方式月为固定波特率的 11 位 UART 方式。它比方式 1 增加了一位可程控为 1 或 0 的第 9 位数据。
- 输出 : 发送的串行数据由 TXD 端输出一帧信息为 11 位,附加的第 9 位来自 SCON 寄存器的 TB8 位,用软件置位或复位。它可作为多机通讯中地址 / 数据信息的标志位,也可以作为数据的奇偶校验位。当 CPU 执行一条数据写入 SUBF 的指令时,就启动发送器发送。发送一帧信息后,置位中断标志 TI 。
- 输入 : 在( REN ) =1 时,串行口采样 RXD 引脚,当采样到 1 至 0 的跳变时,确认是开始位 0 ,就开始接收一帧数据。在接收到附加的第 9 位数据后,当( RI ) =0 或者( SM2 ) =0 时,第 9 位数据才进入 RB8 , 8 位数据才能进入接收寄存器,并由硬件置位中断标志 RI ;否则信息丢失。且不置位 RI 。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测 RXD 上从 1 到 0 的跳变。
- 工作方式 3
方式 3 为波特率可变的 11 位 UART 方式。除波特率外,其余与方式 2 相同。
- 波特率选择
如前所述,在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。在 8051 串行口的四种工作方式中,方式 0 和 2 的波特率是固定的,而方式 1 和 3 的波特率是可变的,由定时器 T1 的溢出率控制。
- 方式 0
方式 0 的波特率固定为主振频率的 1/12 。
- 方式 2
方式 2 的波特率由 PCON 中的选择位 SMOD 来决定,可由下式表示:
波特率 = 2的SMOD次方除以64再乘一个fosc,也就是 当 SMOD=1 时,波特率为 1/32fosc ,当 SMOD=0 时,波特率为 1/64fosc
3 .方式1和方式 3
定时器 T1 作为波特率发生器,其公式如下:
波特率 = 定时器T1溢出率
T1 溢出率 = T1 计数率 / 产生溢出所需的周期数
式中 T1 计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时, T1 计数率为 fosc/12; 当工作于计数器状态时, T1 计数率为外部输入频率,此频率应小于 fosc/24 。产生溢出所需周期与定时器 T1 的工作方式、 T1 的预置值有关。
定时器 T1 工作于方式 0 :溢出所需周期数 =8192 -x
定时器 T1 工作于方式 1 :溢出所需周期数 =65536-x
定时器 T1 工作于方式 2 :溢出所需周期数 =256-x
因为方式 2 为自动重装入初值的 8 位定时器 / 计数器模式,所以用它来做波特率发生器最恰当。
当时钟频率选用 11.0592MHZ 时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶振就是这个道理。
下表列出了定时器 T1 工作于方式 2 常用波特率及初值。
常用波特率 |
Fosc(MHZ) |
SMOD |
TH1 初值 |
19200 |
11.0592 |
1 |
FDH |
9600 |
11.0592 |
0 |
FDH |
4800 |
11.0592 |
0 |
FAH |
2400 |
11.0592 |
0 |
F4h |
1200 |
11.0592 |
0 |
E8h |