PIC单片机 无法从24C02(EEPROM)中读出数据,但是可以写入,仿真用的是proteus ,差了很久,找不出错

ucharreceive_byte(void)//读一个8位字{uchari,temp,data_sda;TRISD7=1;delay(1);for(i=0;i<8;i+... uchar receive_byte(void) //读一个8位字
{
uchar i,temp,data_sda;
TRISD7=1;
delay(1);
for(i=0;i<8;i++)
{
scl=1;
delay(1);
temp=temp<<1;
data_sda=RD7;
if(data_sda!=0)
temp=temp|0x01;
scl=0;
delay(1);
}
TRISD7=0;
return temp;
}

uchar read_word(uchar device_add,uchar word_add) //读出一个存储的数据
{
uchar date;
start(); //启动
send_byte(device_add); //选择从器件地址,RW位为0,即选择写命令
send_byte(word_add); //写字地址
start(); //启动
send_byte(device_add+1); //选择从器件地址,RW位为1,即选择读命令
date=receive_byte(); //读数据
return date; //返回读取结果数据
}

void read_nword(uchar device_add,uchar word_add,uchar n, uchar *date) //读出一个存储的数据
{
uchar i;
start(); //启动
send_byte(device_add); //选择从器件地址,RW位为0,即选择写命令
send_byte(word_add); //写字地址

start(); //启动
send_byte(device_add+1);//选择从器件地址,RW位为1,即选择读命令
for(i=0;i<n-1;i++)
{
*date=receive_byte();//读数据
sendACK(0); //发送应答信号
date++; //数据地址加1
}
*date=receive_byte(); //读数据
sendACK(1); //发送非应答信号
stop(); //停止
}
展开
 我来答
久与你士19
2013-06-12
知道答主
回答量:9
采纳率:0%
帮助的人:13.3万
展开全部
I2C协议的吧 对照一下时序看有没有搞错
send_byte(device_add); //选择从器件地址,RW位为0,即选择写命令

这句后面应该有一个接收ACK吧?

还有for(i=0;i<n-1;i++) 这里应该是i<n吧 不用n-1
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式