当前位置: 代码迷 >> 单片机 >> C51 位寻址疑问!解决方案
  详细解决方案

C51 位寻址疑问!解决方案

热度:507   发布时间:2016-04-28 16:25:13.0
C51 位寻址疑问!
我知道,
sbit是定义一个可以位寻址的变量如:
C/C++ code
sbit P00 = P0^0;

P00代表了一个可以位寻址的变量P0.0,
疑问,上述定义中,那个尖尖“^ ”,是不是异或运算,还有,尖尖后面的那个数“0”,可不可以用一个变量代替。

C/C++ code
unsigned char index = 0;    if ( P0^index == 1 )    {       //........    }

如果可以这样的话,就可以在循环里面方便的遍历可位寻址的寄存器的每一比特了,
由于bit是不能定义数组的,但是bdata这个关键字的意思是在可以位寻址的内部RAM区域20H-2FH中定义一个变量,如
C/C++ code
unsigned char bdata BYTE  = 0x55;

如果可以在尖尖后面加一个变量来遍历每一比特的话,不就可以使用这种方式来替代不能用bit定义数组的缺憾了吗!
望牛人解析!

------解决方案--------------------
sbit P00 = P0^0; 这里^不是异或,就是这么一个用法,标示P0.0的意思。。。


------解决方案--------------------
呵呵,就是c里面规定的,不知哪位先人在编写的时候随手这么一些,这就成了规定了
------解决方案--------------------
刚才仔细的看了一下H文件里的内容,里面也有类似于sbit P00 = P0^0这样的应用
但是这些都是集中于对寄存器的各个位的指代,我猜想,在编译器中,^在这里的使用应该是对应了特殊的编译转换,而不是异或的意思
------解决方案--------------------
补充一下,编译器对于寄存器名称的转换,最终是转换为数字地址的。而BYTE和BIT的指针形式是不同的。所以LZ的设想应该是无法实现的
  相关解决方案