MCS-51系列单片机串行接口有方式0、方式1、方式2和方式3四种工作方式。现对每种工作方式下的特点作进一步的说明。
1.方式0
方式0同步移位寄存器输入/输出工作方式。8位串行数据的输入或输出都是通过RXD端,而TXD端用于输出同步移位脉冲。波特率固定为单片机振荡频率(fosc)的1/12。串行传送数据8位为一帧(没有起始、停止、奇偶校验位)。由RXD(P3.0)端输出或输入,低位在前,高位在后。TXD(P3.1)端输出同步移位脉冲,可以作为外部扩展的移位寄存器的移位时钟,因而串行口方式0常用于扩展外部并行I/O接口。
图4-13 方式0扩展并行输出接口
(1)方式0发送
串行接口可以外接串行输入/并行输出的移位寄存器,如74LS164,用以扩展并行输出接口。如图4-13所示,当CPU执行一条将数据写入发送缓冲器SBUF的指令时,产生一个正脉冲,串行接口把SBUF中的8位数据以fosc/12的固定波特率从RXD引脚串行输出,低位在先,逐位移入74LS164。8位全部移完,TI=1。如要再发送,必须先将TI清零。串行发送时,外部可扩展一片(或几片)串入/并出的移位寄存器。其发送时序如图4-14所示。
图4-14 方式0发送时序
(2)方式0接收
接收时,串行接口可以扩展一片(或几片)并入/串出的移位寄存器,如图4-15所示。利用74LS165,用以扩展并行输入接口。向串口的SCON写入控制字(置为方式0,并置“1”REN位,同时RI=0)时,产生一个正脉冲,串行口即开始接收数据。RXD为数据输入端,TXD端输出的同步移位脉冲将74LS165逐位移入RXD端。8位全部移完,RI=1,表示一帧数据接收完,如要再发送,必须先将RI清“0”。其时序如图4-16所示。
图4-15 方式0扩展并行输入接口
在方式0下,SCON中的TB8、RB8位没有用到,发送或接收完8位数据由硬件置“1”TI或RI,CPU响应中断。TI或RI需由用户软件清“0”,可用如下指令:RI=1和TI=1;工作在方式0时,SM2位必须为0。
2.方式1
图4-16 方式0接收时序
工作在方式1时,一帧数据为10位,1个起始位(0),8个数据位,1个停止位(1),先发送或接收最低位。方式1的帧格式为
工作在方式1时,其波特率是可变的,由定时器T1的计数溢出率决定。在串行通信中,常将定时器T1作为波特率发生器使用,通常选用定时方式2,避免因为重装时间常数而带来的定时误差。其波特率由下式确定:
方式1的波特率=(2SMOD/32)×(定时器T1的溢出率)
式中,SMOD为PCON寄存器的最高位的值(0或1)。
(1)方式1发送
在TI=0时,当执行一条数据写发送缓冲器SBUF的指令时,就启动发送。发送开始时,内部发送控制信号变为有效,然后发送电路自动在8位发送字符前后分别添加1位起始位和1位停止位,并在移位脉冲作用下,每经过一个TX时钟周期,便产生一个移位脉冲,由TXD按照从低位到高位输出一个数据位。8位数据位全部发送完毕后,TI也由硬件在发送停止位时置位,即TI=1,向CPU申请中断,如图4-17所示。图中TX时钟的频率就是发送的波特率。
图4-17 方式1的发送时序
(2)方式1接收(www.xing528.com)
接收操作在RI=0和REN=1条件下进行。数据接收时序如图4-18所示。单片机内部允许接收器接收,接收器以所选波特率的16倍速率采样RXD端电平,当检测到RXD端输入电平发生负跳变时(起始位),开始接收数据。内部16分频计数器的16个状态把传送每一位数据的时间16等分,在每个时间的7、8、9这3个计数状态位检测器采样RXD端电平,接收的值是3次采样中至少有两次相同的值,这样可以防止外界的干扰。图4-18中RX时钟的频率就是接收的波特率。位检测采样的频率为RX时钟频率的16倍。
如果在第一位时间内接收到的值不为0,说明它不是一帧数据的起始位,该位被摒弃,并复位接收电路,重新搜索RXD端输入电平的负跳变;若接收到的值为0,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧数据其余部分信息。
当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入SBUF接收,第9位(停止位)装入RB8,并置(RI)=1,向CPU请求中断。在方式1下,SM2一般应设定为0。
图4-18 方式1的接收时序
当一帧数据接收完,需同时满足以下两个条件,接收才真正有效。RI=0,即上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中的数据已被取走,说明“接收SBUF”已空;SM2=0或收到的停止位=1(方式1时,停止位已进入RB8),则收到的数据装入SBUF和RB8(RB8装入停止位),且置“1”中断标志RI;若这两个条件不能同时满足,收到的数据将丢失。
3.方式2和方式3
在方式2和方式3下,串行接口工作在11位异步通信方式。一帧信息包含一个起始位“0”、8个数据位、一个可编程第9数据位和一个停止位“1”。其中可编程位是SCON中的TB8位,可作奇偶校验位或地址/数据帧的标志位使用。方式2和方式3两者的差异仅在于通信波特率有所不同:方式2的波特率是固定的,由主频fosc经32或64分频后提供,方式3的波特率是可变的。方式2和方式3的帧格式为
方式2的波特率由下式确定:
方式2的波特率=(2SMOD/64)×fosc
方式3的波特率由下式确定:
方式3的波特率=(2SMOD/32)×(定时器T1的溢出率)
(1)方式2(或方式3)发送
发送前,先根据通信协议由软件设置TB8(例如,双机通信时的奇偶校验位或多机通信时的地址/数据的标志位)。然后将要发送的数据写入SBUF,即可启动发送过程。串行口能自动把TB8取出,并装入到第9数据位的位置,再逐一发送出去。发送完毕,则使置位TI为“1”。方式2和方式3的发送时序如图4-19所示。
图4-19 方式2和方式3的发送时序
(2)方式2(或方式3)接收
方式2和方式3的接收过程也和方式1类似。所不同的是,方式1中RB8存放的是停止位,而方式2或方式3时RB8中存放的是第9数据。在接收器完第9位数据后,需满足两个条件,才能将接收到的数据送入SBUF。RI=0意味着接收缓冲器为空,SM2=0或接收到的第9位数据位RB8=1两个条件满足时,接收到的数据送入SBUF(接收缓冲器),第9位数据送入RB8,并置“1”RI。若不满足两个条件,接收的信息将被丢弃。方式2和方式3的接收时序如图4-20所示。
图4-20 方式2和方式3的接收时序
表4-4列出了方式1和方式3常用的波特率及其初值。系统振荡频率选为11.0592MHz是为了使初值为整数,从而产生精确的波特率。
表4-4 常用波特率与其他参数的关系
如果串行通信选用很低的波特率,可将定时器T1置于模式0或模式1,即13位或16位定时方式。但在这种情况下,当T1溢出时,需用中断服务程序重装初值。中断响应时间和指令执行时间会使波特率产生一定的误差,需要用改变初值的方法加以调整。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。