📄 i2c.bak
字号:
#include "I2C.h"
/**********************************************************************
* I2C_Delay()
* Delay
**********************************************************************/
void I2C_Delay(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
/**********************************************************************
* void I2C_Start(void)
* Start the i2c device
**********************************************************************/
void I2C_Start(void)
{
SDA=1;SCL=1; // pull up
I2C_Delay();
SDA=0;
I2C_Delay();
SCL=0; // Start
}
/**********************************************************************
* I2C_Stop()
* Stop
**********************************************************************/
void I2C_Stop()
{
SDA=0;SCL=1;
I2C_Delay();
SDA=1;
I2C_Delay();
SCL=0;
}
/**********************************************************************
* I2C_ACK()
* ACK
**********************************************************************/
void I2C_SACK()
{
SDA=0;SCL=1;
I2C_Delay();
SCL=0;SDA=1;
}
/**********************************************************************
* I2C_NACK()
* ACK
**********************************************************************/
void I2C_SNACK()
{
SDA=1;SCL=1;
I2C_Delay();
SCL=0;SDA=0;
}
/**********************************************************************
* I2C_CACK()
* Check ACK
**********************************************************************/
bit I2C_CACK()
{
bit bitTemp;
SDA=1; // wait input
SCL=1; // 9th pulse
I2C_Delay();
I2C_Delay();
if(SDA)
bitTemp= 1;
else
bitTemp= 0;
SCL=0;
return bitTemp;
}
/**********************************************************************
**********************************************************************/
void I2C_WriteOneByte(unsigned char tData) // first Hight Bit.
{
unsigned char i=8;
while(i--)
{
if(tData&0x80)
{SDA=1;SCL=1;I2C_Delay();SCL=0;SDA=0;}
else
{SDA=0;SCL=1;I2C_Delay();SCL=0;}
tData<<=1;
}
}
/**********************************************************************
**********************************************************************/
unsigned char I2C_ReadOneByte() // first Hight Bit
{
unsigned char i=8,tData=0;
while(i--)
{
tData<<=1;
SDA=1;SCL=1;
if(SDA)tData|=0x01;
I2C_Delay();SCL=0;
}
return tData;
}
/**********************************************************************
* DeviceAddr=SLA
* ByteAddr=addr
**********************************************************************/
unsigned char I2C_ReadEEPROM_OneByte(unsigned char SLA,unsigned char addr)
{
unsigned char tdata;
bit bitACK=1;
I2C_Start();
I2C_WriteOneByte(SLA&(~(0x01))); // Write device
bitACK=I2C_CACK();
I2C_WriteOneByte(addr);
bitACK=I2C_CACK();
I2C_Start();
I2C_WriteOneByte(SLA|0x01); // read deviece
bitACK=I2C_CACK();
tdata=I2C_ReadOneByte();
I2C_Stop();
return tdata;
}
/**********************************************************************
**********************************************************************/
void I2C_WriteEEPROM_OneByte(unsigned char SLA,unsigned char addr,unsigned char tdata)
{
bit bitACK=1;
I2C_Start();
I2C_WriteOneByte(SLA&(~(0x01))); // write device
bitACK=I2C_CACK();
I2C_WriteOneByte(addr);
bitACK=I2C_CACK();
I2C_WriteOneByte(tdata);
bitACK=I2C_CACK();
I2C_Stop();
}
/**********************************************************************
**********************************************************************/
/*
void I2C_WriteEEPROM_OnePage(unsigned char SLA,unsigned char page,unsigned char *buff,unsigned int length)
{
;;;;;
}
*/
/**********************************************************************
**********************************************************************/
/*
void I2C_ReadEEPROM_OnePage(unsigned char SLA,unsigned char page,unsigned char *buff,unsigned int length)
{
;;;;;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -