⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e2rom.c

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 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 + -