PAGE1
PAGE1
PIC18F系列的I2C模块
I2C模块简介
I2C(Inter-IntegratedCircuit)是一种同步、半双工、多主机、多从机的串行通信总线,由Philips公司(现NXP)在1980年代开发。I2C总线在单片机系统中广泛用于连接各种外设,如EEPROM、温度传感器、ADC等。PIC18F系列单片机集成了I2C模块,支持主模式和从模式的通信。
I2C总线的基本特性
两线通信:I2C总线使用两条线,即SDA(数据线)和SCL(时钟线)。
多设备通信:I2C总线支持多个主设备和从设备,通过设备地址进行寻址。
同步通信:数据传输由时钟线SCL同步。
半双工通信:同一时间内只能有一个方向的数据传输。
简单的仲裁机制:支持多主设备之间的仲裁,避免数据冲突。
PIC18F系列的I2C模块功能
PIC18F系列单片机的I2C模块具有以下功能:
主模式:作为I2C总线的主设备,控制数据的读写操作。
从模式:作为I2C总线的从设备,响应主设备的读写请求。
可配置的数据传输速率:支持标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。
中断支持:可以在数据传输过程中产生中断,方便处理复杂的通信任务。
支持7位和10位设备地址:可以根据需要选择不同的地址格式。
I2C模块的寄存器
PIC18F系列单片机的I2C模块使用多个寄存器来控制和配置通信。以下是一些主要的寄存器及其功能:
I2C控制寄存器(SSPCON1)
位|名称|描述|
|—-|——|——|
7|PEN|停止条件使能位|
6|RSEN|重新启动条件使能位|
5|SEN|启动条件使能位|
4|RCIEN|接收完成中断使能位|
3|SCLIEN|时钟中断使能位|
2|SDOIF|数据输出中断标志位|
1|SDAIF|数据输入中断标志位|
0|I2CEN|I2C使能位|
I2C状态寄存器(SSPSTAT)
位|名称|描述|
|—-|——|——|
7|BF|缓冲区满标志位|
6|UA|未决地址标志位|
5|R/W|读/写选择位|
4|S|模式选择位|
3|P|停止条件检测位|
2|D_A|数据/地址选择位|
1|CKE|时钟输出使能位|
0|CKP|时钟极性选择位|
I2C从机地址寄存器(SSPADD)
7:1位:从设备地址(7位地址模式)或从设备地址的高7位(10位地址模式)。
0位:10位地址模式的低2位。
I2C数据寄存器(SSPBUF)
7:0位:8位数据缓冲区,用于读写数据。
I2C波特率控制寄存器(SSPBRG)
7:0位:波特率控制寄存器,用于设置I2C通信的波特率。
I2C中断标志寄存器(PIR1)
位|名称|描述|
|—-|——|——|
6|SSPIF|I2C中断标志位|
I2C中断使能寄存器(PIE1)
位|名称|描述|
|—-|——|——|
6|SSPIE|I2C中断使能位|
I2C中断优先级寄存器(IPR1)
位|名称|描述|
|—-|——|——|
6|SSP1IP|I2C中断优先级位|
I2C模块的配置
要使用PIC18F系列单片机的I2C模块,首先需要对其进行配置。配置步骤包括设置I2C使能、波特率、地址模式等。
配置I2C主模式
以下是一个配置I2C主模式的例子:
//配置I2C主模式
voidI2C_Master_Init(unsignedintbaud){
//使能I2C模块
SSPCON1=0x28;//主模式,I2C使能
SSPCON2=0x00;//清除所有使能位
//设置波特率
SSPBRG=baud;
//使能全局中断和外设中断
INTCONbits.GIE=1;
INTCONbits.PEIE=1;
//使能I2C中断
PIE1bits.SSPIE=1;
PIR1bits.SSPIF=0;//清除中断标志位
//设置I2C引脚
TRISBbits.TRISB7=1;//SDA引脚设置为输入
TRISBbits.TRISB6=1;//SCL引脚设置为输入
}
//发送启动条件
voidI2C_Master_Start(){
SSPCON2bits.SEN=1;//发送启动条件