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

📄 24c01.txt

📁 很好的c语言24c01代码
💻 TXT
字号:
/*------------------------------------------------------------------------------
为了安全起见,程序中很多NOP是冗余的,希望读者能进一步精简,但必须经过验证。
         Atmel 24C01 比较特殊,为简约型.
         51晶振为11.0592MHz
〖参考〗http://www.c51bbs.com
〖版本〗V1.00A Build 0918
-----------------------------------------------------------------------------*/


#include "reg51.h"
#include "intrins.h"

sbit SCL= P1^5;
sbit SDA= P1^4;



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=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_();
     _nop_();_nop_();_nop_();_nop_();_nop_();
}

/*------------------------------------------------------------------------------
调用方式:void ACK(void)   ﹫2001/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_();
}


unsigned char ReadIIC_24C01(unsigned char address)
{
       unsigned char ddata=0;
       unsigned char i=8;

     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( (address<<1) | 0x01);    //写页地址和操作方式
     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();
     return ddata;

}


void WriteIIC_24C01(unsigned char address,unsigned char ddata)
{

     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( (address<<1) & 0xfe);    //写页地址和操作方式,对于24C32-
24C256,page不起作用
     ACK();
     write_8bit(ddata);       //发送数据
     ACK();
     SDA=0;
         _nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
         SDA=1;    //STOP
         delay();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -