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

📄 at24c02.c

📁 自动生升旗系统程序
💻 C
字号:

#include <AT89X52.H>

//24c02驱动      
sbit sclk_ = P1^4;  //定义时钟线
sbit sdat_ = P1^5;  //定义数据线

//sbit sclk_ = P1^1;  //定义时钟线
//sbit sdat_ = P1^2;  //定义数据线

// Start condition
void ee_start(void)
{
    sdat_ = 1;     //数据线0->1跳变为起始信号
    sclk_ = 1;
    sclk_ = 1;
    sdat_ = 0;
    sclk_ = 0;
}
// Stop condition
void ee_stop(void)
{
    sdat_ = 0;       //数据线1->0跳变为停止信号
    sclk_ = 1;
    sclk_ = 1;
    sdat_ = 1;
}
// Send byte to AT24C16.
// SCL, SDA expected low on entry.
// Return with SCL low and C=Ack.
bit ee_bout(unsigned char outdat)
{
    unsigned char i;

    for(i = 0; i < 8; i++) {
        outdat <<= 1;
        sdat_ = CY;
        sclk_ = 1;                  	// ** latch bit
        sclk_ = 1;
        sclk_ = 0;
    }

    sdat_ = 1;                          // ** release sdat_ for ACK
    sclk_ = 1;
    sclk_ = 1;
    CY = sdat_;
    sclk_ = 0;
    return (CY);
}
// AT24C16 Byte Write Function.
// Called with Address in addr, Data in outdat
void ee_write(unsigned int addr, unsigned char outdat)
{
    unsigned char i;

    ee_start();
    i = (unsigned char)(addr/256);
    i &= 0x7;	
    i <<= 1;
    i |= 0xa0;
    ee_bout(i);
    ee_bout((unsigned char)(addr%256));
    ee_bout(outdat);
    ee_stop();

    while(1) {                          // ** wait for internal write cycle complete
        ee_start();
        if(!ee_bout(i)) break;
       }
}
// AT24C16 Random Read Function.
// Called with Byte Address in addr
unsigned char ee_read(unsigned int addr)
{
    unsigned char i, j;

    ee_start();
    i = (unsigned char)(addr/256);
    i &= 0x7;	
    i <<= 1;
    i |= 0xa0;
    ee_bout(i);
    ee_bout((unsigned char)(addr%256));

    i++;
    ee_start();
    ee_bout(i);

    sdat_ = 1;      // make SDA an input
    for(i = 0; i < 8; i++)
    	{
            sclk_ = 1;
            j <<= 1;
            if(sdat_) j |= 0x1;
            sclk_ = 0;
    	}
    ee_stop();
    return (j);
}

/*
void main (void)
{
    ee_write(1,0xaa);	

    P2 = ee_read(1) ; //    unsigned char ee_read(unsigned int addr)
    
    while (1);
}
*/

⌨️ 快捷键说明

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