打印

求救,24C02怎么读写一个大于255的数

[复制链接]
5320|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sin0725|  楼主 | 2012-12-28 23:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
airwill| | 2012-12-28 23:22 | 只看该作者
24C02 是 8 位保存数据的. 何以能表达 大于255的数?
作为 无符合数保存在里面, 读出来后, 再由软件来解释吧

使用特权

评论回复
板凳
xinxi| | 2012-12-28 23:25 | 只看该作者
难道楼主想在1字节内表达任意数?  字节弄多一点 不就行了? 或者说把你要保存的数,转成16进制,然后逐个字节写入2402,

使用特权

评论回复
地板
huangxz| | 2012-12-28 23:28 | 只看该作者
用两个字节就可以表达0~0xffff,用4个字节就可以表达0~0xffffffff,以此类推

使用特权

评论回复
评论
李晓倩 2014-4-8 22:23 回复TA
斗破苍穹漫画 www.jinjidejuren.tv/douluodalu/ 
5
sin0725|  楼主 | 2012-12-28 23:41 | 只看该作者
本帖最后由 sin0725 于 2013-5-27 09:53 编辑

:funk:唉  怎么办

使用特权

评论回复
6
xinxi| | 2012-12-28 23:56 | 只看该作者
你把FFFF写入2402,那么读出来还是FFFF啊,你为什么要多此一举 要把FFFF经过运算变回FFFF呢? 这还用变么?

使用特权

评论回复
7
sin0725|  楼主 | 2012-12-28 23:59 | 只看该作者
2402   8 位保存数据 FFFF写进去 取出来就会是FF吧

使用特权

评论回复
8
xinxi| | 2012-12-29 00:04 | 只看该作者
呵呵,既然你说 "8 位保存数据",那你的 "FFFF写进去" 是怎么写进去的啊,, 好比 你把1234写进去,读的时候 你偏偏只读12, 不读34, 你这不是搬起石头砸自己的脚么

使用特权

评论回复
9
江枫渔火| | 2012-12-29 00:08 | 只看该作者
这个芯片是按字节宽度处理数据的。如果要存入大于255的数,则必须是至少两个字节,存的时候,把这个数拆分成两部分,高8位和低8位,分别存入两个地址。读的时候又从这两个地址中分别读出再组合。
1,确保读写芯片功能代码是正常的,
2,确保写入和读出字节时,拆分和组合的过程是互逆的(也就是对应起来)。

使用特权

评论回复
评论
sin0725 2012-12-30 01:12 回复TA
感谢 
评分
参与人数 1威望 +1 收起 理由
sin0725 + 1 严重同意,在弄程序了,希望能行.
10
sin0725|  楼主 | 2012-12-29 00:23 | 只看该作者
8 位保存数据  只能保存8位 就好像我写 0,1,2,3,4,5,6,7,8,9进去 读出来就变成8,9,2,3,4,5,6,7  卷页了 看明白我说的了吗?

使用特权

评论回复
11
xinxi| | 2012-12-29 01:10 | 只看该作者
嗯一直都看的很明白,只是你自己表达的不明白, 看来你对分页保存数据,不明白,不知道我的说的对不对

使用特权

评论回复
12
anazel| | 2012-12-29 07:13 | 只看该作者
没碰到过这种情况

使用特权

评论回复
13
ayb_ice| | 2012-12-29 08:06 | 只看该作者

typedef U16 unsigned int;
typedef U8 unsigned char;


typedef union{
    U8 u8[2];
    U16 u16;

//-------------------------------
// 大端格式
    struct{
        U8 high;
        U8 low;
    }of;
////-------------------------------
//// 小端格式
//    struct{
//        U8 low;
//        U8 high;
//    }of;

}t_U16;


t_U16 eeprom_u16;

//-------------------------------
// 写
        eeprom_u16.u16 = 0x1234;
        ee24c02_write_byte(0, eeprom_u16.of.high);        // 0x12
        ee24c02_write_byte(1, eeprom_u16.of.low);        // 0x34


//-------------------------------
// 读
        eeprom_u16.u16 = 0x00;
        ee24c02_read_byte(0, eeprom_u16.of.high);        // 0x12
        ee24c02_read_byte(1, eeprom_u16.of.low);        // 0x34

        if(eeprom_u16.u16 != 0x1234){
                __error();
        }

使用特权

评论回复
14
wangyy608| | 2012-12-29 08:14 | 只看该作者
分别验证代码,先确定拆的是否正确,在确定和的是否正确,先去掉一个字节的读写24C02是否正确,再确定连续的读写是否正确

使用特权

评论回复
15
linbei1988| | 2012-12-29 21:05 | 只看该作者
之前看到24C02的数据手册,好像什么后缀的是有16位的。。不过不知道这个16位何解

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

17

帖子

0

粉丝