📄 i2c.c
字号:
#include "externh.h"
#define I2CDLY 2
void I2CStart(void);
void I2CStop(void);
void I2CAck(unsigned char ack);
void I2CTx(unsigned char ch);
unsigned char I2CRx(void);
void I2CSetReadAddr(I2CAddr_T Addr);
void I2CDelay(U8 ms)
{
while(ms--);
}
void I2CStart(void)
{
SetBit(I2CPort,SDA); /*发送起始条件的数据信号*/
SetBit(I2CPort,SCL);
I2CDelay(I2CDLY);
ClrBit(I2CPort,SDA); /*发送起始信号*/
I2CDelay(I2CDLY);
I2CDelay(I2CDLY);
ClrBit(I2CPort,SCL); /*钳住I2C总线,准备发送或接收数据 */
}
void I2CStop(void)
{
ClrBit(I2CPort,SDA); /*发送结束条件的数据信号*/
I2CDelay(I2CDLY);
SetBit(I2CPort,SCL); /*结束条件建立时间大于4μs*/
I2CDelay(I2CDLY);
I2CDelay(I2CDLY);
SetBit(I2CPort,SDA); /*发送I2C总线结束信号*/
}
void I2CAck(unsigned char ack)
{
ClrBit(I2CPort,SDA);
if(ack) SetBit(I2CPort,SDA);
I2CDelay(I2CDLY);
SetBit(I2CPort,SCL);
I2CDelay(I2CDLY);
ClrBit(I2CPort,SCL);
}
void I2CTx(unsigned char ch)
{
unsigned char i;
for(i=0;i<8;i++){
ClrBit(I2CPort,SCL);
I2CDelay(I2CDLY);
ClrBit(I2CPort,SDA);
if(ch&0x80) SetBit(I2CPort,SDA);
I2CDelay(I2CDLY);
SetBit(I2CPort,SCL);
I2CDelay(I2CDLY);
ch <<=1;
}
ClrBit(I2CPort,SCL);
I2CDelay(I2CDLY);
SetBit(I2CPort,SDA); //Set Input.
I2CDelay(I2CDLY);
SetBit(I2CPort,SCL);
I2CDelay(I2CDLY);
while(ChkBit(I2CPort,SDA));
ClrBit(I2CPort,SCL);
}
unsigned char I2CRx(void)
{
unsigned char i,ch;
SetBit(I2CPort,SDA);
i=0;
for(i=0;i<8;i++){
ClrBit(I2CPort,SCL);
I2CDelay(I2CDLY);
SetBit(I2CPort,SCL);
I2CDelay(I2CDLY);
ch <<=1;
if(ChkBit(I2CPort,SDA)) ch |=0x01;
ClrBit(I2CPort,SCL);
}
ClrBit(I2CPort,SCL);
return(ch);
}
void I2CReadStr(I2CAddr_T Addr,unsigned char *ptr,unsigned char num)
{
U8 i;
I2CStart();
I2CTx(0xa0);
#if I2CSIZE>2
I2CTx(Addr/256);
#endif
I2CTx(Addr%256);
I2CStart();
I2CTx(0xa1);
for(i=0;i<num-1;i++){
*ptr++=I2CRx();
I2CAck(0);
}
*ptr=I2CRx();
I2CAck(1);
I2CStop();
}
void I2CWriteStr(I2CAddr_T Addr,unsigned char *ptr,unsigned char num)
{
while(num--){
I2CStart();
I2CTx(0xa0);
#if I2CSIZE>2
I2CTx(Addr/256);
#endif
I2CTx(Addr%256);
I2CTx(*ptr);
I2CStop();
ptr++;
Addr++;
Delay(3);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -