PAGE1
PAGE1
USART通信
USART(UniversalSynchronousAsynchronousReceiver-Transmitter)是PIC18单片机中一个非常重要的外设,用于实现串行通信。它支持异步和同步两种通信模式,可以灵活地与其他设备进行数据交换。本节将详细介绍USART的工作原理、配置方法以及实际应用中的代码示例。
1.USART概述
USART是一种通用的串行通信接口,可以实现全双工通信,即同时进行数据的发送和接收。它支持多种通信标准,如UART、LIN、IrDA等。在PIC18单片机中,USART模块通常包括以下主要功能:
异步模式:支持标准的UART通信,可以设置波特率、数据位、停止位和校验位。
同步模式:支持同步通信,通常用于连接其他单片机或外部设备。
中断支持:可以配置中断,实现数据的自动发送和接收。
环回测试:用于测试通信链路,确保通信正常。
2.异步模式配置
2.1异步模式原理
在异步模式下,USART通过一个时钟源(通常是系统时钟)生成波特率时钟,用于同步数据的发送和接收。异步通信的关键参数包括:
波特率:通信速度,单位为bps(bitspersecond)。
数据位:每个字符的数据位数,通常为8位。
停止位:每个字符结束后的空闲位,通常为1位。
校验位:用于检测数据传输错误的位,可以为奇校验、偶校验或无校验。
2.2配置步骤
设置波特率:通过配置BRG16、BRGH和SPBRG寄存器来设置波特率。
配置数据位、停止位和校验位:通过TX9、RX9、SPEN、SYNC、CSRC和PDSEL寄存器来配置。
使能USART:通过TXEN和RCEN寄存器使能发送和接收。
配置中断:通过TXIE和RXIE寄存器使能发送和接收中断。
2.3代码示例
以下是一个配置USART在异步模式下工作的示例代码。假设我们使用的是PIC18F4550单片机,系统时钟为20MHz,波特率为9600bps。
#includexc.h
#includestdio.h
#includestdlib.h
//定义系统时钟频率
#defineFOSC
#defineBRGVAL((FOSC/(16*9600))-1)
voidUSART_Init(unsignedlongbaudrate){
TRISC6=1;//设置RC6作为输入(RX)
TRISC7=0;//设置RC7作为输出(TX)
//配置波特率
SPBRG=BRGVAL;
BRG16=0;//使用8位波特率发生器
BRGH=1;//高速波特率
//配置数据位、停止位和校验位
TX9=0;//8位数据
RX9=0;//8位数据
SPEN=1;//使能串行通信
SYNC=0;//异步模式
CSRC=1;//内部时钟源
PDSEL=0;//1个停止位,无校验
//使能发送和接收
TXEN=1;
RCEN=1;
//使能接收中断
RXIE=1;
GIE=1;//全局中断使能
PEIE=1;//外设中断使能
}
voidUSART_Write(chardata){
while(!TRMT);//等待发送完成
TXREG=data;//发送数据
}
charUSART_Read(void){
while(!RCIF);//等待接收完成
returnRCREG;//读取数据
}
void__interrupt()USART_Interrupt(void){
if(RCIF){//接收中断
chardata=RCREG;
//处理接收到的数据
USART_Write(data);//回显接收到的数据
}
//清除中断标志
RCIF=0;
}
voidmain(void){
//初始化USART
USART_Init(9600);
while(1){
//主程序可以在这里执行其他任务
}
}
2.4代码解释