📄 i2c.c文档.txt
字号:
# define M 40
#include<reg51.h>
bit ack=1;
sbit sda=P3^7;
sbit scl=P3^5;
sbit wp=P3^4;
void I2C_Start()
{
sda=1;
scl=1;
sda=0;
scl=0;
}
void I2C_Stop()
{
sda=0;
scl=1;
sda=1;
}
void I2C_Ack(bit a)
{
unsigned char i;
if(a)
sda=1;
else
sda=0;
scl=1;
i=1;
i=2;
scl=0;
i=1;
i=2;
i=3;
}
void SendByte(char c)
{
unsigned char i,j;
ack=0;
for( i=0;i<8;i++)
{
if((c<<i)&0x80)
sda=1;
else
sda=0;
scl=1;
scl=0;
}
sda=1;
scl=1;
if(sda)
ack=0;
else
ack=1;
scl=0;
}
unsigned char RecByte()
{
unsigned char j,i;
unsigned char c=0;
sda=1;
for(i=0;i<8;i++)
{
scl=0;
j=1;
j=2;
j=3;
scl=1;
j=4;
j=5;
c=c<<1;
if(sda)
c=c+1;
j=6;
j=7;
}
scl=0;
return(c);
}
bit RecNByte(unsigned char hi,unsigned char lw,unsigned char *s, unsigned int n)
{
unsigned char i,j;
I2C_Start();
SendByte(0xa0);
if(!ack)
return(0);
SendByte(hi);
if(!ack) return(0);
SendByte(lw);
if(!ack) return(0);
I2C_Start();
SendByte(0xa1);
if(!ack) return(0);
for(i=0;i<n-1;i++)
{
*s=RecByte();
I2C_Ack(0);
s++;
}
*s=RecByte();
I2C_Ack(1);
I2C_Stop();
return(1);
}
bit SendNByte(unsigned char hi,unsigned char lw,unsigned char *s,unsigned char n)
{
unsigned int i;
I2C_Start();
SendByte(0xa0);
if(!ack)
return(0);
SendByte(hi);
if(!ack)
return(0);
SendByte(lw);
if(!ack)
return(0);
for(i=0;i<n;i++)
{
SendByte(*s);
if(!ack)
return(0);
s++;
}
I2C_Stop();
loop:
I2C_Start();
SendByte(0xa0);
if(!ack)
goto loop;
return(1);
}
main()
{
bit ok=1;
unsigned char buff[M]={11,12,13};
unsigned char h;
unsigned char l;
unsigned char n,i;
unsigned int j;
//unsigned char dot[M]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39};
wp=0;
//ok=SendNByte(0x0,0x0,dot,M);
wp=1;
ok=RecNByte(0x0,0x0,buff,M);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -