📄 2408driver.h
字号:
/*---------------------------------------------------------------------------------------------------------------
调用方式:void WriteIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address,unsigned char ddata) ﹫2001/09/18
函数说明:对于IIC芯片24CXX,在指定地址address写入一个字节ddata
page 0--7 address 0x00--0xFF 0xa000---0xa7FF
调用方式:unsigned char ReadIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address) ﹫2001/09/18
函数说明:读取IIC芯片24CXX,指定地址address的数据。
/*----------------------------------------------------------------------------------------------------
调用方式:void savepw_24XX(uint addr,uchar *strpw)﹫2006/04/18 by KreateHe
函数说明:向IIC芯片24CXX写入一个小于16位长度的字符串,指定起始地址addr
page 0--7 address 0x00--0xFF 0xa000---0xa7F0 共8*16*16
------------------------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------------------
调用方式:void getstring_24XX(uint addr,uchar **strpw,uchar len)﹫2006/04/18 by KreateHe
函数说明:从IIC芯片24CXX读出一个小于16位长度的字符串,指定起始地址address
page 0--7 address 0x00--0xFF 0xa000---0xa7F0 共8*16*16
------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------*/
sbit SCL= P3^4;
sbit SDA= P3^5;
/*----------------------------------------------------------------------------
调用方式:write_8bit(unsigned char ch) ﹫2006/03/23
函数说明:内函数,私有,用户不直接调用。
-------------------------------------------------------------------------------*/
void write_8bit(unsigned char ch)
{
unsigned char i=8;
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
while (i--)
{
SDA=(bit)(ch&0x80);
_nop_();_nop_();_nop_();_nop_();_nop_();
ch<<=1;
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
_nop_();_nop_();_nop_();_nop_();_nop_();
}
/*------------------------------------------------------------------------------
调用方式:void ACK(void) ﹫2006/03/23
函数说明:内函数,私有,用户不直接调用。
-------------------------------------------------------------------------------*/
void ACK(void)
{
unsigned char time_1;
SDA=1;
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=1;
time_1=5;
while(SDA)
{
if (!time_1) break;
} //ACK
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
/*---------------------------------------------------------------------------------------------------------------
调用方式:void WriteIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address,unsigned char ddata) ﹫2006/04/18
函数说明:对于IIC芯片24CXX,在指定地址address写入一个字节ddata
page 0--7 address 0x00--0xFF
-----------------------------------------------------------------------------------------------------------------*/
void WriteIIC_24CXX(unsigned int address,unsigned char ddata)
{
unsigned char page,address_in_page;
page=(unsigned char)(address>>8) & 0x07;
page=page<<1;
address_in_page=(unsigned char)(address);
SCL=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //Tsu:STA
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL=0; //START
write_8bit(0xa0 | page); //写页地址和操作方式,对于24C32-24C256,page不起作用
ACK();
write_8bit(address_in_page);
ACK();
write_8bit(ddata);
ACK();
SDA=0;
_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1; //STOP
delay(1000);
}
/*----------------------------------------------------------------------------------------------------
调用方式:unsigned char ReadIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address) ﹫2006/04/18
函数说明:读取IIC芯片24CXX,指定地址address的数据。
page 0--7 address 0x00--0xFF 0xa000---0xa7FF
------------------------------------------------------------------------------------------------------*/
unsigned char ReadIIC_24CXX(unsigned int address)
{
unsigned char page,address_in_page;
unsigned char ddata=0;
unsigned char i=8;
page=(unsigned char)(address>>8) & 0x07;
page=page<<1;
address_in_page=(unsigned char)(address);
SDA=0;_nop_();
SCL=0; //START
write_8bit(0xa0 | page); //写页地址和操作方式,对于24C32-24C256,page不起作用
ACK();
write_8bit(address_in_page);
ACK();//以上是一个“哑”写操作,相当于设置当前地址
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Tsu:STA
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL=0; //START
write_8bit(0xa1); //写从地址,置为读模式
ACK();
while (i--)
{
SDA=1;
ddata<<=1;
SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=1;
if (SDA) ddata|=0x01;
}
SCL=0;
_nop_();
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=0;
_nop_();
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1; //STOP
delay(1000);
return ddata;
}
/*----------------------------------------------------------------------------------------------------
调用方式:void savepw_24XX(uint addr,uchar *strpw)﹫2006/04/18 by KreateHe
函数说明:向IIC芯片24CXX写入一个小于16位长度的字符串,指定起始地址addr
page 0--7 address 0x00--0xFF 0xa000---0xa7F0 共8*16*16
------------------------------------------------------------------------------------------------------*/
void savestring_24xx(uint addr,uchar *strpw)
{
uchar i=0,len;
len=strlen(strpw);
while(i<len)
{
WriteIIC_24CXX(addr+i,strpw[i]);
i++;
}
}
/*----------------------------------------------------------------------------------------------------
调用方式:void getstring_24XX(uint addr,uchar **strpw,uchar len)﹫2006/04/18 by KreateHe
函数说明:从IIC芯片24CXX读出一个小于16位长度的字符串,指定起始地址address
page 0--7 address 0x00--0xFF 0xa000---0xa7F0 共8*16*16
------------------------------------------------------------------------------------------------------*/
void getstring_24xx(uint addr,uchar *strpw,uchar len)
{
uchar i=0,ch;
while(i<len)
{
ch=ReadIIC_24CXX(addr+i);
*(strpw+i)=ch;
i++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -