首页 理论教育单片机基础:串行工作方式1实现

单片机基础:串行工作方式1实现

【摘要】:在方式1下,串行口以10位为一帧,为异步串行通信方式,主要包括1位起始位、8位数据位和1位停止位。单片机以串行工作方式1进行串行数据通信,波特率为1200bps。假定甲、乙机以串行工作方式1进行串行数据通信,其波特率为9600,甲、乙双机的8051的晶振频率均为11.0592MHz,波特率不倍增。

在方式1下,串行口以10位为一帧,为异步串行通信方式,主要包括1位起始位、8位数据位和1位停止位。其主要特点是:RXD(P 3.0)引脚接收数据,TXD(P 3.1)引脚发送数据;数据位的接收和发送低位在前,高位在后。其格式如图9-9所示。

图9-9 方式1帧格式图

1.数据的发送

在方式1,TI=0时,数据的发送从执行“MOV SBUF,A”指令开始,随后在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在移动脉冲的作用下,由TXD端串行输出。一个字符帧发送完后,使TXD输出线维持在1(mark)状态下,并将SCON寄存器的TI置1,通知CPU可以接着发送下一个字符。

2.数据的接收

接收数据时,SCON的REN位应处于允许接收状态(REN=1)且(RI=0),串行口采样RXD端,当采样从1到0的状态跳变时,就认定接收到起始位,随后在移位脉冲的控制下,把接收到的数据位移入接收寄存器中,直到停止位到来之后置位中断标志位RI,通知CPU从SBUF取走接收到的一个字符。

3.波特率的设定

方式0的波特率是固定的。但方式1的波特率是可变的,以定时器T1作波特率发生器使用,其值由定时器1的计数溢出率来决定,其公式为

其中,SMOD为PCON寄存器最高位的值,其值为1或0。

当定时器1作波特率发生器使用时,选用工作方式2(即8位自动加载方式),这主要是因为方式2具有自动加载功能,可避免通过程序反复装入初值所引起的定时误差,能使波特率更加稳定。假定计数初值为X,则计数溢出周期为

溢出率为溢出周期的倒数,则波特率计算公式为

实际使用时,总是先确定波特率,再计算定时器1的计数初值,然后再进行定时器的初始化。根据上述波特率的计算公式,可得出计数初值的计算公式为

以T1作波特率发生器由系统决定,用户只需根据通信所要求的波特率计算出定时器T1的计数初值,以便在程序中设置。

【例9-2】单片机以串行工作方式1进行串行数据通信,波特率为1200bps。若晶体振荡频率fosc为6MHz,试确定定时器/计数器1的计数初值。(www.chuimin.cn)

【解】串行口工作于方式1时的波特率由定时器/计数器1的溢出率决定,计数初值为

式中,晶体振荡频率fosc=6MHz、波特率=1200bps(已由题中给出),设SMOD位为0,可得计数初值为

因此,通过下面的指令可以对单片机的串行通信进行初始化,包括串行口的工作方式和波特率设置。

【例9-3】假定甲、乙机以串行工作方式1进行串行数据通信,其波特率为9600,甲、乙双机的8051的晶振频率均为11.0592MHz,波特率不倍增。甲机发送,发送数据的个数在内部RAM的40H中,数据则存放于外部RAM的以4000H地址开始的单元中。乙机接收,并把接收到的数据个数存放于内部RAM的50H中,数据块依次存入外部RAM的5000H地址开始的区域中。双机通信系统图如图9-10所示。

【解】参考例9-2,确定定时器/计数器1的计数初值。

图9-10 双机通信系统图

串行发送的内容包括数据的个数和数据两部分内容。对数据个数的发送以查询方式进行,而数据则以中断方式传送。因此在程序中要先禁止串行中断,后允许串行中断。

【程序】

单片机串行工作方式1例程说明