📄 e2rom.c
字号:
#include<mainh.h>
#include<24C01h.h>
//////////////////////////////////////////////////////////////////////////////////////////////
//对外提供了两个函数//
//unsigned char ReadIIC_24C01(unsigned char address)
//void WriteIIC_24C01(unsigned char address,unsigned char ddata)
//硬件接口有SDA_2401 SCL_2401
//
//////////////////////////////////////////////////////////////////////////////////////////////
//*********************************************************************************
delay()
{
unsigned int i=1200;
while(i--);
}
/*----------------------------------------------------------------------------
调用方式:write_8bit(unsigned char ch) ﹫2001/03/23
函数说明:内函数,私有,用户不直接调用。
-------------------------------------------------------------------------------
*/
void write_8bit(unsigned char ch)
{
unsigned char i=8;
SCL_2401=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
while (i--)
{
SDA_2401=(bit)(ch&0x80);
_nop_();_nop_();_nop_();_nop_();_nop_();
ch<<=1;
SCL_2401=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL_2401=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
/*------------------------------------------------------------------------------
调用方式:void ACK(void) ﹫2001/03/23
函数说明:内函数,私有,用户不直接调用。
-------------------------------------------------------------------------------
*/
void ACK(void)
{
unsigned char time_1;
SDA_2401=1;
SCL_2401=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL_2401=1;
time_1=5;
while(SDA_2401) {if (!time_1) break;} //ACK
SCL_2401=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
unsigned char ReadIIC_24C01(unsigned char address)
{
unsigned char ddata=0;
unsigned char i=8;
SCL_2401=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //Tsu:STA
SDA_2401=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL_2401=0; //START
write_8bit(0XA4);//ADDED BY LIUYI
ACK();//ADDED BY LIUYI
write_8bit(address);//ADDED BY LIUYI
ACK();//ADDED BY LIUYI
SDA_2401=0;
_nop_();SCL_2401=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA_2401=1; //STOP
SDA_2401=1;
SCL_2401=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //Tsu:STA
SDA_2401=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL_2401=0; //START
write_8bit(0XA5);//ADDED BY LIUYI
ACK();//ADDED BY LIUYI
while (i--)
{
SDA_2401=1;
ddata<<=1;
SCL_2401=0;_nop_();_nop_();_nop_();_nop_();_nop_();
SCL_2401=1;
if (SDA_2401) ddata|=0x01;
}
SCL_2401=0;_nop_();
SCL_2401=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA_2401=0;_nop_();
SCL_2401=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA_2401=1; //STOP
delay();
return ddata;
}
void WriteIIC_24C01(unsigned char address,unsigned char ddata)
{
SCL_2401=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //Tsu:STA
SDA_2401=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL_2401=0; //START
write_8bit(0XA4);//ADDED BY LIUYI
ACK();
write_8bit(address);//ADDED BY LIUYI
ACK();//ADDED BY LIUYI
write_8bit(ddata); //发送数据
ACK();
SDA_2401=0;
_nop_();SCL_2401=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA_2401=1; //STOP
delay();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -