理论教育 USART发送器系统结构解析-零点起步PIC单片机实例

USART发送器系统结构解析-零点起步PIC单片机实例

时间:2023-10-19 理论教育 版权反馈
【摘要】:USART发送器采用双缓冲结构,其系统结构示意图如图9-2所示。2)当要通过USART发送一个数据时,用户把要发送的数据放到发送寄存器中,TXIF被自动清零。当USART发送中断使能位TXIE为1时,系统会向中断控制电路提出中断申请。系统每发送一组数据的速度由发送器的波特率时钟来决定,用bit/s表示。下面总结USART工作于异步发送模式时需要用到的特殊寄存器。

USART发送器系统结构解析-零点起步PIC单片机实例

USART发送器采用双缓冲结构,其系统结构示意图如图9-2所示。

978-7-111-33274-9-Chapter09-3.jpg

图9-2 USART发送器的系统结构示意图

USART发送器的工作过程如下。

1)当USART工作模式选择位SYNC为0时,USART工作于异步模式。

2)当要通过USART发送一个数据时,用户把要发送的数据放到发送寄存器(TXREG)中,TXIF被自动清零。

3)系统会自动用一个指令周期(TCY)的时间把TXREG内容传送到发送移位寄存器TSR(TSR是内部寄存器,用户无法访问)中,传输完成会使TXIF置位。当USART发送中断使能位TXIE为1时,系统会向中断控制电路提出中断申请。若此时GIE和PEIE均为1便会产生中断响应。

4)当串行口使能位SPEN为1时,RC6会被系统用做串行输出引脚TX,TSR中的内容会在波特率时钟(由SPBRG和BRGH决定)的驱动下依次通过TX引脚逐位输出。

5)当TX9信号为1时,TX9D会作为数据的第9位通过TX输出。

6)输出完毕后,发送移位寄存器空标志位(TRMT)会被置位。

系统每发送一组数据的速度由发送器的波特率时钟来决定,用bit/s表示。USART的波特率时钟由一个8位的波特率发生器寄存器(SPBRG)和高波特率选择位(BRGH)决定。BRGH也位于TXSTA寄存器中。

波特率发生器的时钟来源于单片机主频,由SPBRG的内容和BRGH配合来产生某种频率的波特率时钟用来驱动USART发送器(或USART接收器)工作。给出所需的波特率数值和单片机主频FOSC,就可以用表9-2中的公式计算出SPBRG中应该写入的数值X。

表9-2 USART的波特率计算公式

978-7-111-33274-9-Chapter09-4.jpg

然而实际应用中总是已知传输的波特率和单片机主频,所要求的是SPBRG应该写入的数值X。由表9-2可以得到求X的公式,如表9-3所示。

表9-3 USART的SPBRG写入值计算公式

978-7-111-33274-9-Chapter09-5.jpg

下面举例说明SPBRG写入值与波特率误差的计算方法。

【例9-1】已知单片机主频是4MHz,希望USART异步模式下波特率为9600Baud/s,试计算SPBRG的写入值和波特率误差。

题意分析

●SPBRG的写入值通过表9-3的计算公式即可算出。表9-3中异步模式下有两种计算公式,分别计算一下写入值及其波特率误差。

●计算过程中要用到除法,但计算结果只能取整数,导致单片机运行时实际波特率与目标波特率之间存在误差,此误差被称为波特率误差,在实际应用中希望此误差小于5%。

计算过程(www.daowen.com)

1)根据表9-3中异步模式下的公式先计算BRGH=0时的写入值X。

X=(FOSC/(波特率×64))−1=(4000000/(9600×64))−1=5.51042≈6

2)当X为6、BRGH=0时,实际波特率可以通过表9-2得出。

波特率=FOSC/(64(X+1))=8928.57

3)此时的波特率误差如下。

波特率误差=(实际波特率-目标波特率)/目标波特率=|(8928.57−9600)/9600|=6.99%

4)根据表9-3中异步模式下的公式再计算BRGH=1时的写入值X。

X=(FOSC/(波特率×16))−1=(4000000/(9600×16))−1=25.0417≈25

5)当X为25、BRGH=1时,实际波特率可以通过表9-2得出。

波特率=FOSC/(16(X+1))=9615.38

6)此时的波特率误差如下。

波特率误差=(实际波特率−目标波特率)/目标波特率=|(9615.38−9600)/9600|=0.16%

由计算可知,当BRGH=1时误差小很多,符合USART通信的误差要求,可以用此计算值X进行USART通信,而当BRGH=0时波特率误差较大,不符合USART通信的误差要求,不建议使用这样的配置(X=6,BRGH=0)进行USART通信。

在实际应用中,波特率单位是bit/s,波特率数值往往都是300的倍数,如1200bit/s、9600bit/s、19200bit/s、38400bit/s等。为了方便读者使用,表9-4给出了常用主频下常用波特率对应的SPBRG写入值,表9-5给出了常用主频下常用波特率的相对误差

表9-4 常用主频和波特率要求下SPBRG写入值

978-7-111-33274-9-Chapter09-6.jpg

表9-5 常用主频和波特率要求下相对误差表

978-7-111-33274-9-Chapter09-7.jpg

由表9-5可以看出在主频为3.6864MHz时,各种常用波特率的误差都为零,当读者的单片机系统要求精确的USART通信时推荐使用3.6864MHz的晶体振荡器作为主频。

波特率单位bit/s是表示每秒钟能够传输的数据位数,不是纯数据的传输速度。传输的数据中除内容信息外,还包括其他额外的控制位信息。

以上就是USART异步发送器的工作流程及相关数据的计算方法。下面总结USART工作于异步发送模式时需要用到的特殊寄存器。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈