ElectronF0 发表于 2020-2-2 22:27

执行代码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

你记错运算符了,或是|,异或是^

ElectronF0 发表于 2020-2-3 15:31

oufuqiang 发表于 2020-2-2 23:41
你记错运算符了,或是|,异或是^

谢谢!

我需要的就是: 异或^;而非 或|;

巧合的是 ,此时,^和|的结果一样{:titter:}

ElectronF0 发表于 2020-2-4 13:02

搞定了,可是原因还是不清楚,见附一

把XBR2初始化这行代码 打开就可以了,见附二

可是XBR2和P4毫无关系呀,好奇葩,见附图三
P0-P3都有对应的XBR,唯独P4没有

附图一


附图二


附图三


幸福至上 发表于 2020-2-5 12:27

可以先把P4的值先读到一个u8变量,异或运算完再写回P4,看是读取、运算、输出的哪个环节出的问题。

airwill 发表于 2020-2-19 22:16

P4端口的原值为0xC7,执行 P4=P4^0x38 代码后,应该是:0xFF。

计算没有错,问题在于 P4=P4^0x38 这个操作是个 读修改写的指令,这样的指令读的不是端口, 而是内部寄存器, 和端口状态可能并不一致.
页: [1]
查看完整版本: 执行代码P4=P4^0x38后,为何 P4未变?