|
在写ds18b20驱动程序时,由于读设备64位rom代码,因此想用下结构体。
自定义的结构体为:
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中不能对结构体赋值?希望各位大侠能帮我解决下
|
|