[C语言]

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

[复制链接]
1345|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

附图
无标题.png

使用特权

评论回复

相关帖子

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没有

附图一
无标题2.png

附图二
无标题1.png

附图三
无标题3.png

使用特权

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

使用特权

评论回复
airwill| | 2020-2-19 22:16 | 显示全部楼层
P4端口的原值为0xC7,执行 P4=P4^0x38 代码后,应该是:0xFF。

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

使用特权

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

本版积分规则

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

272

主题

1344

帖子

10

粉丝