i2c.c
来自「利用SMALL RTOS51做的一个项目」· C语言 代码 · 共 209 行
C
209 行
#include "config.h"
bit _b_ack;
void Start_I2C(void) //启动I2C总线
{
SDA=1;
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0;
_Nop();
_Nop();
}
void Stop_I2C(void) //结束I2C总线
{
SDA=0;
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
}
void SendByte(unsigned char c)
{
unsigned char counter;
for(counter=0;counter<8;counter++)
{
if((c<<counter)&0x80)
SDA=1;
else
SDA=0;
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0;
}
_Nop();
_Nop();
SDA=1;
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
if(SDA)
_b_ack=0;
else
_b_ack=1;
SCL=0;
_Nop();
_Nop();
}
unsigned char RcvByte(void)
{
unsigned char retc,counter;
retc=0;
SDA=1;
for(counter=0;counter<8;counter++)
{
_Nop();
SCL=0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
retc<<=1;
if(SDA)
retc++;
_Nop();
_Nop();
}
SCL=0;
_Nop();
_Nop();
return(retc);
}
void Ack_I2C(bit a)
{
if(a)
SDA=1;
else
SDA=0;
_Nop();
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0;
_Nop();
_Nop();
}
/*
bit ISendByte(unsigned char sla,unsigned char c)
{
Start_I2C();
SendByte(sla);
if(!ack)
return(0);
SendByte(c);
if(!ack)
return(0);
Stop_I2C();
return(1);
}
bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
{
unsigned char i;
Start_I2C();
SendByte(sla);
if(!ack)
return(0);
SendByte(suba);
if(!ack)
return(0);
for(i=0;i<no;i++)
{
SendByte(*s);
if(!ack)
return(0);
s++;
}
Stop_I2C();
return(1);
}
bit IRcvByte(unsigned char sla,unsigned char *c)
{
Start_I2C();
SendByte(sla+1);
if(!ack)
return(0);
*c=RcvByte();
Ack_I2C(1);
Stop_I2C();
return(1);
}
bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
{
unsigned char i;
Start_I2C();
SendByte(sla);
if(!ack)
return(0);
SendByte(suba);
if(!ack)
return(0);
Start_I2C();
SendByte(sla+1);
if(!ack)
return(0);
for(i=0;i<no-1;i++)
{
*s=RcvByte();
Ack_I2C(0);
s++;
}
*s=RcvByte();
Ack_I2C(1);
Stop_I2C();
return(1);
}*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?