基本信息
文件名称:Microchip 系列:PIC16 系列_11.通信接口(UART,I2C,SPI).docx
文件大小:26.61 KB
总页数:18 页
更新时间:2025-06-23
总字数:约1.08万字
文档摘要

PAGE1

PAGE1

11.通信接口(UART,I2C,SPI)

11.1UART通信接口

11.1.1UART基本原理

UART(UniversalAsynchronousReceiver/Transmitter)是一种通用的异步串行通信接口,用于实现两个设备之间的数据传输。在PIC16系列单片机中,UART通常通过EUSART(EnhancedUniversalAsynchronousReceiver/Transmitter)模块来实现。EUSART模块支持标准的UART通信,包括数据的发送和接收。

UART通信的基本原理如下:

发送数据:数据在发送方被逐位通过串行接口发送出去。

接收数据:数据在接收方被逐位通过串行接口接收。

波特率:发送和接收数据的速率必须相同,通常以波特率(bps)表示。

帧格式:UART通信的数据帧通常包括起始位、数据位、校验位和停止位。

11.1.2UART配置

在PIC16系列单片机中,配置UART通信需要设置相关的寄存器,包括:

TXSTA:传输状态和控制寄存器

RCSTA:接收状态和控制寄存器

BAUDCON:波特率控制寄存器

TXREG:传输数据寄存器

RCREG:接收数据寄存器

SPBRG:波特率发生器寄存器

配置UART的步骤如下:

选择波特率:根据所需的通信速率计算SPBRG寄存器的值。

配置TXSTA和RCSTA寄存器:设置数据位、校验位、停止位等通信参数。

使能UART模块:通过设置相应的控制寄存器使能UART模块。

中断配置:如果需要使用中断,配置相应的中断寄存器。

11.1.3UART代码示例

以下是一个使用PIC16F877A单片机通过UART发送和接收数据的代码示例:

#includexc.h

#includepic16f877a.h

#includestdio.h

#includestdlib.h

//配置波特率

#defineFOSC4000000UL//振荡器频率

#defineBAUDRATE9600//波特率

#defineSPBRG_VALUE((FOSC/(16UL*BAUDRATE))-1)

voidUART_Init(unsignedintbaudrate){

SPBRG=SPBRG_VALUE;//设置波特率发生器

TRISC6=1;//设置RC6为输入(RX)

TRISC7=0;//设置RC7为输出(TX)

TXSTA=0x20;//配置传输状态和控制寄存器

RCSTA=0x90;//配置接收状态和控制寄存器

TXSTA|=(1TX9D);//选择9位数据模式

RCSTA|=(1RX9);//选择9位数据模式

BAUDCON=0x00;//配置波特率控制寄存器

TXSTA|=(1TXEN);//使能传输

RCSTA|=(1CREN);//使能接收

}

voidUART_Write(chardata){

while(!TXIF);//等待传输完成

TXREG=data;//发送数据

}

charUART_Read(){

while(!RCIF);//等待接收完成

returnRCREG;//返回接收到的数据

}

voidUART_WriteString(constchar*str){

while(*str){

UART_Write(*str);//逐字节发送字符串

str++;

}

}

voidmain(void){

ANSEL=0;//关闭模拟输入

ANSELH=0;//关闭模拟输入

CMCON=0x07;//关闭比较器

TRISA=0xFF;//设置PORTA为输入

TRISB=0xFF;//设置PORTB为输入

TRISC=0x00;//设置PORTC为输出

UART_Init(BAUDRATE);//