[C语言] 执行代码P4=P4^0x38后,为何 P4未变?

[复制链接]
1730|6
 楼主| ElectronF0 发表于 2020-2-2 22:27 | 显示全部楼层 |阅读模式
如下图,C8051F580在keil4中仿真。
P4端口的原值为0xC7,执行 P4=P4^0x38 代码后,应该是:0xFF。
可是,实际的执行结果 却未变,仍然是0xC7 !

请问,这是 为什么 ?

谢谢!

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

附图


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
oufuqiang 发表于 2020-2-2 23:41 | 显示全部楼层
你记错运算符了,或是|,异或是^

评论

是FF  发表于 2020-2-3 11:16
 楼主| 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没有

附图一


附图二


附图三


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
幸福至上 发表于 2020-2-5 12:27 | 显示全部楼层
可以先把P4的值先读到一个u8变量,异或运算完再写回P4,看是读取、运算、输出的哪个环节出的问题。
airwill 发表于 2020-2-19 22:16 | 显示全部楼层
P4端口的原值为0xC7,执行 P4=P4^0x38 代码后,应该是:0xFF。

计算没有错,  问题在于 P4=P4^0x38 这个操作是个 读修改写的指令,  这样的指令读的不是端口, 而是内部寄存器, 和端口状态可能并不一致.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

273

主题

1345

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部