C51 位寻址疑问!

java_lover_ 2010-03-24 04:22:02
我知道,
sbit是定义一个可以位寻址的变量如:
sbit P00 = P0^0;

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

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

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

unsigned char bdata BYTE = 0x55;

如果可以在尖尖后面加一个变量来遍历每一比特的话,不就可以使用这种方式来替代不能用bit定义数组的缺憾了吗!
望牛人解析!
...全文
308 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixiang532328443 2010-05-18
  • 打赏
  • 举报
回复
我也学习了,不过楼主的精神可嘉,向lz学习
java_lover_ 2010-03-24
  • 打赏
  • 举报
回复
谢谢各位的见解,看来这个尖尖确实不是异或的意思!
C_Rabbit 2010-03-24
  • 打赏
  • 举报
回复
补充一下,编译器对于寄存器名称的转换,最终是转换为数字地址的。而BYTE和BIT的指针形式是不同的。所以LZ的设想应该是无法实现的
C_Rabbit 2010-03-24
  • 打赏
  • 举报
回复
刚才仔细的看了一下H文件里的内容,里面也有类似于sbit P00 = P0^0这样的应用
但是这些都是集中于对寄存器的各个位的指代,我猜想,在编译器中,^在这里的使用应该是对应了特殊的编译转换,而不是异或的意思
吻花者 2010-03-24
  • 打赏
  • 举报
回复
呵呵,就是c里面规定的,不知哪位先人在编写的时候随手这么一些,这就成了规定了
mxm1986 2010-03-24
  • 打赏
  • 举报
回复
sbit P00 = P0^0; 这里^不是异或,就是这么一个用法,标示P0.0的意思。。。

27,508

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧