📄 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 + -