51 단편기 I2C 버스 코드
1580 단어 실험 연습
void I2Cstart()//
{
SDA=1;
SCL=1;
SDA=0;
delay1ms(4);
SCL=0;
delay1ms(4);
}
void I2Cstop()//
{
SCL=0;
delay1ms(4);
SDA=0;
delay1ms(4);
SCL=1;
delay1ms(4);
SDA=1;
delay1ms(4);
}
unsigned char I2Creadack()
{
unsigned char i,byte;
byte=0;
for(i=0;i<8;i++)
{
SCL=0;
SDA=1;
delay1ms(4);
byte<<=1;
if(SDA==1)
{
byte|=0x01;
delay1ms(4);
}
}
SCL=0;
delay1ms(4);
SDA=0;
delay1ms(4);
SCL=1;
delay1ms(4);
SCL=0;
return byte;
}
void I2Csend(unsigned char byte)//I2C
{
unsigned char mask,i;
for(i=0;i<8;i++)
{
SCL=0;
if((mask&byte)==0)
{
SDA=0;
}
else
{
SDA=1;
}
mask>>=1;
delay1ms(4);
SCL=1;//
delay1ms(4);
}
SCL=0;
SDA=1; //
delay1ms(4);
SCL=1;
delay1ms(4);//
SCL=0;
}
unsigned char I2Cread(void)
{
unsigned char i,byte;
byte =0;
for(i=0;i<8;i++)
{
SCL=0;
SDA=1;//
delay1ms(4);
SCL=1;//
delay1ms(4);
byte<<=1;
if(SDA==1)
{
byte|=0x01;
}
delay1ms(4);
}
SCL=0;
delay1ms(4);
SDA=0;//
delay1ms(4);
SCL=1;
delay1ms(4);
SCL=0;
return byte;
}
unsigned char I2Cread_eeprom(unsigned char addr)//I2C
{
unsigned char datebyte,datebyte2;
I2Cstart();
I2Csend(0xa0);//
I2Csend(addr);
I2Cstart();
I2Csend(0xa1);//
datebyte2=I2Creadack();
datebyte=I2Cread();
I2Cstop();
return datebyte;
}
void write_eeprom(unsigned char addr,unsigned char datebyte)
{
I2Cstart();
I2Csend(0xa0);
I2Csend(addr);
I2Csend(datebyte);
I2Cstop();
}