📄 iicbusc.c
字号:
#include "52init.h"
#define iicnop 2
bit bACK;
sbit pSDA=P3^7;
sbit pSCL=P3^6;
void iicdelay(uchar delay_num) //22.1184 the loop time is 0.543us
{
uchar i,k; //delay_num 8us/num
for(i=delay_num;i>0;i--)
{
for(k=15;k>0;k--)
{;}
}
}
void iicStart()
{
uchar i;
pSDA=1;
pSCL=1;
while(pSCL==0){;}
for(i=0;i<iicnop;i++){_nop_();}
pSDA=0;
for(i=0;i<iicnop;i++){_nop_();}
pSCL=0;
}
void iicStop()
{
uchar i;
pSDA=0;
pSCL=1;
while(pSCL==0){;}
pSDA=1;
for(i=0;i<iicnop;i++){_nop_();}
for(i=0;i<iicnop;i++){_nop_();}
pSCL=0;
}
void iicMack()
{
uchar i;
pSDA=0;
pSCL=1;
for(i=0;i<iicnop;i++){_nop_();}
pSCL=0;
pSDA=1;
}
void iicMnack()
{
uchar i;
pSDA=1;
pSCL=1;
for(i=0;i<iicnop;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<iicnop;i++){_nop_();}
}
else
{
bACK=1;
pSCL=0;
for(i=0;i<iicnop;i++){_nop_();}
}
}
void iicwrbyt0()
{
uchar i;
pSDA=0;
pSCL=1;
for(i=0;i<iicnop;i++){_nop_();}
pSCL=0;
}
void iicwrbyt1()
{
uchar i;
pSDA=1;
pSCL=1;
for(i=0;i<iicnop;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<iicnop;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 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();
//LcdPrintf("debug position \n");
}
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);
}
void iic4221wr(uchar WrAddr,uchar WrData)
{
do{
do{
do{
iicStart();
iicwrbyt(0x20);
iicCack();
}while(bACK==1);
iicwrbyt(WrAddr);
iicCack();
}while(bACK==1);
iicwrbyt(WrData);
iicCack();
}while(bACK==1);
iicStop();
}
uchar iic4221rd(uchar RdAddr)
{
uchar temp;
do{
do{
do{
iicStart();
iicwrbyt(0x20);
iicCack();
}while(bACK==1);
iicwrbyt(RdAddr);
iicCack();
}while(bACK==1);
iicStart();
iicwrbyt(0x21);
iicCack();
}while(bACK==1);
temp=iicrdbyt();
iicStop();
return(temp);
}
void iic4221wrb(uchar WrAddr,uchar WrData)
{
do{
do{
do{
iicStart();
iicwrbyt(0x22);
iicCack();
}while(bACK==1);
iicwrbyt(WrAddr);
iicCack();
}while(bACK==1);
iicwrbyt(WrData);
iicCack();
}while(bACK==1);
iicStop();
}
uchar iic4221rdb(uchar RdAddr)
{
uchar temp;
do{
do{
do{
iicStart();
iicwrbyt(0x22);
iicCack();
}while(bACK==1);
iicwrbyt(RdAddr);
iicCack();
}while(bACK==1);
iicStart();
iicwrbyt(0x23);
iicCack();
}while(bACK==1);
temp=iicrdbyt();
iicStop();
return(temp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -