PIC17C7XXX有2个USART模块(USART1,USART2),PIC17C4X有1个USART模块,与PIC17C7XXX的USART1完全相同。
USART1 USART2
寄存器:
RCSTA: RCSTA1 RCSTA2
TXSTA: TXSTA1 TXSTA2
SPBRG: SPBRG1 SPBRG2
RCREG: RCREG1 RCREG2
TXREG: TXREG1 TXREG2
中断控制位:
RCIE: RC1IE RC2IE
RCIF: RC1IF RC2IF
TXIE: TX1IE TX2IE
TXIF: TX1IF TX2IF
引脚:
RX/DT: RA4/RX1/DT1 RG6/RX2/DT2
TX/CK: RA5/TX1/CK1 RG7/TX2/CK2
PIC17CXXX中USAR有三种模式:异步方式(全双工)、同步主方式(半双工)、同步从方式(半双工)。
-------------------------------------------------------------------------------------
TXSTA: Bit7->Bit0
CSRC TX9 TXEN SYNC -- -- TRMT TX9D
CSRC: =1是同步方式中的主模式(时钟源为BRG)
=0是同步方式中的从模式(外部时钟源)
无关是异步方式
TX9:发送数据长度位 =1是9位,=0是8位
TXEN:发送使能位 =1是使能发送,=0是禁止发送
SYNC:USART模式选择位 =1是同步模式, =0是异步
TMRT:发送移位寄存器(TSR)空标志位 =1空,=0满
TX9D:第9个数据发送位(可用作软件奇偶计算)
RCSTA: Bit7->Bit0
SPEN RC9 SREN CREN FERR- OERR -- RX9D
SPEN: 串口使能位 =1设置RX/DT和TX/CK为串行口引脚,=0禁止串口功能
RC9:接收数据长度位,=1是9位,=0是8位
SREN:单个接收使能位(在接收一字节数据后,该位自动清除) 同步方式下=1接收使能,=0禁止接收,异步方式无关
CREN:连续接收使能位 异步方式下=1接收使能,=0禁止接收,同步方式下=1连续接收使能直至CREN=0,=0禁止连续接收
FERR:帧错误位 =1帧错误 =0无帧错误
OERR:溢出错误位 =1溢出错误 =0无溢出错误
RC9D:接收数据的第9位
USART有一个8位波特率发生器SPBRG,支持同步与异步通讯。
-------------------------------------------------------------------------------------
USART异步发送步骤:
1. 初始化SPBRG,设置合适的波特率
2. 设置SPEN=1,SYNC=0,使能异步串行口
3. 如需中断,设置TXIE=1
4. 如需发送9位数据,设置TX8/9=1
5. 将数据送入TXREG中
6. 如发送9位数据,第9位数据放入TXD8中
7. 设置TXEN=1,使能发送功能
USART同步主模式发送步骤:
1. 初始化SPBRG,设置合适的波特率
2. 设置SPEN=SYNC=CSRC=1,使能同步主模式功能
3. CREN=SREN=0
4. 如需中断,设置TXIE=1
5. 如需发送9位数据,设置TX8/9=1
6. 将数据送入TXREG中
7. 如需发送9位数据,第9位数据放入TXD8中
8. 设置TXEN=1,使能发送功能
USART同步从模式发送步骤:
1. 设置SYNC=SPEN=1,CSRC=0,使能同步从模式功能
2. CREN=0
3. 如需中断,设置TXIE=1
4. 如需发送9位数据,TX9=1
5. 将数据放入TXREG中
6. 如发送9位数据,第9位数据放入TXD9中
7. 设置TXEN=1,使能发送功能
-------------------------------------------------------------------------------------
USART异步接收步骤:
1. 初始化SPBRG,设置合适的波特率
2. 设置SPEN=1,SYNC=0,使能异步串行口
3. 如需中断,设置RCIE=1
4. 如需接收9位数据,设置RX8/9=1
5. 设置CREN=1,使能接收功能
6. 接收完成后,RCIF=1,如中断使能,这时产生中断
7. 读RCSTA得到第9个数据位(如RX8/9=1)和FERR位
8. 读RCREG寄存器以得到8位接收数据
9. 如有错误发生,清除OERR位
USART同步主模式接收步骤:
1. 初始化SPBRG,设置合适的波特率
2. 设置SPEN=SYNC=CSRC=1,使能同步主模式功能
3. 如需中断,设置RCIE=1
4. 如需接收9位数据,设置RX8/9=1
5. 如需单字接收功能,设置SREN=1,如需连续接收功能,设置CREN=1
6. 接收完成后,RCIF=1,如中断使能,这时产生中断
7. 读RCSTA得到第9个数据位(如RX8/9=1),同步确定接收过程是否正确
8. 读RCREG寄存器以得到8位接收数据
9. 如接收过程有误,清除CREN
USART同步从模式接收步骤:
1. 设置SYNC=SPEN=1,CSRC=0,使能同步从模式功能
2. 如需中断,RCIE=1
3. 如需接收9位数据,RX9=1
4. CREN=1
5. 接收完成后,RCIF=1,中断使能,则产生中断
6. 读RCSTA得到第9个数据位(如RX9=1),确定接收过程是否正确
7. 读RCREG以得到8位数据
8. 如接收过程错误,清除CREN