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