?? i2c.h
字號:
/*--------------------------------------------------------------------------
I2C.H
Design For : I2C 器件
Description: I2C總線的高速傳輸模式(晶振:12MHz)
所有函數(shù)為模擬I2C總線的最底層驅(qū)動(dòng)函數(shù)
Author:xieqin
CopyRight:2004.9.7
--------------------------------------------------------------------------*/
#ifndef __I2C_H__
#define __I2C_H__
#include<intrins.h>
sbit SCL=P1^1; //串行時(shí)鐘口
sbit SDA=P1^0; //串行數(shù)據(jù)口
void Delay_I2C() //I2C總線延時(shí)函數(shù)
{
unsigned char i=1;
while(i--);
}
void Start_I2C() //申請I2C總線函數(shù)
{
SDA=1;
SCL=1; //拉起時(shí)鐘線
SDA=0; //SDA完在一次由高到低的跳變
SCL=0; //SCL線拉低,等待下一步寫數(shù)據(jù)操作
}
void Stop_I2C() //釋放I2C總線函數(shù)
{
SDA=0;
SCL=1; //拉起時(shí)鐘線
SDA=1; //SDA完成一次由低到高的跳變
}
void AckS_I2C(bit c) //發(fā)送應(yīng)答位函數(shù)(c=1無效應(yīng)答,c=0有效應(yīng)答
{
if(c)SDA=1; //無效應(yīng)答;SDA=1
else SDA=0; //有效應(yīng)答;SDA=0
SCL=1;
Delay_I2C();
SCL=0;
}
bit SendByte_I2C(unsigned char val)//發(fā)送單字節(jié)數(shù)據(jù)函數(shù)
{
unsigned char x,i;
bit c;
for(x=0x80,i=0;i<8;i++,x>>=1)
{
if(val&x)SDA=1;
else SDA=0;
SCL=1; //SCL拉高,保持SDA上的狀態(tài)
SCL=0;
}
SDA=1; //釋放總線,等待應(yīng)答
SCL=1;
Delay_I2C();
c=SDA;//讀取應(yīng)答位
SCL=0;
return c;
}
unsigned char ReadByte_I2C() //接收單字節(jié)數(shù)據(jù)函數(shù)(不括發(fā)送應(yīng)答位)
{
unsigned char i,x,val;
for(SDA=1,i=0,x=0x80,val=0x00;i<8;i++,x>>=1)
{
SCL=0;
Delay_I2C(); //等待從屬器件向SDA線上寫數(shù)據(jù)
SCL=1; //拉高SCL,并讀取SDA線上的數(shù)據(jù)
if(SDA)val|=x;
}
SCL=0;
return val;
}
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -