第6章 单片机串行口
• 1. 串行口控制寄存器SCON • SCON用于控制串行口的工作方式, 同时还包含要发送或接收到的第9位数据 位以及串行口中断标志位。该寄存器的 字节地址为98H,可进行位寻址。
(1) SM0、SM1:串行口工作方式控制位
(2) SM2:多机通信控制位。
SM2=1,表示允许多机通信,多机通信需要有地址信息,常用数据帧的奇 偶校验位来区分当前接收到(或发送的)数据属于地址信息还是数据信息。因此 ,多机通信常工作于方式2和方式3(数据帧含奇偶校验位)。 当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时 ,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接收 到的数据放弃。 当SM2=0时(双机点对点通信),则不管第9位数据(RB8)是0还是
• 6.1 MCS-51单片机串行接口
1.异步通信和同步通信
串行通信有两种基本通信方式:异步通信和同步通信。
(1) 异步通信
数据是一帧一帧地传送的,每一帧的数据包括一个起始位、若干个数据位(5~8个,低 位在前高位在后)、一个奇偶校验位(或用作地址/数据帧标志,可省略)和一个停止位。当 两帧信息之间有时间间隔时,用空闲位(高电平)填充
标志)写入TB8 (SCON. 3),数据写入SBUF即启动发送,数据 发送完毕硬件将TI置1; 接收: RI=0 且 REN=1,即开始接收,接收完毕硬件将 RI置1 ,奇偶校验位(或地址数据标志)被送入RB8(SCON. 2) , 这时读SBUF即得到输入的数据,读RB8得到奇偶校验标志(或 地址数据标志);开始接收时若RI=1,接收到的数据会丢失, 因此读出SBUF的数据后,必须将RI 清零。
串行口方式1:10位异步收发 RXD接收数据,TXD输出数据; 串行移位以10位数据为一帧,8个数据位(低位在前),一个起始位、一个停
止位,没有奇偶校验位,停止位进入RB8(SCON. 2)。
波特率可变 (1) 方式1的波特率可变,而且发送和接收的波特率可以不同。 (2) 用定时器/计数器T1 (对于52单片机还可用定时器/计数器2)作为波特率发 生器。定时器1用作波特率发生器时,一般工作在方式 2 ,需要注意的是这时 不要允许定时器1中断。 波特率由T1(或T2)的溢出率和SMOD决定。
3.
串行口方式2: 11位异步收发
RXD接收数据,TXD输出数据;
串行移位以11位数据为一帧,8个数据位(低位在前),一个起始位、一个奇 偶校验位,一个停止位。 方式2可用于多机通信,接收时,奇偶校验位(或地址数据标志)进入 RB8(SCON. 2);发送时,奇偶校验位(或地址数据标志)送入TB8 (SCON. 3)。 波特率: 当SMOD=1时, 波特率 = fosc/32 当SMOD=0时, 波特率 = fosc/64 其中, fosc是系统振荡器频率
4.
串行口方式3: 11位异步收发
除了波特率可变外,方式3与方式2的操作完全一样。 波特率可变 用定时器/计数器T1 (对于52单片机还可用定时器/计数器2)作为波 特率发生器。定时器1用作波特率发生器时,一般工作在方式 2 ,需要 注意的是这时不要允许定时器1中断。
波特率由T1(或T2)的溢出率和SMOD决定。
(2) 同步通信 在同步通信中,每个数据块传送开始时,采用一 个或两个同步字符作为起始标志(接收端不断对传送 线采样,并把采样到的字符和双方约定的同步字符比 较,只有比较成功后才会把后面接收到的数据加以存 储)。 字符格式的规定是双方能够在对同一种0和1的串理解成 同一种意义。原则上字符格式可以由通讯的双方自由制
在方式2和方式3中,TB8是要发送的第9位数据位(作为奇偶校验位)。在多机通信中
代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。 (5) RB8:接收数据位8 (奇偶校验位,或称为地址/数据标志位) 在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。 (6) TI:发送中断标志位 可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送 或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。
第6章 单片机串行口及应用
• CPU与外部设备的基本通信方式有两种:① 并行 通信,数据的各位同时进行传送。其特点是传送速度 快、效率高,数据有多少位,就需要有多少根传输线。 当数据位数较多和传送距离较远时,就会导致通信线 路成本提高, 因此它适合于短距离传输。② 串行通信, 数据一位一位地按顺序进行传送,其特点是只需一对 传输线就可实现通信,当传输的数据较多、距离较远 时,它可以显著减少传输线,降低通信成本。
从机0
TXD RXD
从机1
TXD
从机n
RXD
1)
主机和所有从机都使用方式2或3(工作方式、波特率必须相同) ,数据帧的第9个位( 奇偶校验位)用作地址/数据标识位,且从机都将SM2位置1 ;
2)
与某一从机开始通信前,主机首先发送地址帧,由于SM2=1,而且收到数据帧的 RB8=1(地址帧),所以所有从机接收该数据帧,并且产生接收中断。从机响应中 断后,通过软件方式判断接收到的地址信息是否与本机地址相同,如果是,则令 SM2=0,准备接收数据帧,从而与主机建立起点对点的通信。其它从机仍保持 SM2=1(不接收数据帧,等待接收地址帧)。
1,都将数据送入SBUF,并发出中断申请。
工作于方式0时,SM2必须为0
主机
TXD RXD
TXD RXD
从机0
TXD RXD
从机1
TXD
从机n
RXD
(3) REN:允许接收位 用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收 (4) TB8:发送接收数据位8(奇偶校验位,或称为地址/数据标志位)
• 串行口内部结构简化示意图如图所示。
51单片机有一个可编程的全双工串行通信接口,既可用作通用异步接收和发 送器(UART),也可以用作同步移位寄存器。 51单片机的串行通信的数据帧可以编程设定为8位、10位或11位,并能设置通
信波特率。
51单片机的串行接口一共有4种工作方式。
• 6.3 串行口控制 • MCS-51的串行口是可编程接口,通 过对两个特殊功能寄存器SCON和PCON 进行编程可控制串行口的工作方式和波 特率。
当SMOD=1时,串行口波特率加倍。系统复位默认
为SMOD=0。
ES 串行中断允许位
ES=1 允许串行中断,ES=0 禁止串行中断。
• 3 串行口工作方式及波特率设置 • MCS-51串行口有方式0、方式1、方式2 和方式3四种工作方式,每种工作方式下的 波特率设置方法也不相同,用户应根据实 际需要正确选用。 • 方式0主要用于扩展并行输入输出口,方 式1、方式2和方式3主要用于串行通信。
(7) RI:接收中断标志位
可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位 由硬件置位,RI=1表示帧接收完成。
• 2. 电源控制寄存器PCON • PCON 中只有最高位 SMOD 与串行口工作有关, 该位用于控制串行口工作于方式 1、2 、3 时的波特率。 PCON的字节地址为87H,没有位寻址功能。 SMOD (PCON.7) 串行口波特率倍增位
5.
波特率的计算 方式0 :波特率= fosc/ 12.
其中, fosc是系统振荡器频率
方式2: 当SMOD=1时, 波特率 = fosc/32 当SMOD=0时, 波特率 = fosc/64 方式1和3:波特率由定时器T1或T2的溢出率,以及SMOD位决定
2SMOD 串行方式1、3的波特率= (T1溢出速率) 32 f OSC T1溢出速率= 12 (28 T1初值)
串行口方式0:同步移位寄存器输入输出方式
方式0通过RXD输入或输出数据,TXD用于输出移位时钟信号。 串行移位以8位数据为一帧,没有起始位、奇偶校验位和停止位,先发送或接收 最低位。作为输入时,当8位数据全部移入时,接收中断标志RI置位;作为输出时, 当8位数据全部移出时,发送中断标志TI置位。 方式0 的波特率(数据传送速率)为单片机振荡器频率的1/12. 方式0常用于扩展输入输出口(I/O)
方式0的设置:
(1)中断设置 EA,ES (2) SCON (SM0, SM1, SM2 = 0 ; 允许接收时REN=1 ) (3) 中断响应(或查询)时, RI 和TI 必须由软件清零。 输出:将数据写入SBUF即启动发送,(8位)数据发送完毕硬件将TI置1; 输入: RI=0 且 REN=1,即开始接收,接收完毕硬件将RI置1,这时读SBUF 即得到输入的数据;
• 6.2 串行口结构 • MCS-51系列单片机内部有一个全双工串行 异步通信接口,它可以作 UART (通用异步接 收和发送器)用,构成双机或多机通信系统, 也可以外接移位寄存器后扩展为并行I/O口。 • MCS-51系列单片机通过引脚RXD(P3.0) 和引脚TXD(P3.1)与外界进行通信。
并行通信
串行通信 单工方式:数据仅按一个固定方向传送。因而这种传输方式的用途有限,常用于
串行口的打印数据传输与简单系统间的数据采集。
半双工方式:数据可实现双向传送,但不能同时进行,实际的应用采用某种协议 实现收/发开关转换。 全双工方式:允许双方同时进行数据双向传送, 但一般全双工传输方式的线路和 设备较复杂。
对照: T1工作在方式2, 并作定时器用时: 定时时间=(28—计数初值) × 晶振周期 × 12
f OSC 2SMOD 串行方式1、3的波特率= ( ) 32 12 (256 T1初始值)
由选定的波特率,根据上式,便可以算出TL1(TH1)的初始化值
多机通信主机ຫໍສະໝຸດ TXD RXDTXD RXD