PAGE1
PAGE1
通信接口(UART,I2C,SPI)
1.UART通信接口
1.1UART基本原理
UART(UniversalAsynchronousReceiver-Transmitter)是一种通用异步收发传输器,它允许单片机在不同设备之间进行串行通信。UART通信接口不需要外部时钟信号,因此通信双方只需要共用一个波特率即可。UART通信通常使用两个信号线:RX(接收)和TX(发送)。数据以起始位、数据位、校验位(可选)和停止位的形式进行传输。
1.2PIC16F系列中的UART模块
PIC16F系列单片机中的UART模块通常称为EUSART(EnhancedUniversalSynchronousAsynchronousReceiverTransmitter)。EUSART模块支持同步和异步通信模式,但在大多数应用中,异步模式更为常用。EUSART模块的主要寄存器包括:
RCSTA(ReceiveStatusandControlRegister):接收状态和控制寄存器
TXSTA(TransmitStatusandControlRegister):发送状态和控制寄存器
BAUDCON(BAUDControlRegister):波特率控制寄存器
TXREG(TransmitRegister):发送数据寄存器
RCREG(ReceiveRegister):接收数据寄存器
SPBRG(SerialPortBaudRateGenerator):波特率发生器寄存器
1.3UART初始化
为了使用EUSART模块,首先需要进行初始化设置。以下是一个典型的初始化过程:
配置波特率:设置SPBRG寄存器的值以匹配所需的波特率。
配置RCSTA和TXSTA寄存器:设置接收和发送模式,启用接收和发送功能。
启用EUSART模块:设置相关寄存器以启用EUSART模块。
1.3.1代码示例
以下是一个使用PIC16F877A单片机初始化UART的示例代码:
#includexc.h
#includepic16f877a.h
#define_XTAL_FREQ//晶振频率20MHz
voidUART_Init(unsignedintbaud){
//配置波特率
SPBRG=(unsignedchar)((_XTAL_FREQ/(16UL*baud))-1);
//配置RCSTA和TXSTA寄存器
TXSTA=0//模式选择:异步模式,低波特率,8位传输
RCSTA=0//接收使能,9位模式禁用
//启用UART模块
TRISC|=0//设置TX引脚为输入
TRISC=0//设置RX引脚为输出
TXEN=1;//启用发送
RCEN=1;//启用接收
CREN=1;//启用接收中断
}
voidUART_WriteChar(chardata){
while(!TRMT);//等待发送缓冲区为空
TXREG=data;//发送数据
}
voidUART_WriteString(char*data){
while(*data){
UART_WriteChar(*data);
data++;
}
}
charUART_ReadChar(){
while(!RCIF);//等待接收缓冲区有数据
returnRCREG;//读取数据
}
intmain(void){
//初始化系统
TRISA=0//设置PORTA为输出
TRISB=0//设置PORTB为输出
//初始化UART
UART_Init(9600);//设置波特率为9600
while(1){
//发送字符串
UART_WriteString(Hel