📄 iicbus.h
字号:
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
bit bACK;
sbit pSDA=P3^7;
sbit pSCL=P3^6;
void iicStart()
{
uchar i;
pSDA=1;
pSCL=1;
while(pSCL==0){;}
for(i=0;i<4;i++){_nop_();}
pSDA=0;
for(i=0;i<8;i++){_nop_();}
pSCL=0;
}
void iicStop()
{
uchar i;
pSDA=0;
pSCL=1;
while(pSCL==0){;}
pSDA=1;
for(i=0;i<4;i++){_nop_();}
for(i=0;i<8;i++){_nop_();}
pSCL=0;
}
void iicMack()
{
uchar i;
pSDA=0;
pSCL=1;
for(i=0;i<8;i++){_nop_();}
pSCL=0;
pSDA=1;
}
void iicMnack()
{
uchar i;
pSDA=1;
pSCL=1;
for(i=0;i<8;i++){_nop_();}
pSCL=0;
pSDA=0;
}
void iicCack()
{
uchar i;
pSDA=1;
pSCL=1;
bACK=0;
if(pSDA==0)
{
pSCL=0;
for(i=0;i<8;i++){_nop_();}
}
else
{
bACK=1;
pSCL=0;
for(i=0;i<8;i++){_nop_();}
}
}
void iicwrbyt0()
{
uchar i;
pSDA=0;
pSCL=1;
for(i=0;i<8;i++){_nop_();}
pSCL=0;
}
void iicwrbyt1()
{
uchar i;
pSDA=1;
pSCL=1;
for(i=0;i<8;i++){_nop_();}
pSCL=0;
pSDA=0;
}
void iicwrbyt(uchar WrData)
{
uchar i,j;
if((WrData&0x80)>0)
{pSDA=1;}
else
{pSDA=0;}
pSCL=1;
while(pSCL==0){;}
for(i=0;i<4;i++){_nop_();}
pSCL=0;
pSDA=0;
WrData=_crol_(WrData,1);
for(j=1;j<8;j++)
{
if((WrData&0x80)>0)
{iicwrbyt1();}
else
{iicwrbyt0();}
WrData=_crol_(WrData,1);
}
}
uchar iicrdbyt()
{
uchar RdData=0xff,j;
for(j=0;j<8;j++)
{
pSDA=1;
pSCL=1;
if(pSDA==0)
{
RdData=RdData&0x7f;
RdData=_crol_(RdData,1);
pSCL=0;
}
else
{
RdData=RdData|0x80;
RdData=_crol_(RdData,1);
pSCL=0;
}
}
return(RdData);
}
/*
void iicwr1byt(uchar Slaw,uchar wrbyte)
{
do{
do{
iicStart();
iicwrbyt(Slaw);
iicCack();
}while(bACK==1);
iicwrbyt(wrbyte);
iicCack();
}while(bACK==1);
iicStop();
}
uchar iicrd1byt(uchar Slar)
{
uchar temp;
do{
iicStart();
iicwrbyt(Slar);
iicCack();
}while(bACK==1);
temp=iicrdbyt();
iicMnack();
iicStop();
return(temp);
}
void iicwrnbyt(uchar Slaw,uchar nData,uchar wrnbyte[])
{
uchar i;
do{
iicStart();
iicwrbyt(Slaw);
iicCack();
}while(bACK==1);
for(i=0;i<nData;i++)
{
iicwrbyt(wrnbyte[i]);
iicCack();
while(bACK==1)
{
do{
iicStart();
iicwrbyt(Slaw);
iicCack();
}while(bACK==1);
iicwrbyt(wrnbyte[i]);
}
iicCack();
}
iicStop();
}
void iicrdnbyt(uchar rdnum,uchar Slar,uchar Rdndata[])
{
uchar temp,n;
do{
iicStart();
iicwrbyt(Slar);
iicCack();
}while(bACK==1);
for(n=0;n<rdnum;n++)
{
temp=iicrdbyt();
Rdndata[n]=temp;
if(n<(rdnum-1))
{iicMack();}
}
iicMnack();
iicStop();
}
*/
void iic24cxxwr(uchar WrAddr,uchar WrData)
{
do{
do{
do{
iicStart();
iicwrbyt(0xa0);
iicCack();
}while(bACK==1);
iicwrbyt(WrAddr);
iicCack();
}while(bACK==1);
iicwrbyt(WrData);
iicCack();
}while(bACK==1);
iicStop();
tdelay(4);
}
uchar iic24cxxrd(uchar RdAddr)
{
uchar temp;
do{
do{
do{
iicStart();
iicwrbyt(0xa0);
iicCack();
}while(bACK==1);
iicwrbyt(RdAddr);
iicCack();
}while(bACK==1);
iicStart();
iicwrbyt(0xa1);
iicCack();
}while(bACK==1);
temp=iicrdbyt();
iicMnack();
iicStop();
return(temp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -