2.2 异步串行通信软件设计
2.2.1 PIC单片机与USART模块相关的寄存器
PIC单片机USART模块的两条外接引脚是与输入/输出端口RC模块公用的RC7/RX/DT和RC6/TX/CK两条口线,与USART模块有关的寄存器共有9个。
在此.就PIC工作于USART模式时,所涉及的一些位进行介绍,详见表1。
中断控制寄存器INTCON,第一外围设备中断标志寄存器PIR1。第一外围设备中断屏蔽寄存器PIE1,端口C方向寄存器TRISC,发送状态和控制寄存器TXSTA,接收状态和控制寄存器RCSTA,发送寄存器TXREG,接收寄存器RCREG,波特率寄存器SPBRG。
2.2.2 USART模块波特率设置
USART模块带一个8位的波特率发生器(BRG),BRG支持USART的同步方式和异步方式。用波特率寄存器SPBRG控制一个独立的8位定时器周期。波特率发生器可以根据BRGH位(发送状态和控制寄存器TXSTA的位2)的设置,产生两种不同的移位速度,分别是对于系统时钟16分频和64分频得到的波特率时钟。用波特率寄存器SPBRG控制一个独立的8位定时器周期。在异步方式下,BRGH位也被用来控制波特率;在同步方式下。不用BRGH位。表2给出了在主控方式下,不同USART工作方式的波特率计算公式(x为写入SPBRG寄存器的值)。
2.2.3 通信程序设计
要实现系统的正常数据传输,正确设置PIC异步串口USART至关重要。在此,以异步接收方式为例,编写程序应遵循以下几个步骤:
(1)选择合适的波特率,然后根据表2计算出SPBRG寄存器的值(x),并将其写入SPBRG寄存器;
(2)设置SYNC=0,SPEN=1,使USART工作于异步方式;
(3)如需中断功能,将中断控制寄存器的中断屏蔽GIE和PEIE置1,同时置第一外围设备中断屏蔽寄存器的RCIE=1;
(4)如需接收9位数据,置接收状态和控制寄存器的RX9=1;
(5)置接收状态和控制寄存器的CREN=1,激活接收器;
(6)当一个字节接收完后,产生中断请求,如果RCIE=1,便产生中断;
(7)读RCSTA寄存器以便获得第9位数据(如果选择了接收9位数据),并且判断是否在接收过程中发生了错误;
(8)读RCREG寄存器中已经收到的8位数据;
(9)如果发生了接收错误,通过置CREN=0以清除错误标志。
下面给出了串口的初始化程序:
bsf STATUS,RP0 ;选择存储体1
bcf STATUS,RP1
bsf TRISC,7 ;设置RC7脚为输入状态
bcf TRISC,6 ;设置RC6脚为输出状态
movlw 25H ;设置波特率
movwf SPBRG
movlw 20H ;设定8位发送/接收
movwf TXSTA ;设定异步方式。低速方式
bsf PIE1,TXI ;使能发送器中断
bsf PIE1,RCIE ;使能接收器中断
bcf STATUS,RP0 ;选择存储体0
movlw 0x90 ;设定8位接收,使能接收器
movwf RCSTA ;使能串口