?? i2c_fun.h
字號:
//I2C總線基本操作 C51驅(qū)動函數(shù)///////
#define HIGH 1
#define LOW 0
#define FALSE 0
#define TRUE ~FALSE
//#define uchar unsigned char
sbit SCL=P1^6;
sbit SDA=P1^7;
void delay(void)
{
uchar i;
i=10;
while(i--);
}
//提供I2C總線工作時序中的起始位////
void I_start(void)
{
SDA=HIGH;
SCL=HIGH;
delay();
SCL=LOW;
delay();
SCL=HIGH;
delay();
SDA=LOW;
delay();
SCL=LOW;
delay();
//SDA=HIGH;
}
//提供I2C總線工作時序中的停止位////
void I_stop(void)
{
SDA=LOW;
delay();
SCL=HIGH;
delay();
SDA=HIGH;
delay();
SCL=LOW;
delay();
}
//I2C初始化/////////
void I_init(void)
{
SCL=LOW;
I_stop();
}
////提供I2C的時鐘信號,并返回在時鐘電平為高期間的SDA信號線上的狀態(tài)////////
bit I_clock(void)
{
bit sample;
SCL=HIGH;
delay();
sample=SDA;
SCL=LOW;
delay();
return(sample);
}
////向I2C總線發(fā)送一個8位數(shù)據(jù),并請求一個應答信號ACK,若受到ACK則返回1,否則返回0/////////
bit I_send(uchar I_data)
{
uchar I;
for(I=0;I<8;I++)
{
SDA=(bit)(I_data & 0x80);
I_data=I_data<<1;
I_clock();
}
///////////require ACK//////////
SDA=HIGH;
return(~I_clock());
}
//接受8位數(shù)據(jù),并將此8位數(shù)據(jù)按一個字節(jié)返回,不回送ACK。調(diào)用本函數(shù)前,應保證SDA處于浮置狀態(tài)///
uchar I_receive(void)
{
uchar I_data=0;
uchar I;
I_data=0;
for(I=0;I<8;I++)
{
I_data*=2;
if(I_clock())
I_data++;
}
return(I_data);
}
///向I2C總線發(fā)送一個ACK
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -