📄 i2c.c
字号:
//****************************************************************************
//文件名:I2C.c
//描述: 实现I2C总线的基本操作(通用,只依赖于I2C规范)
//****************************************************************************
#include "I2C.h"
#include <msp430x14x.h> /*for msp430*/
unsigned char ack; /*acknowledge signer*/
void _Nop()
{
/*
unsigned char q0;
for(q0=0;q0<1;q0++);
*/
_NOP(); _NOP(); _NOP(); _NOP();
}
//****************************************************************************
//启动I2C总线
//参数:无
//返回值: 无
//****************************************************************************
void Start_I2C()
{
I2CSEL &= ~(SDA+SCL);
SDAOUT; /*Configuration port direction,maybe not need*/
SCLOUT; /*Configuration port direction,maybe not need*/
SSDA ;
_Nop();
SSCL ;
_Nop();_Nop();_Nop();_Nop();_Nop();
CSDA ;
_Nop();_Nop();_Nop();_Nop();_Nop();
CSCL ;
_Nop();_Nop();
}
//****************************************************************************
//释放I2C总线
//参数:无
//返回值: 无
//****************************************************************************
void Stop_I2C()
{
SDAOUT; /*Configuration port direction,maybe not need*/
CSDA ;
_Nop();_Nop();
SSCL ;
_Nop();_Nop();_Nop();_Nop();_Nop();
SSDA ;
_Nop();_Nop();_Nop();_Nop();_Nop();
}
//****************************************************************************
//向总线写入一个字节
//参数:c:写入数据
//返回值: 0:fail 1:success
//****************************************************************************
unsigned char SendByte(unsigned char c)
{
unsigned char BitCnt;
SDAOUT;/*Configuration port direction,maybe not need*/
for(BitCnt = 0 ; BitCnt < 8 ; BitCnt++)
{
if((c<<BitCnt)&0x80)
SSDA ;
else
CSDA ;
_Nop();_Nop();
SSCL ;
_Nop();_Nop();_Nop();_Nop();
CSCL ;
_Nop();_Nop();
}
_Nop();_Nop();
SSCL ;
_Nop();_Nop();
/*TEST ACK*/
{
SDAIN; /*Configuration port direction,maybe not need*/
if(TESTACK())
ack = 0;
else
ack = 1;
}
_Nop();_Nop();
CSCL;
_Nop();_Nop();
return(ack);
}
//****************************************************************************
//从总线读取一个字节
//参数:无
//返回值: 读取数据
//****************************************************************************
unsigned char RecByte()
{
unsigned char retc;
unsigned char BitCnt;
retc = 0;
SDAIN; /*Configuration port direction,maybe not need*/
for(BitCnt = 0; BitCnt < 8; BitCnt++)
{
_Nop();_Nop();
SSCL ;
_Nop();_Nop();
retc = retc<<1;
if(READSDA())
retc ++;
_Nop();_Nop();
CSCL ;
_Nop();_Nop();
}
return (retc);
}
//****************************************************************************
//应答函数
//参数:a:应答类型 0:ack 1:not ack
//返回值: 无
//****************************************************************************
void Ack_I2C(unsigned char a)
{
SDAOUT; /*Configuration port direction,maybe not need*/
if(a == 0)
CSDA ;
else
SSDA ;
_Nop();_Nop();
SSCL ;
_Nop();_Nop();_Nop();_Nop();
CSCL ;
_Nop();_Nop();
SSDA ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -