单片机IIC总线上24c02写数据问题。 50
程序如下功能为开机次数储存:#include"reg52.h"//定义51单片机特殊功能寄存器#include"i2c.h"//I2C总线驱动库#include"absa...
程序如下 功能为开机次数储存:
#include "reg52.h" //定义51单片机特殊功能寄存器
#include "i2c.h" //I2C总线驱动库
#include "absacc.h"
code unsigned char tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0xff };
unsigned char dspbuf[8] = {10,10,10,10,10,0,0,0}; //显示缓冲区
unsigned char dspcom = 0;
unsigned char reset_cnt;
void display(void);
//主函数
void main(void)
{
//开机次数存储 (最大存储值255)
unsigned char a;
reset_cnt = read_eeprom(0x00); //从AT24C02地址0x00中读取数据
reset_cnt++;
write_eeprom(0x00,reset_cnt); //向AT24C02地址0x00中写入数据
while(1)
{
display() ;
}
}
//显示函数
void display(void)
{ dspbuf[5] = reset_cnt/100;
dspbuf[6] = reset_cnt%100/10;
dspbuf[7] = reset_cnt%10;
XBYTE[0xE000] = 0xff; //消隐
XBYTE[0xC000] = (1<<dspcom);
XBYTE[0xE000] = tab[dspbuf[dspcom]]; //段码
if(++dspcom == 8){
dspcom = 0;
}
}
以下为IIC.h部分子函数
如果把写数据部分改成
for(a=4;a>0;a--)
{
write_eeprom(0x00,reset_cnt);
}
或者先写数据 再读数据
就完全正常 。
但是 先读数据(能读出来)再写就写不进去;
这是什么原因呢?
(单片机型号为STC15F61S2 )
IIC程序 ,是参照郭天祥的教程写的,只修改了软件延迟。
求老师指导。 展开
#include "reg52.h" //定义51单片机特殊功能寄存器
#include "i2c.h" //I2C总线驱动库
#include "absacc.h"
code unsigned char tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0xff };
unsigned char dspbuf[8] = {10,10,10,10,10,0,0,0}; //显示缓冲区
unsigned char dspcom = 0;
unsigned char reset_cnt;
void display(void);
//主函数
void main(void)
{
//开机次数存储 (最大存储值255)
unsigned char a;
reset_cnt = read_eeprom(0x00); //从AT24C02地址0x00中读取数据
reset_cnt++;
write_eeprom(0x00,reset_cnt); //向AT24C02地址0x00中写入数据
while(1)
{
display() ;
}
}
//显示函数
void display(void)
{ dspbuf[5] = reset_cnt/100;
dspbuf[6] = reset_cnt%100/10;
dspbuf[7] = reset_cnt%10;
XBYTE[0xE000] = 0xff; //消隐
XBYTE[0xC000] = (1<<dspcom);
XBYTE[0xE000] = tab[dspbuf[dspcom]]; //段码
if(++dspcom == 8){
dspcom = 0;
}
}
以下为IIC.h部分子函数
如果把写数据部分改成
for(a=4;a>0;a--)
{
write_eeprom(0x00,reset_cnt);
}
或者先写数据 再读数据
就完全正常 。
但是 先读数据(能读出来)再写就写不进去;
这是什么原因呢?
(单片机型号为STC15F61S2 )
IIC程序 ,是参照郭天祥的教程写的,只修改了软件延迟。
求老师指导。 展开
2个回答
2015-02-02
展开全部
在器件在有它各自的址,但它们有两不同的区分方法,如:EEPROM芯片它不仅有内部地,它还有外接的几个引脚用于区分不同的EEPROM芯片,而温度传感器它的内部地址每一个都不同(出厂时就已写入)。有还有就是I2C有8位地址和10位地址两种。
追问
这个我知道,首先寻址没有错,有错的话不可能读到。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请问问题解决了吗,我和你的问题一样,程序也一样,刚开始往0x00写初始数据时是可以写的,但是读了之后再写就不写不进去了,按理说刚开始能写的话时序应该是没问题的...???为啥啊???往别的地址也是可以写的。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询