?? iic.h
字號:
//---------------------------------------------------------------------------
//*****************************************************************//
//*************** IIC fuction ******************************//
//*****************************************************************//
//---------------------------------------------------------------------------
sbit scl=P2^0;
sbit sda=P2^1;
//sbit scl2= P2^2;
//sbit sda2 = P2^3;
//這里只寫了兩個I2C設(shè)備,如果需要可以再加上 sbit scl2=xx; sbit sda2=xx; 實際上多個設(shè)備的scl腳可以共用
//---------------------------------------------------------------------------
unsigned char iic_delay_time = 8;
/*
void scl(device,value)
{
if (device==0) //設(shè)備1
scl1=value;
if (device==1) //設(shè)備2
scl2=value;
}
void sda(device,value)
{
if (device==0) //設(shè)備1
sda1=value;
if (device==1) //設(shè)備2
sda2=value;
}
bit sdasense(char device)
{
switch(device)
{
case 1: return sda1;
break;
case 2: return sda2;
break;
}
}
*/
// delay
void iic_delay(unsigned char m)
{
unsigned char n;
for(n=0;n<m;n++);
}
////////////////讀24c01--外部調(diào)用/////////////////////////
//啟動I2C總線的函數(shù),當(dāng)scl為高電平時使sda產(chǎn)生一個負跳變
void iic_start(void)
{
sda=1;//sda=1;
scl=1;//scl=1;
iic_delay(iic_delay_time);
sda=0;
iic_delay(iic_delay_time);
scl=0;
iic_delay(iic_delay_time/2);
}
//終止I2C總線,當(dāng)scl為高電平時使sda產(chǎn)生一個正跳變
void iic_stop(void)
{
scl=0;
sda=0;
scl=1;
iic_delay(iic_delay_time);
sda=1;
iic_delay(iic_delay_time);
}
//發(fā)送應(yīng)答信號
void iic_ack(void) {
sda=0;
scl=1;
scl=0;
sda=1;
}
//發(fā)送無應(yīng)答信號
void iic_noack(void)
{
sda=1;
scl=1;
scl=0;
}
//檢測應(yīng)答信號
bit iic_testack(void)
{
bit errorbit; //真確應(yīng)答,返回0
sda=1;
iic_delay(iic_delay_time);
scl=1;
iic_delay(iic_delay_time);
errorbit=sda;//sdasense(device);
scl=0;
iic_delay(iic_delay_time);
return(errorbit);
}
//發(fā)送一個字節(jié)
void iic_write8bit(unsigned char input)
{
unsigned char temp;
for(temp=0;temp<8;temp++)
{
if((input<<temp)&0x80)
sda=1;
else
sda=0;
scl=1;
iic_delay(iic_delay_time);
scl=0;
}
}
//讀一個字節(jié)
unsigned char iic_read8bit(void)
{
unsigned char temp,rbyte=0;
for(temp=0;temp<8;temp++)
{
scl=1;
iic_delay(iic_delay_time);
if(sda)//sdasense(device))
rbyte=(rbyte<<1)+1;
else
rbyte=rbyte<<1;
scl=0;
}
return(rbyte);
}
//-------------------end 24CXX.H-----------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -