?? 60a.c
字號(hào):
//******************讀寫程序*************************/
uchar DataErrorFlag;//i2c讀寫出錯(cuò)標(biāo)志
void WRW24XX(unsigned char *Data,unsigned char Byte,unsigned int Add,unsigned char Contro1)
{//
uchar idata a;
a=64-Add%64;
if(a<Byte)//越界
{
RW24XX(Data,a,Add,Contro1);
Add=Add+a;
Data=Data+a;
RW24XX(Data,Byte-a,Add,Contro1);
}
else
RW24XX(Data,Byte,Add,Contro1);
}
bit RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
unsigned char ControlByte)
{
// void Delay(unsigned char DelayCount);
// void keydelay(unsigned int keycount);
void IICStart(void);
void IICStop(void);
bit IICRecAck(void);
void IICNoAck(void);
void IICAck(void);
unsigned char IICReceiveByte(void);
void IICSendByte(unsigned char sendbyte);
unsigned char data j,i=5,k1,k2;
bit errorflag=1;
k1=Address;
k2=Address>>8;
while(i--)
{
IICStart();
IICSendByte(ControlByte&0xfe);
if(IICRecAck())
continue;
IICSendByte(k2);
if(IICRecAck())
continue;
IICSendByte(k1);
if(IICRecAck())
continue;
if(!(ControlByte&0x01))
{
j=ByteQuantity;
errorflag=0;
while(j--)
{
IICSendByte(*DataBuff++);
if(!IICRecAck())
continue;
errorflag=1;
break;
}
if(errorflag==1)
continue;
break;
}
else
{
IICStart();
IICSendByte(ControlByte);
if(IICRecAck())
continue;
while(--ByteQuantity)
{
*DataBuff++=IICReceiveByte();
IICAck();
}
*DataBuff=IICReceiveByte();
IICNoAck();
errorflag=0;
break;
}
}
IICStop();
if(!(ControlByte&0x01))
{
keydelay(500);
}
if(errorflag)
DataErrorFlag=0xaa;
return(errorflag);
}
/****************************************************/
void IICStart(void)
{
scl=0;
_nop_();
sda=1;
_nop_();
scl=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
sda=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
scl=0;
_nop_();
sda=1;
}
/******************************/
void IICStop(void)
{
scl=0;
_nop_();
sda=0;
_nop_();
scl=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
sda=1;
_nop_();
_nop_();
_nop_();
_nop_();
scl=0;
}
/*********************************/
bit IICRecAck(void)
{
scl=0;
_nop_();
sda=1;
_nop_();
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
_nop_();
_nop_();
CY=sda;
_nop_();
scl=0;
return(CY);
}
/**********************************/
void IICACK(void)
{
sda=0;
_nop_();
scl=1;
_nop_();
_nop_();
_nop_();
_nop_();
scl=0;
_nop_();
sda=1;
}
void IICNoAck(void)
{
sda=1;
_nop_();
scl=1;
_nop_();
_nop_();
_nop_();
_nop_();
scl=0;
}
void IICSendByte(unsigned char sendbyte)
{
unsigned char data j=8;
for(;j>0;j--)
{
scl=0;
sendbyte<<=1;
sda=CY;
scl=1;
}
scl=0;
}
unsigned char IICReceiveByte(void)
{
register receivebyte,i=8;
scl=0;
while(i--)
{
scl=1;
receivebyte=(receivebyte<<1)|sda;
scl=0;
}
return(receivebyte);
}
void keydelay(unsigned int keydelaycount)
{
int i;
for(i=0;i<=keydelaycount;i++)
{
_nop_();
feeddog();
}
}
void feeddog(void)
{
_nop_();
WDRST=0x1e;
WDRST=0xe1;
_nop_();
}
/////////////////////////////////////////////////////////////結(jié)束///////////////////////////////////////////////
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -