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(); //停止
} 展开
{
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(); //停止
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询