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

📄 eeprom

📁 对at24c256读写程序
💻
字号:
C51编程:我对at24c256读写,遇到了一些问题 [blfman] [17次] 01-9-24 上午 10:30:43
您好,首先问一个可能是可笑的问题,:),当我给EEPROM送地址的时候,先送高地址还是
低地址?我现在是先送高,但是经常读出来的数据不正确(主要是高地址的部分容易出
错),或者就是存储的内容被改变了,请问这是怎么回事?请指教。
:) 

上载一个24c256的keil c51 源程序。 [shiaf] [23次] 01-9-24 上午 11:47:31 

文件上栽不了,就在这里贴上 [shiaf] [68次] 01-9-24 上午 11:50:14 
// 24C64、24c128、24C256、24C512 EEPROM测试程序
// 程序设计:施爱飞
// 1998年5月27日

#include <reg52.h>

sbit 24CXX_SCL = P1^0;
sbit 24CXX_SDA = P1^1;

sbit ACC_0 = ACC^0;
sbit ACC_1 = ACC^1;
sbit ACC_2 = ACC^2;
sbit ACC_3 = ACC^3;
sbit ACC_4 = ACC^4;
sbit ACC_5 = ACC^5;
sbit ACC_6 = ACC^6;
sbit ACC_7 = ACC^7;

// buff = 数据缓冲区
// address = EEPROM 地址
// size = 数量
char READ_24CXX(unsigned char * buff,unsigned int address,unsigned char size)
{
    unsigned char a;
    
    24CXX_SCL = 1;
    24CXX_SDA = 1;
    24CXX_SDA = 0;
    24CXX_SCL = 0;

    ACC = 0xa0;
    24CXX_SDA = ACC_7;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_6;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_5;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_4;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_3;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_2;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_1;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_0;
    24CXX_SCL = 1;
    24CXX_SCL = 0;
    
    24CXX_SDA = 1;
    24CXX_SCL = 1;
    if(24CXX_SDA)
        return -1;
    24CXX_SCL = 0;

    a = address>>8;
    ACC = a;
    24CXX_SDA = ACC_7;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_6;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_5;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_4;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_3;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_2;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_1;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_0;
    24CXX_SCL = 1;
    24CXX_SCL = 0;
    
    24CXX_SDA = 1;
    24CXX_SCL = 1;
    if(24CXX_SDA)
        return -1;
    24CXX_SCL = 0;
    
    a = address;
    ACC = a;
    
    24CXX_SDA = ACC_7;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_6;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_5;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_4;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_3;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_2;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_1;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_0;
    24CXX_SCL = 1;
    24CXX_SCL = 0;
    
    24CXX_SDA = 1;
    24CXX_SCL = 1;
    if(24CXX_SDA)
        return -1;
    24CXX_SCL = 0;
    
    24CXX_SCL = 1;
    24CXX_SDA = 1;
    24CXX_SDA = 0;
    24CXX_SCL = 0;
    
    ACC = 0xa1;
    
    24CXX_SDA = ACC_7;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_6;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_5;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_4;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_3;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_2;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_1;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_0;
    24CXX_SCL = 1;
    24CXX_SCL = 0;

    24CXX_SDA = 1;
    24CXX_SCL = 1;
    if(24CXX_SDA)
        return -1;
    24CXX_SCL = 0;

    for(a=0;a<size;a++)
    {
        24CXX_SCL = 0;
        ACC_7 = 24CXX_SDA;
        
        24CXX_SCL = 1;
        24CXX_SCL = 0;
        ACC_6 = 24CXX_SDA;

        24CXX_SCL = 1;
        24CXX_SCL = 0;
        ACC_5 = 24CXX_SDA;

        24CXX_SCL = 1;
        24CXX_SCL = 0;
        ACC_4 = 24CXX_SDA;

        24CXX_SCL = 1;
        24CXX_SCL = 0;
        ACC_3 = 24CXX_SDA;

        24CXX_SCL = 1;
        24CXX_SCL = 0;
        ACC_2 = 24CXX_SDA;

        24CXX_SCL = 1;
        24CXX_SCL = 0;
        ACC_1 = 24CXX_SDA;

        24CXX_SCL = 1;
        24CXX_SCL = 0;
        ACC_0 = 24CXX_SDA
        
        *buff = ACC;
        buff++;
        24CXX_SCL = 1;
    }
    24CXX_SCL = 0;
    24CXX_SDA = 0;
    24CXX_SCL = 1;
    24CXX_SDA = 1;
    return 0;
}

// buff = 数据缓冲区
// address = EEPROM 地址
// size = 数量
char WRITE_24CXX(unsigned char *buff,unsigned int address,unsigned char size)
{
    unsigned char a;
    
    24CXX_SCL = 1;
    24CXX_SDA = 1;
    24CXX_SDA = 0;
    24CXX_SCL = 0;

    ACC = 0xa0;
    24CXX_SDA = ACC_7;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_6;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_5;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_4;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_3;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_2;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_1;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_0;
    24CXX_SCL = 1;
    24CXX_SCL = 0;
    
    24CXX_SDA = 1;
    24CXX_SCL = 1;
    if(24CXX_SDA)
        return -1;
    24CXX_SCL = 0;

    a = address>>8;
    ACC = a;
    24CXX_SDA = ACC_7;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_6;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_5;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_4;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_3;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_2;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_1;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_0;
    24CXX_SCL = 1;
    24CXX_SCL = 0;
    
    24CXX_SDA = 1;
    24CXX_SCL = 1;
    if(24CXX_SDA)
        return -1;
    24CXX_SCL = 0;
    
    a = address;
    ACC = a;
    
    24CXX_SDA = ACC_7;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_6;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_5;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_4;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_3;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_2;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_1;
    24CXX_SCL = 1;
    24CXX_SCL = 0;        

    24CXX_SDA = ACC_0;
    24CXX_SCL = 1;
    24CXX_SCL = 0;
    
    24CXX_SDA = 1;
    24CXX_SCL = 1;
    if(24CXX_SDA)
        return -1;
    24CXX_SCL = 0;
    
    for(a=0;a<size;a++)
    {
        ACC = *buff;

        24CXX_SDA = ACC_7;
        24CXX_SCL = 1;
        24CXX_SCL = 0;
        
        24CXX_SDA = ACC_6;
        24CXX_SCL = 1;
        24CXX_SCL = 0;

        24CXX_SDA = ACC_5;
        24CXX_SCL = 1;
        24CXX_SCL = 0;

        24CXX_SDA = ACC_4;
        24CXX_SCL = 1;
        24CXX_SCL = 0;

        24CXX_SDA = ACC_3;
        24CXX_SCL = 1;
        24CXX_SCL = 0;

        24CXX_SDA = ACC_2;
        24CXX_SCL = 1;
        24CXX_SCL = 0;

        24CXX_SDA = ACC_1;
        24CXX_SCL = 1;
        24CXX_SCL = 0;

        24CXX_SDA = ACC_0;
        24CXX_SCL = 1;
        24CXX_SCL = 0;
        
        X24CXX_SDA = 1;
        X24CXX_SCL = 1;
        if(24CXX_SDA)
            return -1;
        24CXX_SCL = 0;
        buff++;        
    }
    24CXX_SCL = 0;
    24CXX_SDA = 0;
    24CXX_SCL = 1;
    24CXX_SDA = 1;
    return 0;
}
     

多谢多谢!我会认真学习:) [blfman] [3次] 01-9-24 下午 01:59:39 

兄弟,你的程序真长啊,程序存储器不要钱? [何苦] [5次] 01-9-24 下午 06:54:31 

兄弟,你有什么好办法在c51中实现汇编中的RLC A 功能?不要跟我说是c跟汇编混合编程。 [shiaf] [9次] 01-9-25 上午 08:42:26 

搜索“循环移位” [大头小语] [1次] 01-9-25 下午 07:22:29 

 
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2001 

⌨️ 快捷键说明

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