PIC单片机之I2C(从模式)实例讲解.doc

上传人:鲁** 文档编号:561740777 上传时间:2022-10-21 格式:DOC 页数:9 大小:140.51KB
返回 下载 相关 举报
PIC单片机之I2C(从模式)实例讲解.doc_第1页
第1页 / 共9页
PIC单片机之I2C(从模式)实例讲解.doc_第2页
第2页 / 共9页
PIC单片机之I2C(从模式)实例讲解.doc_第3页
第3页 / 共9页
PIC单片机之I2C(从模式)实例讲解.doc_第4页
第4页 / 共9页
PIC单片机之I2C(从模式)实例讲解.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《PIC单片机之I2C(从模式)实例讲解.doc》由会员分享,可在线阅读,更多相关《PIC单片机之I2C(从模式)实例讲解.doc(9页珍藏版)》请在金锄头文库上搜索。

1、PIC单片机之I2C(从模式)实例讲解来源:大比特商务网摘要:网上有许多讲解单片机实现I2C主模式,但是从模式的很少。我现在就来讲讲PIC单片机使用MSSP模块实现I2C从模式。关键字:单片机,寄存器,I2C网上有许多讲解单片机实现I2C主模式,但是从模式的很少。我现在就来讲讲PIC单片机使用MSSP模块实现I2C从模式。有关I2C协议的具体介绍可以看 PIC单片机之I2C(主模式),我们这里直接讲解实例实例讲解:我们模仿 AT24C02 EEPROM 的协议。让一个主模式的单片机,来读取从模式单片机的数据。下面为AT24C02的随机地址读取的协议。第一个字节 :输入7位地址和一位的写状态位,

2、第二个字节:然后写入EEPROM数据地址,第三个字节:输入7位地址和一位的读状态位,第四N个字节:读出的EEPROM的数据。我们来讲解下程序的基本思路:我们使能了MSSP中断,即是I2C接收中断,当PIC单片机接收到一个数据后就会产生中断。那是接收到设备地址,还是接收到数据,由SSP1STAT寄存器的状态位来判断。需要判断的状态位分别是 :数据和地址: 用来判断接收到是地址还是数据1启动位: 用来判断是否接收到启动位读写: 用来判断是写状态还是读状态。缓存满: 用来判断缓冲区是否满我们以随机地址读取为例:讲讲程序执行的过程1,从单片机接收到启示位和设备地址中断:我们判断SSP1STAT的状态位

3、为(写状态,地址,缓存满,接收到启示位) 然后读取缓存中的设备地址, 接着在读取需要读/写的数据地址。2,单片机再次接收到设备地址:我们判断是SSP1STAT的状态为(读状态)然后从设备就输出数据我们以写字节数据为例:1,从单片机接收到启示位和设备地址中断:我们判断SSP1STAT的状态位为(写状态,地址,缓存满,接收到启示位) 然后读取缓存中的设备地址, 接着在读取需要读/写的数据地址。2,单片机判断SSP1STAT的状态位为(写状态,数据,缓存满)那么单片机就接收输入的数据。初始化设置:1,设置I2C通信的两引脚为CLK SCL为输入,TRISB6 = input;TRISB4 = inp

4、ut;2,将MSSP设置为I2C从模式,七位从地址SSP1CONbits.SSPM0 = 0;SSP1CONbits.SSPM1 = 1;SSP1CONbits.SSPM2 = 1;SSP1CONbits.SSPM3 = 0;/ I2C slave mode ,7bit address3,使能CLK时钟SSP1CONbits.CKP = 1; / enable clock4,设置从设备地址为 0xA0SSP1ADD =0xA0; /slave address is 0xa05,开启I2CSSP1CONbits.SSPEN=1;/enable I2c6,清楚状态标志SSPSTAT=0;7,使能I

5、2C中断PIE1bits.SSP1IE = 1;/Enabe interrupt MSSPINTCONbits.PEIE = 1;INTCONbits.GIE = 1;如果你要使用PIC单片机I2C从模式只要使用下面的代码:将void i2c_salve_interrupt_tx();void i2c_salve_interrupt_rx();放到中断程序中,如下:void interrupt isr(void)if(SSP1IE & SSP1IF)i2c_salve_interrupt_tx();i2c_salve_interrupt_rx();SSP1IF=0;将初始化函数init_i2c

6、_slave();放到主函数中void main()init_i2c_slave();头文件 :i2c_salve.h#ifndef _I2C_SALVE_H#define _I2C_SALVE_Hvoid init_i2c_slave();void i2c_salve_interrupt_tx();void i2c_salve_interrupt_rx();#endif代码:i2c_salve.c#include ;#define input 1#define RX_BUF_LEN 29#define while_delay 6000unsigned char i2c_address,wor

7、d_address,Register29;unsigned char RANDOM_READ,i2c_counter;extern unsigned char A_readflag;/*I2C SALVE */void init_i2c_slave()TRISB6 = input;TRISB4 = input;SSP1CONbits.SSPM0 = 0;SSP1CONbits.SSPM1 = 1;SSP1CONbits.SSPM2 = 1;SSP1CONbits.SSPM3 = 0;/ I2C slave mode ,7bit addressSSP1CONbits.CKP = 1; / ena

8、ble clockSSP1ADD =0xA0; /slave address is 0xa0SSP1CONbits.SSPEN=1;/enable I2cSSPSTAT=0;PIE1bits.SSP1IE = 1;/Enabe interrupt MSSPINTCONbits.PEIE = 1;INTCONbits.GIE = 1;/*I2C salve mode interrupt */void i2c_salve_interrupt_tx()/master readunsigned char Temp;unsigned int timercounter;Temp=SSP1STAT;Temp

9、 &= 0x2D;if(SSP1STATbits.R_nW =1)/Read operation.A_readflag=0;SSP1IF = 0;i2c_address = SSP1BUF;i2c_counter = word_address;while(i2c_counter =RX_BUF_LEN)word_address=0;相关文章推荐:1、 基于PIC单片机的机器人灵巧手的控制系统设计2、 基于PIC单片机的逆变电路设计初探3、 基于PIC单片机控制的RLC智能测量仪4、 用PIC微控制器设计LED驱动控制电路的考虑5、 基于PIC单片机的LED点阵手写屏设计6、 基于PIC单片机的新型冲水器的设计7、 基于PIC单片机的智能IC卡燃气表电控系统设计8、 基于PIC单片机的电能表时钟误差分析仪的研究9、 基于PIC单片机的电动自行车控制系统设计

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号