打印

24c04读写uint型数据

[复制链接]
1980|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
ayb_ice| | 2014-7-3 08:04 | 只看该作者
明显是程序有问题

写完有延时或查询完成吗

使用特权

评论回复
板凳
ningling_21| | 2014-7-3 08:30 | 只看该作者
这样写不够简练,不如调用用一个程序就搞定...

如:Rd_nbyte(uint addr,uchar len,uchar *buff);//起始地址,数据长度,指针

Wr_nbyte(uint addr,uchar len,uchar *buff);

Wr_nbyte(2001,2,i2c_buf); //写入2个字节

使用特权

评论回复
地板
原野之狼| | 2014-7-3 09:04 | 只看该作者
贴出的代码不足以说明问题,可能底层的实现有些问题。

使用特权

评论回复
5
lu50211| | 2014-7-3 14:14 | 只看该作者
本帖最后由 lu50211 于 2014-7-3 14:20 编辑

void write_twobyte(uint addr,uint datt)
{ uchar a,b;
a=(datt/256);
Write_Byte_24C(addr,a);;;;;;;;
Write_Byte_24C(addr+1,datt);;;;;;
}

楼主,是你写入的数据有误,你看这句:Write_Byte_24C(addr+1,datt);;;;;;
这是写datt数据,16位,而C02不支持16位。改成如下应该就可以了。

void write_twobyte(uint addr,uint datt)
{ uchar a,b;
a=(datt/256);    //拆分数据高8位
b=(datt%256); //拆分数据低8位
Write_Byte_24C(addr,a);;;;;;;;//写高位数据
Write_Byte_24C(addr+1,b);;;;;;//写低位数据
}

使用特权

评论回复
6
ayb_ice| | 2014-7-3 16:36 | 只看该作者
lu50211 发表于 2014-7-3 14:14
void write_twobyte(uint addr,uint datt)
{ uchar a,b;
a=(datt/256);

LZ的是可以的
这样的情况数据会自动截断的

使用特权

评论回复
7
留声而过|  楼主 | 2014-7-3 22:17 | 只看该作者
ningling_21 发表于 2014-7-3 08:30
这样写不够简练,不如调用用一个程序就搞定...

如:Rd_nbyte(uint addr,uchar len,uchar *buff);//起始地 ...

前辈,我的指针学的还不是很好!  你可以帮我看看程序有没有问题吗?

使用特权

评论回复
8
ningling_21| | 2014-7-3 22:31 | 只看该作者
留声而过 发表于 2014-7-3 22:17
前辈,我的指针学的还不是很好!  你可以帮我看看程序有没有问题吗?

先把双字节地址该为单字节地址试试吧...

使用特权

评论回复
9
留声而过|  楼主 | 2014-7-3 22:43 | 只看该作者
ningling_21 发表于 2014-7-3 22:31
先把双字节地址该为单字节地址试试吧...

uchar型数据写入没有问题,但是只要在任意地址写入一个数据,其它地址读出的也都是这个数据的值。

使用特权

评论回复
10
ayb_ice| | 2014-7-4 07:49 | 只看该作者
ningling_21 发表于 2014-7-3 22:31
先把双字节地址该为单字节地址试试吧...

人家是24C04
地址就是双字节

使用特权

评论回复
11
ningling_21| | 2014-7-4 08:19 | 只看该作者
留声而过 发表于 2014-7-3 22:43
uchar型数据写入没有问题,但是只要在任意地址写入一个数据,其它地址读出的也都是这个数据的值。 ...



对比这个时序和你的程序,看看不同之处...

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
留声而过 + 1
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

52

帖子

2

粉丝