e2rom.c

来自「一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人」· C语言 代码 · 共 129 行

C
129
字号
#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 + =
减小字号Ctrl + -
显示快捷键?