📄 cs1611p.c
字号:
//**********************************************************
//**文件名:CS1611P.C
//**Copyright(c)2004-2006
//**创建人:
//**日 期:2006.1.13
//**修改人:
//**日 期:
//**描 述:EE存取函数
//**
//**版 本:ver1.0
//**_____________________________________
//***********************************************************/
#include <reg52.h>
#include <intrins.h>
#include "outdef.h"
#define PAGE_BYTES 16
#define WriteDevice1161 0xa0
#define ReadDevice1161 0xa1
#define SomeNop(); _nop_();_nop_();_nop_();_nop_();_nop_();
sbit EE_SDA = P3^5;//P3^5;//
sbit EE_SCL = P3^6;
extern bit WR24c02Fg;
void Write8Bit(uchar input);
uchar Read8Bit(void);
bit TestAck();
bit Write_Data(uchar par1,uchar par2,uchar *Wdata,uint RomAddress);
//========================================================================
bit Read24c02(uchar *RamAddress,uint RomAddress,uchar bytes)
{
uchar romadh,romadl;
romadl=(uchar)(RomAddress%128);
romadh=(RomAddress%128)>>8;
WR24c02Fg = 1;
EE_SDA=1;SomeNop();EE_SCL=1;SomeNop();EE_SDA=0;SomeNop();EE_SCL=0;//Start();
Write8Bit(romadh|WriteDevice1161|((RomAddress/128)<<1));
if(!TestAck())
return false;
Write8Bit(romadl);
if(!TestAck())
return false;
EE_SDA=1;SomeNop();EE_SCL=1;SomeNop();EE_SDA=0;SomeNop();EE_SCL=0;//Start();
Write8Bit(romadh|ReadDevice1161|((RomAddress/128)<<1));
if(!TestAck())
return false;
while(bytes!=1)
{
*RamAddress=Read8Bit();
EE_SDA=0;EE_SCL=1;SomeNop();EE_SCL=0;SomeNop();EE_SDA=1;//Ack();
RamAddress++;
bytes--;
}
*RamAddress=Read8Bit();
EE_SDA=1;EE_SCL=1;SomeNop();EE_SCL=0;//NoAck();
EE_SDA=0;SomeNop();EE_SCL=1;SomeNop();EE_SDA=1;//Stop();
WR24c02Fg = 0;
Delay_1ms(10);
return true;
}
//========================================================================
bit Write24c02(uchar *Wdata,uint RomAddress,uchar number)
{
uint i;
uchar j;
uchar par1,par2;
i=RomAddress%8;
j=PAGE_BYTES-i;
WR24c02Fg = 1;
if(i==0)
{
par1 = 0;
par2 = number;
if(!Write_Data(par1,par2,Wdata,RomAddress))
return false;
}
else
{
if(j<number)
{
par1=j;
par2=0;
if(!Write_Data(par1,par2,Wdata,RomAddress))
return false;
par1=0;
par2=number-j;
Wdata+=j;
RomAddress+=j;
if(!Write_Data(par1,par2,Wdata,RomAddress))
return false;
}
else
{
par1=number;
par2=0;
if(!Write_Data(par1,par2,Wdata,RomAddress))
return false;
}
}
WR24c02Fg = 0;
return true;
}
//========================================================================
bit Write_Data(uchar par1,uchar par2,uchar *Wdata,uint RomAddress)
{
uchar romadh,romadl;
wtloop:
romadl=(uchar)(RomAddress%128);
romadh=(RomAddress%128)>>8;
if((par1==0) && (par2==0)) return true;
if(par1!=0) goto wtlp1;
if(par2<=PAGE_BYTES)
{
par1=par2;
par2=0;
}
else
{
par1=PAGE_BYTES;
par2=par2-PAGE_BYTES;
}
wtlp1:
EE_SDA=1;SomeNop();EE_SCL=1;SomeNop();EE_SDA=0;SomeNop();EE_SCL=0;//Start();
Write8Bit(romadh|(WriteDevice1161|((RomAddress/128)<<1)));
if(!TestAck())
return false;
Write8Bit(romadl);
if(!TestAck())
return false;
for(;par1!=0;par1--)
{
Write8Bit(*Wdata);
if(!TestAck())
return false;
Wdata++;
RomAddress++;
}
EE_SDA=0;SomeNop();EE_SCL=1;SomeNop();EE_SDA=1;//Stop();
Delay_1ms(20);
goto wtloop;
}
//========================================================================
void Write8Bit(uchar input)
{
uchar temp;
for(temp=8;temp!=0;temp--)
{
EE_SDA=(bit)(input&0x80);
EE_SCL=1;
SomeNop();
EE_SCL=0;
input=input<<1;
SomeNop();
}
}
//========================================================================
uchar Read8Bit(void)
{
uchar i=8;
uchar uData=0;
EE_SDA=1;
while(i--)
{
uData<<=1;
EE_SCL=0;
SomeNop();
EE_SCL=1;
SomeNop();
uData |=EE_SDA;
}
EE_SCL=0;
return uData;
}
//========================================================================
bit TestAck()
{
uchar errtime=255;
EE_SDA=1; SomeNop();
EE_SCL=1; SomeNop();
while(EE_SDA)
{
errtime--;
if(!errtime)
{
EE_SDA=0;SomeNop();EE_SCL=1;SomeNop();EE_SDA=1;//Stop();
return false;
}
}
EE_SCL=0;
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -