执行代码P4=P4^0x38后,为何 P4未变?
如下图,C8051F580在keil4中仿真。P4端口的原值为0xC7,执行 P4=P4^0x38 代码后,应该是:0xFF。
可是,实际的执行结果 却未变,仍然是0xC7 !
请问,这是 为什么 ?
谢谢!
备注:
0xC7 -> 1100 0111
0x38 -> 0011 1000
0xFF -> 1111 1111
附图
你记错运算符了,或是|,异或是^ oufuqiang 发表于 2020-2-2 23:41
你记错运算符了,或是|,异或是^
谢谢!
我需要的就是: 异或^;而非 或|;
巧合的是 ,此时,^和|的结果一样{:titter:} 搞定了,可是原因还是不清楚,见附一
把XBR2初始化这行代码 打开就可以了,见附二
可是XBR2和P4毫无关系呀,好奇葩,见附图三
P0-P3都有对应的XBR,唯独P4没有
附图一
附图二
附图三
可以先把P4的值先读到一个u8变量,异或运算完再写回P4,看是读取、运算、输出的哪个环节出的问题。 P4端口的原值为0xC7,执行 P4=P4^0x38 代码后,应该是:0xFF。
计算没有错,问题在于 P4=P4^0x38 这个操作是个 读修改写的指令,这样的指令读的不是端口, 而是内部寄存器, 和端口状态可能并不一致.
页:
[1]