返回该小组首页 回复主题
HeartFly

HeartFly

小组等级:     E币:177  (E币换礼)

#1楼主:困惑:C51中结构体的使用

文章发表于:2008-07-23 02:11

在写ds18b20驱动程序时,由于读设备64位rom代码,因此想用下结构体。

使用单片机:NXP的P89V51RD2FN
自定义的结构体为:
struct RomCode
{
    uchar FamilyCode;
    uchar SerialCode[6];
    uchar Crc;
};
测试主函数:
void main()
{
    uchar i;
    struct RomCode ds;       //定义结构体变量

    ds.FamilyCode = 0xee;    //结构体赋值
    for(i=0;i<6;i++)
        ds.SerialCode = i;
    ds.Crc = 0xff;

    LEDPORT = ds.FamilyCode;    //用8个LED灯显示ds.FamilyCode的值
}
困惑:观察到LEDPORT显示的并不是0xee,而且不管给ds.FamilyCode赋什么值,最终运行结果显示的都是0x05;
尝试解决的过程:
    试着把    for(i=0;i<6;i++)
                          ds.SerialCode = i;
                   ds.Crc = 0xff;
屏蔽掉后,发现LEDPORT显示0xee,正确了!~
疑问:为什么会出现这种情况?我在VC6.0中试了下,结构体按上述方法可正常赋值,不会出现前面已赋值的数据被更改的情况。难道在C51中不能对结构体赋值?希望各位大侠能帮我解决下

HeartFly

   小组等级:    E币:177  (E币换礼)

#2

文章发表于:2008-07-23 05:55

解决......

HeartFly

   小组等级:    E币:177  (E币换礼)

#3

文章发表于:2008-07-23 05:55

解决了。。。

anfa

   小组等级:    E币:93  (E币换礼)

#4

文章发表于:2008-08-22 15:27

是不是这句有问题啊

for(i=0;i<6;i++)
        ds.SerialCode = i;

改成

for(i=0;i<6;i++)
        ds.SerialCode[ i ] = i;

 

行不行。

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...