📄 i2c.c
字号:
#include <reg922.h>
bit ack = 0; /*应答标志位*/
void I2cInit()
{
/* I2CON */
I2CON &= 0;
I2SCLH = 7;
I2SCLL = 8;
}
void DisableI2c()
{
I2EN = 0;
}
void EnableI2c()
{
I2EN = 1;
}
/********************************************
名称: Start_I2c();
功能: 启动I2C总线,即发送I2C起始条件.
*********************************************/
void Start_I2c()
{
}
/******************************************
* 名称: Stop_I2c();
功能: 结束I2C总线,即发送I2C结束条件.
*******************************************/
void Stop_I2c()
{
}
/************************************************************************
名称: SendByte(uchar c);
功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
此状态位进行操作.(不应答或非应答都使ack=0 假)
发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
*************************************************************************/
void SendByte(unsigned char c)
{
I2DAT = c;
STA=1;
STO=1;
}
/*******************************************************************
名称: RcvByte()
功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号),
发完后请用应答函数。
********************************************************************/
unsigned char RcvByte()
{
}
/********************************************************
名称: Ack_I2c()
功能: 主控器进行应答信号,(可以是应答或非应答信号)
********************************************************/
void Ack_I2c(bit a)
{
}
/***********************************************************************
名称: ISendByte();
功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
如果返回1表示操作成功,否则操作有误。
注意: 使用前必须已结束总线。
************************************************************************/
bit ISendByte(unsigned char sla,unsigned char c)
{
Start_I2c(); /*启动总线*/
SendByte(sla); /*发送器件地址*/
if(ack==0) return(0);
SendByte(c); /*发送数据*/
if(ack==0) return(0);
Stop_I2c(); /*结束总线*/
return(1);
}
/**********************************************************************
名称: IRcvByte(uchar sla,ucahr *c);
功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
址sla,返回值在c.
如果返回1表示操作成功,否则操作有误。
注意: 使用前必须已结束总线。
***********************************************************************/
bit IRcvByte(unsigned char sla,unsigned char *c)
{
Start_I2c(); /*启动总线*/
SendByte(sla+1); /*发送器件地址*/
if(ack==0) return(0);
*c=RcvByte(); /*读取数据*/
Ack_I2c(1); /*发送非就答位*/
Stop_I2c(); /*结束总线*/
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -