基于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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。