PHPWIND
HELLOCQ
UID:518
图片:c.JPG
UID:17497
p1^0这种表达方式本身就已经是一种运算了。具体是什么运算,怎么运算的呢?请详细分析一下,谢谢!
最奇怪的是:这样就正常了-----#include <reg51.h>void main()sbit pa=p1^0;sbit pb=p1^1;{ bit k0;bit k1;k0 = pa; k1 = pb;}道理何在呢?
在硬件上位操作也是要把8位都读进来进行操作的呀?有何不同可言呢?
在第1个程序中 如果p1=11111100 那么k0 = p1^0执行的具体细节是什么?
这个在你第一楼的图中可以清楚的看到啊
我也是学了C51不长时间,我研究了好半天,终于发现问题所在。首先,你这个的编译结果是没有错的。只是没有像你想像的那样。p1^0,是指p1的0位,这样KEIL在编译的时候,会先把p1读出来,取出0位来运算。那问题出在哪呢?出在了你p1^0这种表达方式,这种表达方式本身就已经是一种运算了。?
我的理解是 采用预处理文件与否应该效果是一样的 也就是说用p1^0 和 用pa 编译后是一样的才对。 可结果是不一样的 ???
说的详细一些吧:开始运行时,设定p1=11111100 单步运行k0=p1^0 后,k0=1 而不是0!为什么?
图片:sbit.jpg
图片:sbit1.jpg
图片:sbit2.jpg