PAGE1
PAGE1
PIC18系列的通信接口(UART、I2C、SPI)
UART通信接口
UART简介
UART(UniversalAsynchronousReceiver-Transmitter)是一种通用异步收发传输器,用于实现单片机之间的串行通信。UART通信接口可以实现全双工通信,即同时进行数据的发送和接收。在PIC18系列单片机中,UART通常通过USART(UniversalSynchronousandAsynchronousReceiverandTransmitter)模块实现,该模块支持同步和异步通信模式。
UART模块配置
在PIC18系列单片机中,USART模块的配置主要涉及以下几个寄存器:
TXSTA:传输状态和控制寄存器
RCSTA:接收状态和控制寄存器
BAUDCON:波特率控制寄存器
TXREG:发送寄存器
RCREG:接收寄存器
SPBRG:波特率发生器寄存器
配置步骤
设置波特率:通过SPBRG寄存器设置波特率。
配置传输和接收控制寄存器:设置TXSTA和RCSTA寄存器以启用UART模块。
配置中断:如果需要使用中断,配置相应的中断寄存器。
数据发送和接收:使用TXREG和RCREG寄存器进行数据的发送和接收。
示例代码
以下是一个简单的UART配置和数据传输的示例代码,使用C语言编写。
#includexc.h
#includestdio.h
#includestdlib.h
//配置波特率为9600,使用8MHz晶振
#defineFCY8000000UL
#defineBAUD9600
#defineBRGVAL((FCY/16/BAUD)-1)
voidUART_Init(void){
//设置波特率
SPBRG=BRGVAL;
//配置TXSTA寄存器
TXSTA=0x20;//模式选择:异步,8位传输,无奇偶校验,1位停止位
TXSTAbits.TXEN=1;//启用发送
//配置RCSTA寄存器
RCSTA=0x90;//启用接收,选择9位数据模式
//配置TRIS寄存器
TRISCbits.TRISC6=1;//RX引脚设置为输入
TRISCbits.TRISC7=0;//TX引脚设置为输出
//配置中断
PIE1bits.RCIE=1;//使能接收中断
INTCONbits.PEIE=1;//使能外设中断
INTCONbits.GIE=1;//使能全局中断
}
voidUART_WriteChar(chardata){
while(!TXSTAbits.TRMT);//等待发送完成
TXREG=data;//发送数据
}
voidUART_WriteString(char*str){
while(*str){
UART_WriteChar(*str++);
}
}
charUART_ReadChar(void){
while(!PIR1bits.RCIF);//等待数据接收完成
returnRCREG;//返回接收到的数据
}
voidUART_ReadString(char*str,intlength){
inti;
for(i=0;ilength;i++){
str[i]=UART_ReadChar();
}
str[length]=\0;//结束字符串
}
void__interrupt()UART_ISR(void){
if(PIR1bits.RCIF){
chardata=RCREG;//读取接收到的数据
UART_WriteChar(data);//回显接收到的数据
PIR1bits.RCIF=0;//清除接收中断标志
}
}
intmain(void){
//初始化UART
UART_Init();
//发送字符串
UART_WriteString(Hello,UART!\r\n);
while(1