在向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 跳转至页
回复
打赏帖 | |
---|---|
【Zephyr】使用Zephyr外设初始化过程解析被打赏30分 | |
【S32K146】S32DS watchdog 配置使用被打赏20分 | |
【Zephyr】使用 IAR 调试 Zephyr 镜像被打赏20分 | |
赚取电动螺丝刀+电源电路理论知识分享1被打赏5分 | |
我想要一部加热台+分享常见运算放大器电路的应用被打赏5分 | |
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
我想要一部加热台+常见的MOS管驱动电路被打赏5分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下串口调试printf输出记录被打赏29分 | |
【瑞萨RA2E1开发板】:使用ADC功能实现位移传感器采集方案被打赏20分 |