根据实际需要,8051串行口可设置4种工作方式,有8位、10位和11位帧格式。
方式0以8位数据为一帧传输,不设起始位和停止位,先发送或接收最低位。其帧格式如下:
方式1以10位数据为一帧传输,设有1个起始位“0”,8个数据位和1个停止位“1”。其帧格式如下:
方式2和方式3以11位数据为一帧传输,设有1个起始位“0”,8个数据位,1个附加第九位和1个停止位“1”。其帧格式如下:
附加第九位(D8)由软件置1或清零。发送时在TB8中,接收时在RB8中。
1)串行口方式0
方式0为同步移位寄存器的输入/输出方式,常用于扩展I/O口。串行数据通过RXD输入或输出,而TXD用于输出移位时钟,作为外接部件的同步信号,图6.8为发送电路及时序,图6.9为接收电路及时序。这种方式不适用于两个8051之间的直接数据通信,但可通过外接移位寄存器来实现单片机的接口扩展。例如,采用74LS164可用于扩展并行输出口,74LS165可用于扩展输入口。在这种方式下,收/发的数据为8位,低位在前,无起始位、奇偶效验位及停止位,波特率固定为振荡器频率fosc的/12,即
例如,当晶体振荡频率为12 MHz时,则波特率为1 Mb/s。发送、接收时序如图6.8(b)和图6.9(b)所示。
在发送过程中,当执行一个数据写入发送缓冲器SBUF(99H)的指令时,串行口把SBUF中8位数据以fosc/12的波特率从RXD(P3.0)端输出,发送完毕置中断标志TI=1。方式0发送时序如图6.8(b)所示。写SBUF指令在S6P1处产生一个正脉冲,在下一个机器周期的S6P2处,数据的最低位输出到RXD(P3.0)脚上;在下一个机器周期的S3、S4、S5输出移位时钟为低电平,而在S6及下一个机器周期的S1、S2为高电平,将8位数据由低位至高位一位一位的顺序通过RXD线输出,并在TXD脚上输出fosc/12的移位时钟。在“写SBUF”有效后的第10机器周期的S1P1将发送中断标志TI置位。图6.8(a)中74LS164是TTL“串入并出”移位寄存器。
图6.8 串行口方式0发送电路及时序
接收时,用软件置REN=1(同时RI=0),即开始接收。接收时序如图6.9(b)所示,当SCON中的REN=1(RI=0)时,会产生一个正的脉冲。在下一个机器周期的S3P1~S5P2从TXD(P3.1)脚上输出低电平的移位时钟,在此机器周期的S5P2对P3.0脚采样,并在本机器周期的S6P2通过串行口内的输入移位寄存器将采样值移位接收;在同一个机器周期的S6P1到下一个机器周期的S2P2,输出移位时钟为高电平。将数据字节由低位至高位依次一位一位地接收并装入SBUF中。启动接收过程(即写SCON,清RI位)并将SCON中的RI清零之后的第10个机器周期的S1P1,RI被置位。这一帧数据接收完毕,可进行下一帧接收。图6.9(a)中74LS165是TTL“并入串出”移位寄存器。
图6.9 串行口方式0接收电路及时序(www.xing528.com)
2)串行口方式1
方式1用于串行发送或接收,为10位通用异步接口。TXD与RXD分别用于发送和接收数据。收发一帧数据的格式为1位起始位、8位数据位(低位在前)、1位停止位,共10位。在接收时,停止位进入SCON的RB8,此方式的传送波特率可调。
串行口方式1的发送和接收时序如图6.10所示。
方式1发送时,数据从引脚TXD(P3.1)端输出。当执行数据写入发送缓冲器SBUF的命令时,即启动发送器。发送时的定时信号,即发送移位时钟(TX时钟),是由定时器T1(图6.10)送来的溢出信号经过16分频或32分频(取决SMOD的值)而取得的。TX时钟的频率就是发送的波特率,可见方式1中波特率是可变的。发送开始的时,变为有效,将起始位向TXD输出,此后,每经过一个TX时钟周期(16分频计数器溢出一次为一个时钟周期产生一个移位脉冲,并由TXD输出一个数据位。8位数据位全部发送完后,置位TI,并申请中断,置TXD为1作为停止位。再经一个时钟周期失效。
方式1接收时,数据从引脚RXD(P3.1)端输出。接收是在SCON寄存器中REN置位1的前提下,检测到起始位(RXD上检测到“1”→“0”的跳变,即起始位)而开始。接收时,定时信号有两种[图6.10(b)]。一种是接收移位时钟(RX时钟),它的频率和传送波特率相同,由定时器T1的溢出信号经过16或32分频而得到;另一种是位检测器采样脉冲,它的频率是RX时钟的16倍,即在一位数据的期间有16位检测器采样脉冲,为完成检测,以16倍于波特率的速率对RXD进行采样。为了接收准确无误,在正式接收数据之前,还必须判定这个“1”→“0”跳变是否由干扰引起。为此,在这位中间(即一位时间分成16等份,在第7、8及9等份)连续采样3次,取其中两次相同的值判断所检测的值,以便较好地消除干扰的影响。确认是真正的起始位“0”后,就开始接收一帧数据。一帧数据接收完毕后,必须同时满足以下两个条件,此次接收才真正有效。
图6.10 单行口方式1发送、接收时序
①RI=0,即上一帧数据接收完成时,RI=1发出的中断请求已响应,SBUF中数据已被取走。由软件使RI=0,以便提供“接收SBUF已空”的信息。
②SM2=0或收到的停止位为“1”(方式1时停止位进入RB8),则将接收到的数据装入串行口SBUF和RB8(RB8装入停止位),并置位RI;如果不满足,接收到的数据不能装入SBUF,这说明该帧信息将会丢失。
必须注意的是:在整个接收过程中,保证REN=1是一个先决条件。只有当REN=1,才能对RXD进行检测。
3)串行口方式2和方式3
串行口工作方式2和方式3均为每帧11位异步通信格式,由TXD和RXD发送与接收(两种方式操作完全一样,不同的只是波特率)。每帧11位:1位起始位,8位数据位(低位在前),1位可编程的第9数据位和1位停止位。发送时,第9数据位(TB8)可以设置为1或0,也可将奇偶校验位装入TB8从而进行奇偶校验;接收时,第9数据位进入SCON的RB8。
方式2和方式3的发送、接收时序如图6.11所示。其操作方式1类似。
发送前,先根据通信协议由软件设置TB8(如作奇偶校验或地址/数据标志位),然后将要发送的数据写入SBUF,启动发送过程。串行口自动把TB8取出,并装入第9位数据的位置,再逐一发送出去。发送完毕,使TI=1。
接收时,使SCON中的REN=1,允许接收。当检测到RXD(P3.0)端有“1”到“0”的跳变(起始位)时,开始接收9位数据,送入移位寄存器(9位)。当满足RI=0且SM2=0或接收到的第9位数据,送入移位寄存器(9位)。当满足RI=0且SM2=0或接收到的第9位数据为1时,前8位数据送入SBUF,附加的第9位数据送入SCON中的RB8,置RI为1;否则,这次接收无效,也不置位RI。
图6.11 串行口方式2、方式3的发送、接收时序
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。