?? i2c.h
字號:
#define uchar unsigned char
#define uint unsigned int
sbit SCL=P1^4;
sbit SDA=P1^5;
/***********************************************
**函數名稱:I2C_Start()
**函數功能:發送起始條件
**入口參數:無
**出口參數:無
**說明 :時序按照標準模式建立
***********************************************/
void I2C_Start()
{
SDA=1;
_nop_();//數據建立時間大于250ns
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
SCL=0; //SCL高電平時間大于4us,嵌住時鐘總線
}
/***********************************************
**函數名稱:I2C_Stop()
**函數功能:發送停止條件
**入口參數:無
**出口參數:無
**說明 :時序按照標準模式建立
***********************************************/
void I2C_Stop()
{
SDA=0;
_nop_();//數據建立時間大于250ns
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
SCL=0; //SCL高電平時間大于4us,嵌住時鐘總線
}
/***********************************************
**函數名稱:I2C_SendByte()
**函數功能:發送一個字節
**入口參數:待發送字節n
**出口參數:無
**說明 :時序按照標準模式建立
***********************************************/
void I2C_SendByte(char n)
{
uchar i;
for(i=7;i>=0;i--)
{
SDA=n>>i;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
/***********************************************
**函數名稱:I2C_RecByte()
**函數功能:接收一個字節
**入口參數:無
**出口參數:已接收字節
**說明 :時序按照標準模式建立
***********************************************/
I2C_RecByte(void)
{
uchar i;
for(i=7;i>=0;i--)
{
i<<=1;
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
return (i);
}
/***********************************************
**函數名稱:Check_Ack()
**函數功能:檢測從機響應
**入口參數:無
**出口參數:從機響應則為'1',否則為'0'
**說明 :時序按照標準模式建立
***********************************************/
Check_Ack()
{
uchar i=1;
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
i=SDA;
_nop_();
SCL=0;
return (i);
}
/***********************************************
**函數名稱:Gen_Ack()
**函數功能:產生應答
**入口參數:i
**出口參數:無
**說明 :i=1產生應答,i=0產生非應答
***********************************************/
Gen_Ack(uchar i)
{
SDA=i;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
/***********************************************
**函數名稱:I2C_SendNByte()
**函數功能:發送N個字節
**入口參數:字節個數n,待發送數據隊列首地址
**出口參數:無
**說明 :時序按照標準模式建立
***********************************************/
void I2C_SendNByte(uchar n,*p)
{
while(--n)
{
send:I2C_SendByte(*p);
if(Check_ACK) goto send;
p++;
}
}
/***********************************************
**函數名稱:I2C_RecNByte()
**函數功能:接收N個字節
**入口參數:字節個數n,存放數據隊列首地址
**出口參數:無
**說明 :時序按照標準模式建立
***********************************************/
void I2C_RecNByte(uchar n,*p)
{
while(--n)
{
*p=I2C_RecByte();
Gen_Ack(!!(n-1));//用!使得n-1只有1和0兩種結果
p++;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -