PAGE1
PAGE1
PIC18F系列的USART模块
引言
USART(UniversalSynchronousAsynchronousReceiverTransmitter)是一种通用的串行通信接口,可以在同步和异步模式下工作。PIC18F系列单片机的USART模块可以实现与其他设备的串行通信,支持多种波特率和数据格式。本节将详细介绍PIC18F系列单片机的USART模块的工作原理、配置方法和应用示例。
USART模块的工作原理
异步模式
在异步模式下,USART模块通过起始位、数据位、校验位和停止位来传输数据。每个数据帧通常包括1个起始位(低电平)、5到9个数据位、0或1个校验位(奇校验或偶校验)和1到2个停止位(高电平)。波特率是由系统时钟和分频器设置的,确保数据传输的同步。
同步模式
在同步模式下,USART模块通过一个同步时钟信号来传输数据。这种模式下,数据传输的同步由时钟信号控制,通常用于连接其他同步设备,如I2C或SPI。同步模式可以提高数据传输的可靠性,但需要额外的时钟线。
USART寄存器
PIC18F系列单片机的USART模块通过以下几个主要寄存器进行配置和控制:
RCSTA(ReceiveStatusandControlRegister):接收状态和控制寄存器
TXSTA(TransmitStatusandControlRegister):发送状态和控制寄存器
BAUDCON(BaudRateControlRegister):波特率控制寄存器
TXREG(TransmitBuffer):发送缓冲寄存器
RCREG(ReceiveBuffer):接收缓冲寄存器
SPBRG(BaudRateGenerator):波特率生成器寄存器
配置步骤
设置波特率:通过配置SPBRG寄存器和BAUDCON寄存器来设定波特率。
配置数据格式:通过TXSTA和RCSTA寄存器设置数据位数、校验位和停止位。
启用USART模块:通过TXSTA和RCSTA寄存器启用发送和接收功能。
中断配置:配置中断寄存器以处理发送和接收事件。
异步模式配置示例
设置波特率
波特率的设置是通过SPBRG寄存器来完成的。计算公式如下:
SPBRG
其中,Fosc是系统时钟频率,BaudRate是所需的波特率。
//设置波特率为9600,假设Fosc为4MHz
#defineFOSC4000000
#defineBAUD_RATE9600
voidconfigureUSART(){
SPBRG=(FOSC/(16*BAUD_RATE))-1;//计算SPBRG值
TXSTA=0//配置为异步模式,8位数据位,无校验位,1位停止位
RCSTA=0//启用接收器,选择异步模式
TRISB=0//设置RB0为输出(TX)和RB1为输入(RX)
TXSTAbits.TX9=0;//8位数据
TXSTAbits.TXEN=1;//启用发送
RCSTAbits.SPEN=1;//启用串行端口
RCSTAbits.CREN=1;//启用接收
}
发送数据
在异步模式下,数据通过TXREG寄存器发送。当TXREG寄存器为空时,可以写入新的数据。
voidsendUSARTChar(chardata){
while(!TXSTAbits.TRMT);//等待发送缓冲器为空
TXREG=data;//发送数据
}
接收数据
在异步模式下,数据通过RCREG寄存器接收。当RCREG寄存器中有数据时,可以读取。
charreceiveUSARTChar(){
while(!PIR1bits.RCIF);//等待接收缓冲器有数据
returnRCREG;//读取数据
}
中断配置
为了提高程序的效率,可以配置USART的中断。当数据发送完成或接收缓冲器中有数据时,中断会被触发。
voidconfigureUSARTInterrupt(){
PIE1bits.RCIE=1;//启用接收中断
PIE1bits.TXIE=1;//启用发送中断
PIR1bits.RCIF=0;//清除接收中断标志
PIR1bits.TXIF=0;//清除发送中断标志
INTCONbits.PEIE=1;//启用外设中断