在向EEPROM 24c02 写数据时出现一个怪事,向一个地址写入偶数如:2、4、6...,可以写入,并且可以读出,但是写入奇数如:1、3、5...,则不能写入,读出的数还是以前的数据,不知为啥,请高手解答,谢谢!!!!
程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P2^1;
sbit sda=P2^0;
void delay()
{;;}
void delay_ms(uint j)
{
uint i;
for(j;j>0;j--)
for(i=110;i>0;i--);
}
void IIC_init() //IIC初始化
{
scl=1;
sda=1;
}
void IIC_start() //IIC开始信号
{
scl=1;
sda=1;
delay();
sda=0;
delay();
}
void IIC_stop() //IIC终止
{
scl=1;
sda=0;
delay();
sda=1;
delay();
}
void IIC_check() //查看IIC器件是否应答
{
scl=1;
delay();
while(sda);
delay();
scl=0;
}
void IIC_w_bite(uchar bite) //向IIC器件写1比特数据
{
uchar i;
for(i=8;i>0;i--)
{
scl=0;
delay();
bite=bite<<1;
sda=CY;
delay();
scl=1;
delay();
scl=0;
}
}
uchar IIC_r_bite() //读取IIC器件1比特数据
{
uchar i,dd;
for(i=8;i>0;i--)
{
scl=1;
delay();
dd=dd<<1|sda;
delay();
scl=0;
delay();
}
return dd;
}
void main()
{
IIC_init();
IIC_start();
IIC_w_bite(0xa0); //寻址并发送给IIC器件准备写数据
IIC_check(); //应答
IIC_w_bite(0x1); //发送存储器存储地址
IIC_check();
IIC_w_bite(0x2); //发送要给IIC器写入的数据
IIC_check();
IIC_stop();
delay_ms(5);
IIC_start();
IIC_w_bite(0xa0); //寻址并发送给IIC器件准备写数据
IIC_check(); //应答
IIC_w_bite(0x1); //发送存储器存储地址
IIC_check();
IIC_start();
IIC_w_bite(0xa1); //发送信息给IIC准备读数据
IIC_check();
P1=IIC_r_bite(); //读数据到P1口
IIC_stop();
while(1);
}
共6条
1/1 1 跳转至页
WHY?EEPROM存储器24c02只能写入偶地址,奇地址异常。

关键词: EEPROM 24c02 存储器

或许以下信息对楼主有帮助:
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。

共6条
1/1 1 跳转至页
回复
打赏帖 | |
---|---|
宏定义和const关键字定义被打赏5分 | |
【功率监测与控制系统DIY活动成果贴】DIY功率计与LabVIEW数据采集被打赏100分 | |
【Freertos】任务管理被打赏10分 | |
分享博世的两种不同的喷射系统模式被打赏5分 | |
汽车+开路实验与短路实验被打赏10分 | |
多点式电子控制汽油喷射系统知识分享被打赏10分 | |
分享机械控制式汽油喷射系统被打赏5分 | |
【分享开发笔记,赚取电动螺丝刀】解决基于CH341制作无线模块时芯片发热问题被打赏31分 | |
【分享开发笔记,赚取电动螺丝刀】使用STM32F103ZE主控调试RS485通讯的避坑经验被打赏36分 | |
【分享开发笔记,赚取电动螺丝刀】移植xprintf模块被打赏27分 |