微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机位操作问题

51单片机位操作问题

时间:10-02 整理:3721RD 点击:
单片机为stc宏晶单片机,8位单片机。我给一个状态变量赋值是。当我位操作是:
status |= 0x00800000;
status |= 0x00400000;
结果正确。
先预定义
#define POS_STATUS_USECD  1<<18
#define POS_STATUS_USEBD  1<<19
status |= POS_STATUS_USEBD;
status |= POS_STATUS_USECD;
status 18 19位结果为0。不能达到我位或的结果
这个是怎么回事。希望知道的给个答复。谢谢。

不好意思。18、19位数据应该为:
status |= 0x00080000;
status |= 0x00040000;
坐等大神解答。不知道是不是只能操作16数据。

把十六进制改成二进制吧

试试把宏改为
#define POS_STATUS_USECD  1UL<<18
#define POS_STATUS_USEBD  1UL<<19

你是不是用的uvsion软件来编程的?在uvison中整型常量默认为2个字节16位(可通过a=sizeof(1);语句来进行验证,在debug中查看a的值为2),1<<15后就变为1000 0000 0000 0000,再继续左移则高位的1溢出,以后一直为0000 0000 0000 0000,因此,1<<18和1<<19后16位上全为0(十进制0),再与status进行按位或运算就得不到正确结果。可将1改为长整形数据1L或1UL,此时1L或1UL为4字节数据32位,左移18位或19位后,1不会溢出,此时可得到正确结果。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top