通过SCON中的SM0、SM1位,或设定单片机串行口的四种工作方式,以满足单片机各种控制的需要。 1.工作方式0。 MIM0=00时,单片机串行口为外接移位寄存器工作方式(方式0),串口逻辑电路如图3-48所示。单片机串行口在此工作方式下,其波特率固定,为fosc/12。
发送数据时,数据从RXD引脚串行输出,TXD引脚输出同步脉冲。当一个数据写入串行口发送缓冲器SBUF时,串行口将8位数据从低位到高位以f。12的固定波特率从RXD引脚输出。8位数据发送后由硬件将中断标志位T置“1”,请求中断。在下一次发送数据之前,必须用软件将T清零。
接收数据时,TXD引脚输出同步脉冲,接收器通过RXD引脚接收输入的数据。当接收完8位数据后,由硬件将中断标志位RI置,请求中断。在下一次发送数据之前,必须用软件将RI清零。
2.工作方式1。
SMOSM1=01时,串行口为一帧10位的异步通信方式(方式1),波特率可变。在方式1下,字符帧格式为一帧10位,即1位起始位(0),8位数据位,1位停止位(1)。TXD为数据发送引脚,BXD为数据接收引脚,传送一帧数据的格式如图3-49所示。
串行口发送数据时,CPU执行一条写人SBUF指令后便启动了串行口发送,数据从TXD输出。一帧发送结束后由硬件将中断标志位T置“1”,CPU响应中断,之后T位由软件清零。
串行口接收数据时,置REN为1,允许接收。当接收器对RXD引脚状态进行采样时,如果检测到由1到0的负跳变,则开始接收数据,在接收移位脉冲的控制下,将接收的数据移入接收寄存器。接收完一帧,必须同时满足以下两个条件,这次接收才真正有效。有效条件如下:
①RI=0,即上一帧数据接收完成,上次发出的中断请求已被响应,SBUF中的数据已被取走,说明接收SBUF已空。
②SM2=0或收到的停止位=1(停止位已进入RB8)。
若上述两个条件同时满足,则置中断标志RI=1,将收到的数据装入SBF;反之,收到的数据不能装入SBUF,该帧数据将丢失。
3.工作方式2。
SMOSM1=10时,串行口为11位一帧可编程串行工作方式。一帧数据由11位组成,1位起始位,8位数据,1位可编程控制的第9位数据和1位停止位。传送一帧数据的格式如图3-50所示。
串行口发送数据时,先将数据的可编程位写入TB8,CPU执行写入SBUF指令后,立即启动发送器发送,发送一帧数据后,T1置“1”,再次向CPU申请中断。因此,在进入中断服务程序后,在发送完一帧数据之前,必须将T清零。
串行口接收数据时,REN=1,允许接收。与方式1的接收方式类似,接收完一帧数据,必须同时满足如同方式1中的两个条件,本次接收才真正有效。使RI=1,将接收数据装入接收SBUF,同时第9位装入RB8。
4.工作方式3。
SMOSM1=11时,也是11位一帧可编程串行工作方式,其通信过程与工作方式2完全相同,不同点仅在于波特率。方式2的波特率只有固定的两种,而方式3的波特率与方式1相同,可通过设置T1的初值来设定波特率。
5.各种工作方式下的波特率设定。
串行通信过程中,波特率反映了串行传输数据的速率。接收和发送的波特率必须一致使用时通过软件进行设置。各种串行工作方式下,波特率的计算公式如下: