打印

请各位网友看看如何读写这个eeprom

[复制链接]
5820|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xbyu520|  楼主 | 2014-3-11 13:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这是我的程序,总是写不进去。各位大师帮忙看看/谢谢各位了!

#include<reg52.h>
#include <soft_delay.h>

sbit scl=P2^0;                                                //¶ÔÓ¦c8051f340¿ª·¢°åscl
sbit sda=P2^1;                                                //¶ÔÓ¦c8051f340¿ª·¢°åsda
sbit led=P2^4;                                                //¹¤×÷ָʾµÆ



void start()                        //¿ªÊ¼ÐźÅ
{
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();
}
void stop()                        //½áÊøÐźÅ
{
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
}
void respons()                        //Ó¦´ðÐźÅ
{
        uchar i;
        scl=1;
        delay();
        while((sda==1)&&(i<250))
                i++;
        scl=0;
        delay();
}
void init()
{
        sda=1;
        delay();
        scl=1;
        delay();
}
void write_byte(uchar date)
{
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
                temp=temp<<1;
                scl=0;
                delay();
                sda=CY;
                delay();
                scl=1;
                delay();
        }
                scl=0;
                delay();
                sda=1;
          delay();
}
uchar read_byte()
{
                uchar i,k;
                scl=0;
                delay();
                sda=1;
                delay();
                for(i=0;i<8;i++)
                {
                        scl=1;
                        delay();
                        k=(k<<1)|sda;
                        scl=0;
                        delay();
                }
                        return k;


}
/*Ö¸¶¨µØÖ·¶ÁÒ»¸ö×Ô¼ºµÄº¯Êý*/
uchar read_add(uchar address)
{
          uchar date;
                start();
                write_byte(0xa0);
                respons();
                write_byte(address);
                respons();
                start();
                write_byte(0xa1);
                respons();
                date=read_byte();
                stop();
                return date;
}
/*Ö¸¶¨µØַдһ¸ö×ֽڵĺ¯Êý*/
void write_add(uchar address,uchar date)
{
                start();
                write_byte(0xa0);
                respons();
                write_byte(address);
                respons();
                write_byte(date);
                respons();
                stop();
}
uchar p;
void main()
{
                init();
                write_add(0x00,0x99);
                p=read_add(0x00);
                if(p==0x99)
                {
                        led=~led;
                        delay();
                        delay();
                }
                else
                {
                        led=0;
                }
               
}


相关帖子

沙发
xbyu520|  楼主 | 2014-3-11 13:10 | 只看该作者
#include<reg52.h>
#include <soft_delay.h>

sbit scl=P2^0;                                               
sbit sda=P2^1;                                               
sbit led=P2^4;                                               



void start()                        //总线开始信号
{
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();
}
void stop()                        //总线结束信号
{
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
}
void respons()                        //总线应答信号
{
        uchar i;
        scl=1;
        delay();
        while((sda==1)&&(i<250))
                i++;
        scl=0;
        delay();
}
void init()                        //总线初始化
{
        sda=1;
        delay();
        scl=1;
        delay();
}
void write_byte(uchar date)           //写字节函数
{
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
                temp=temp<<1;
                scl=0;
                delay();
                sda=CY;
                delay();
                scl=1;
                delay();
        }
                scl=0;
                delay();
                sda=1;
          delay();
}
uchar read_byte()                    //读字节函数
{
                uchar i,k;
                scl=0;
                delay();
                sda=1;
                delay();
                for(i=0;i<8;i++)
                {
                        scl=1;
                        delay();
                        k=(k<<1)|sda;
                        scl=0;
                        delay();
                }
                        return k;


}
/*指定地址读一个字节的函数*/
uchar read_add(uchar address)
{
          uchar date;
                start();
                write_byte(0xa0);
                respons();
                write_byte(address);
                respons();
                start();
                write_byte(0xa1);
                respons();
                date=read_byte();
                stop();
                return date;
}
/*指定地址写一个字节的函数*/
void write_add(uchar address,uchar date)
{
                start();
                write_byte(0xa0);
                respons();
                write_byte(address);
                respons();
                write_byte(date);
                respons();
                stop();
}
uchar p;
void main()                   //主函数
{
                init();
                write_add(0x00,0x99);
                p=read_add(0x00);           //写进去后再读出来。看看写的对不对。
                if(p==0x99)                     //写的对不对,用这个灯指示一下了
                {
                        led=~led;
                        delay();
                        delay();
                }
                else
                {
                        led=0;
                }
               
}




使用特权

评论回复
板凳
xbyu520|  楼主 | 2014-3-11 13:11 | 只看该作者
#define uchar unsigned char
void delay()
{
        uchar j1,j2;
        for(j1=0;j1<50;j1++)
//        for(t=0;t<255;t++)
        for(j2=0;j2<100;j2++);

}

使用特权

评论回复
地板
xbyu520|  楼主 | 2014-3-11 13:12 | 只看该作者
#define uchar unsigned char
void delay()
{
        uchar j1,j2;
        for(j1=0;j1<50;j1++)
        for(j2=0;j2<100;j2++);

}

使用特权

评论回复
5
xbyu520|  楼主 | 2014-3-11 13:13 | 只看该作者
延时函数长一点应该没什么问题吧。

使用特权

评论回复
6
xbyu520|  楼主 | 2014-3-11 13:13 | 只看该作者
是eeprom  24c02  单片机STC89c54Rd+

使用特权

评论回复
7
xbyu520|  楼主 | 2014-3-11 13:14 | 只看该作者
11.0592Mhz的晶振

使用特权

评论回复
8
xbyu520|  楼主 | 2014-3-11 13:38 | 只看该作者
为什么写不进去呢????各位来看看啊

使用特权

评论回复
9
xbyu520|  楼主 | 2014-3-11 13:55 | 只看该作者
自己顶

使用特权

评论回复
10
晓妖不成精a| | 2014-3-11 14:01 | 只看该作者
本帖最后由 晓妖不成精a 于 2014-3-11 16:03 编辑

http://www.****ducst/datasheet/ ... +_GUIDE-CHINESE.pdf      不知道这个系列的资料能不能帮到你,第九章EEPROM的应用

使用特权

评论回复
11
xbyu520|  楼主 | 2014-3-11 15:04 | 只看该作者
自顶

使用特权

评论回复
12
晓妖不成精a| | 2014-3-11 16:07 | 只看该作者
坐等大师

使用特权

评论回复
13
liudanwei| | 2014-3-11 16:28 | 只看该作者
你确定是写不进去。

使用特权

评论回复
14
xbyu520|  楼主 | 2014-3-11 16:32 | 只看该作者
根据led指示灯,判断没写进去或者没读出来。

使用特权

评论回复
15
xbyu520|  楼主 | 2014-3-11 16:34 | 只看该作者
liudanwei 发表于 2014-3-11 16:28
你确定是写不进去。

根据led指示灯,判断没写进去或者没读出来。反正就是感觉读写不正常

使用特权

评论回复
16
xbyu520|  楼主 | 2014-3-11 16:35 | 只看该作者
坐等大师

使用特权

评论回复
17
xbyu520|  楼主 | 2014-3-11 16:39 | 只看该作者
WP连接“地”。SDA 和SCL连接IO口。程序就是上面的程序。晶振11.0592MHz.单片机是传统单片机STC89C54RD+

电路连接图.jpg (15.73 KB )

电路连接图.jpg

使用特权

评论回复
18
liudanwei| | 2014-3-11 16:49 | 只看该作者
xbyu520 发表于 2014-3-11 16:34
根据led指示灯,判断没写进去或者没读出来。反正就是感觉读写不正常

那就先判断是否写进去了,

使用特权

评论回复
19
ningling_21| | 2014-3-11 17:17 | 只看该作者
xbyu520 发表于 2014-3-11 16:39
WP连接“地”。SDA 和SCL连接IO口。程序就是上面的程序。晶振11.0592MHz.单片机是传统单片机STC89C54RD+ ...

总线没有上拉电阻吗?

使用特权

评论回复
20
highend| | 2014-3-11 20:10 | 只看该作者
嗯,电阻,很重要。 可以示波器一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:工作不养闲人,团队不养懒人。赚不到钱赚知识,赚不到知识赚经历,赚不到经历赚阅历,让人迷茫的原因只有一

43

主题

853

帖子

5

粉丝