首页 基于dispic30f5015芯片的I2C通信协议源代码

基于dispic30f5015芯片的I2C通信协议源代码

举报
开通vip

基于dispic30f5015芯片的I2C通信协议源代码基于dispic30f5015芯片的I2C通信协议源代码 void StartI2C(void) { I2CCONbits.SEN = 1; //Generate Start COndition while (I2CCONbits.SEN); //Wait for Start COndition } void RestartI2C(void) { I2CCONbits.RSEN = 1; //Generate Restart while (I2CCONbits.RSEN); //Wait for r...

基于dispic30f5015芯片的I2C通信协议源代码
基于dispic30f5015芯片的I2C通信协议源代码 void StartI2C(void) { I2CCONbits.SEN = 1; //Generate Start COndition while (I2CCONbits.SEN); //Wait for Start COndition } void RestartI2C(void) { I2CCONbits.RSEN = 1; //Generate Restart while (I2CCONbits.RSEN); //Wait for restart } void StopI2C(void) { I2CCONbits.PEN = 1; //Generate Stop Condition while (I2CCONbits.PEN); //Wait for Stop } unsigned char WriteI2C(unsigned char byte) { I2CTRN = byte; //Load byte to I2C1 Transmit buffer while (I2CSTATbits.TBF); //wait for data transmission } void IdleI2C(void) { while (I2CSTATbits.TRSTAT); //Wait for bus Idle } unsigned char ACKStatus(void) { return (!I2CSTATbits.ACKSTAT); //Return Ack Status } void NotAckI2C(void) { I2CCONbits.ACKDT = 1; //Set for NotACk I2CCONbits.ACKEN = 1; while(I2CCONbits.ACKEN); //wait for ACK to complete I2CCONbits.ACKDT = 0; //Set for NotACk } void AckI2C(void) { I2CCONbits.ACKDT = 0; //Set for ACk I2CCONbits.ACKEN = 1; while(I2CCONbits.ACKEN); //wait for ACK to complete } unsigned char GetI2C(void) { unsigned char temp; //I2CCONbits.RCEN = 1; //Enable Master receive I2CCONbits.RCEN = 1; while(!I2CSTATbits.RBF); //Wait for receive bufer to be full temp=I2CRCV; return(temp); //Return data in buffer } unsigned int ByteWriteI2C(unsigned char ControlByte, unsigned char HighAdd, unsigned char LowAdd, unsigned char data) { unsigned int ErrorCode; IdleI2C(); //Ensure Module is Idle StartI2C(); //Generate Start COndition WriteI2C(ControlByte); //Write Control byte IdleI2C(); ErrorCode = ACKStatus(); //Return ACK Status WriteI2C(HighAdd); IdleI2C(); //Write High Address WriteI2C(LowAdd); //Write Low Address IdleI2C(); ErrorCode = ACKStatus(); //Return ACK Status WriteI2C(data); //Write Data IdleI2C(); StopI2C(); //Initiate Stop Condition return(ErrorCode); } unsigned char RandomByteReadI2C(unsigned char ControlByte, unsigned char HighAdd, unsigned char LowAdd) { unsigned char temp; unsigned int ErrorCode; IdleI2C(); //Wait for bus Idle StartI2C(); //Generate Start condition WriteI2C(ControlByte); //send control byte for write IdleI2C(); //Wait for bus Idle WriteI2C(HighAdd); //Send High Address IdleI2C(); //Wait for bus Idle WriteI2C(LowAdd); //Send Low Address IdleI2C(); //Wait for bus Idle RestartI2C(); //Generate Restart WriteI2C(ControlByte | 0x01); //send control byte for Read IdleI2C(); //Wait for bus Idle temp=0; temp=GetI2C(); NotAckI2C(); //send Not Ack StopI2C(); //Send Stop Condition return(temp); } void I2CInit() { I2CCON=0x1200; I2CBRG=0x0019; // I2C 400Khz 40-14.4 I2CCON=0x9200; }
本文档为【基于dispic30f5015芯片的I2C通信协议源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_358746
暂无简介~
格式:doc
大小:17KB
软件:Word
页数:4
分类:互联网
上传时间:2017-09-27
浏览量:29