打印
[C语言]

执行代码P4=P4^0x38后,为何 P4未变?

[复制链接]
1505|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如下图,C8051F580在keil4中仿真。
P4端口的原值为0xC7,执行 P4=P4^0x38 代码后,应该是:0xFF。
可是,实际的执行结果 却未变,仍然是0xC7 !

请问,这是 为什么 ?

谢谢!

备注:
0xC7 -> 1100 0111
0x38 -> 0011 1000
0xFF -> 1111 1111

附图


使用特权

评论回复

相关帖子

沙发
oufuqiang| | 2020-2-2 23:41 | 只看该作者
你记错运算符了,或是|,异或是^

使用特权

评论回复
评论
lihui567 2020-2-3 11:16 回复TA
是FF 
板凳
ElectronF0|  楼主 | 2020-2-3 15:31 | 只看该作者
oufuqiang 发表于 2020-2-2 23:41
你记错运算符了,或是|,异或是^

谢谢!

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

巧合的是 ,此时,^和|的结果一样

使用特权

评论回复
地板
ElectronF0|  楼主 | 2020-2-4 13:02 | 只看该作者
搞定了,可是原因还是不清楚,见附一

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

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

附图一


附图二


附图三


使用特权

评论回复
5
幸福至上| | 2020-2-5 12:27 | 只看该作者
可以先把P4的值先读到一个u8变量,异或运算完再写回P4,看是读取、运算、输出的哪个环节出的问题。

使用特权

评论回复
6
airwill| | 2020-2-19 22:16 | 只看该作者
P4端口的原值为0xC7,执行 P4=P4^0x38 代码后,应该是:0xFF。

计算没有错,  问题在于 P4=P4^0x38 这个操作是个 读修改写的指令,  这样的指令读的不是端口, 而是内部寄存器, 和端口状态可能并不一致.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:永远的助理工程师

273

主题

1345

帖子

10

粉丝