若SM2=1,表示置多机通信功能。如果接收到的第9位数据RB8为1,则将数据装入SBUF,并置RI为1,向CPU申请中断;如果接收到的第9位数据RB8为0,则不接收数据,RI仍为0,不向CPU申请中断。若SM2=0,不论接收到的第9位RB8为0还是为l,TI、RI都以正常方式被激活,接收到的数据装入SBUF。在方式1,若SM2=1,则只有收到有效的停止位后,RI置1。在方式0中,SM2应为0。
REN:允许串行接收位。REN=l时,允许接收;REN=0时,禁止接收。
TB8:发送数据的第9位。在方式2和方式3中,TB8是第9位发送数据,可做奇偶校验位。在多机通信中,可作为区别地址帧或数据帧的标识位,一般约定发送地址帧时,TB8为1,发送数据帧时,TB8为0。
RB8:接收数据的第9位。在方式2和方式3中,RB8是第9位接收数据。
TI:发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其它方式,在发送停止位时由硬件置位。因此,TI是发送完一帧数据的标志,当TI=l时,向CPU申请串行中断,响应中断后,必须由软件清除TI。
RI:接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其它方式中在接收停止位的中间点由硬件置位。接收完一帧数据RI=l,向CPU申请中断,响应中断后,必须由软件清除RI。
3.电源及波特率选择寄存器PCON
PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,字节地址为87H。在HMOS的8051单片机中,PCON 只有最高位被定义,其它位都是虚设的。 SMOD SSSS SSSS SSSS GF11 GF00 PPDD IDLL PCON(87H)
PCON的最高位SMOD为串行口波特率的倍增位。在方式1、2和3时,串行通信的波特率与SMOD有关。当SMOD=l时,通信波特率加倍,当SMOD=0时,波特率不变。其它各位为掉电方式控制位,在此不再赘述。
二、MCS-51串行口的工作方式
MCS-51的串行口有4种工作方式,通过SCON中的SMl、SM0位来决定,如表5-4所示。 1.工作方式0 在方式0下,串行口作同步移位寄存器用,其波特率固定为fOSC/l2。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。移位数据的发送和接收以8位为一帧,无需起始位和停止位。这种方式常用于扩展I/O口。
2.工作方式1
方式1为波特率可调的8位通用异步通信接口。发送或接收一帧信息为10位,分别为起始位0,8位数据位和1位停止位1。
(1)数据发送
发送时,数据从TXD端输出。当执行MOV SBUF,A指令时,数据被写入发送缓冲器SBUF,启动发送器发送。当发送完一帧数据后,置中断标志TI为1。
(2)数据接收
接收时,数据从RXD端输入。当允许接收控制位REN为l后,串行口采样RXD,当采样到由1到0跳变时,确认是起始位“0”,启动接收器开始接收一帧数据。当RI=0且接收到停止位为l(或SM2=0)时,将停止位送入RB8,8位数据送入接收缓冲器SBUF,同时置中断标志RI=1。所以,方式1接收时,应先用软件清除RI或SM2标志。
3.工作方式2、方式3
在工作方式2、方式3下,串行口为9位异步通信接口,发送、接收一帧信息为11位:即1位起始位(0)、8位数据位、1位可编程位和1位停止位(1)。传送波特率与SMOD有关。其数据帧格式如下所示。
0 D0 D1 D2 D3 D4 D5 D6 D7 0/1 1 起 8位数据 奇偶 停 始 校验 止
位 位
(1)数据发送
串行口工作于方式2、方式3进行数据发送时,数据由TXD端输出,附加的第9位数据为SCON中的RB8(由软件设置)。用指令将要发送的数据写入SBUF,即可启动发送器。送完一帧信息时,TI由硬件置1。
(2)数据接收
当REN=1时,允许接收。与方式1相同,CPU开始不断采样RXD,将8位数据送入SBUF中,接收到的第9位数据送入RB8中,当同时满足RI=0,SM2=0或接收到第9位数据为1这三个条件都满足时,置RI=1,否则接收数据无效。
三、MCS-51串行口的波特率
在串行通信中,收发双方必须采用相同的数据传输速度,即采用相同的波特率。MCS-51单片机的串行口有4种工作方式,其中方式0和方式2的波特率是固定的,方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。
1.方式0和方式2
在方式0中,波特率为时钟频率的1/12,即fOSC/12,固定不变。
在方式2中,波特率取决于PCON中的SMOD值,当SMOD=0时,波特率为fOSC/64; 当SMOD=l时,波特率为fOSC/32,即波特率=2SMOD×fOSC/64。 2.方式1和方式3
在方式l和方式3下,波特率由定时器Tl的溢出率和SMOD共同决定,即: 波特率=2SMOD/32×n
式中 n为定时器T1的溢出率。定时器T1的溢出率取决于定时器T1的预置值。通常定时器选用工作模式2,即自动重装载的8位定时器,此时TLl作计数用,自动重装载值存在THl内。设定时器的预置值 (初始值)为X,那么每过256-X个机器周期,定时器溢出一次,此时应禁止T1中断。溢出周期为:
12/fOSC×(256一X)
溢出率为溢出周期的倒数,所以波特率为:
波特率 =
2SMOD3212(256?X)
例5.1:通信波特率为2400bps,f0SC=11.0592MHz,T1工作在模式2,其SMOD=0,计算
?fOSCT1的初值X:
根据 波特率=2/32×n 得n=76800
根据,n= fOSC/〔12×(256一X)〕 得X=244 即:X=F4H,相应的程序为: MOV TMOD,#20H
MOV TLl,#0F4H MOV THl,#0F4H
SETB TRl
MCS-51串行口常用波特率如表5-4所示。
表5-4 MCS-51串行口常用波特率 工作方式 方式0 方式2 波特率/bps 1M 375K 187.5K 62.5K 19.2K 9.6K 方式1 方式3 4.8K 2.4K 1.2K 137.5 110 方式0 方式2 0.5M 187.5K 19.2K 9.6K 4.8K 方式1 方式3 2.4K 1.2K 0.6K 110 55 fosc/MHZ 12 12 12 12 11.059 11.059 11.059 11.059 11.059 11.059 12 6 6 6 6 6 6 6 6 6 6 定时器T1 SMOD × 1 0 1 1 0 0 0 0 0 0 × 1 1 1 0 0 0 0 0 0 C/T × × × 0 0 0 0 0 0 0 0 × × 0 0 0 0 0 0 0 0 模式 × × × 2 2 2 2 2 2 2 1 × × 2 2 2 2 2 2 2 1 定时器初值 × × × FFH FDH FDH FAH F4H E8H 1DH FEEBH × × FEH FDH FDH FAH F3H E6H 72H FEEBH SMOD
第四节 MCS-51单片机串口通信应用
MCS-51单片机串行口的方式1、方式2和方式3都是异步通信方式,既可以进行单片机之间双机(点对点)、多机的串行通信,又可以进行单片机与PC机间的串行通信。
一、单片机串行口通信测试
例5.2: 图5-9将单片机的发送端与接收端接在一起,可以测试单片机的串口通信功能。 设单片机主频为6M,波特率为2400bps。程序执行后,8个发光二极管闪烁表示通信正常。查表5-4 可知定时器采用工作模式2,初值为FAH,程序如下。 ORG 0000H
MOV TMOD,#20H ;定时器1设为模式2 MOV TL1,#0FAH
MOV TH1,#0FAH ;置定时器初值 SETB TR1 ;启动T1
MOV SCON,#50H ;串口设置为方式1,REN=1
STA:CLR TI ;清发送标志 MOV P1,#00H ;送亮灯信号 ACALL DELAY ;调延时 MOV A,#0FFH
MOV SBUF,A ;发送灭灯信号 JXFS: JNB TI,JXFS ;发送等待 JXJS: JNB RI,JXJS ;接收等待 CLR RI ;清接收标志 MOV A,SBUF ;接收数据
MOV P1,A ;接收送据(灭灯信号)送P1口 ACALL DELAY ;调延时 SJMP STA ;重复 DELAY: MOV R0,#0FFH ;延时子程序
DAL: MOV R1,#0FFH DAL1:DJNZ R1,DAL1 DJNZ R0,DAL RET END