登录注册
论坛
一粒金砂(中级)
97
0
如下图,C8051F580在keil4中仿真。 P4端口的原值为0xC7,执行 P4=P4^0x38 代码后,应该是:0xFF。 可是,实际的执行结果 却未变,仍然是0xC7 !
请问,这是 为什么 ?
谢谢!
备注: 0xC7 -> 1100 0111 0x38 -> 0011 1000 0xFF -> 1111 1111
附图
无标题.png (123.67 KB, 下载次数: 0) 下载附件 保存到相册 2020-2-2 22:28 上传
无标题.png (123.67 KB, 下载次数: 0)
下载附件 保存到相册
2020-2-2 22:28 上传
扫一扫,分享给好友
版主
6041
193
P4实际上是两个寄存器,一个是输入,一个是输出,你读出来的未必是你写入的,所以没按预期工作,也是正常的。
上面仅是我的理解,因为51我也没用过。
五彩晶圆(中级)
2947
4
你的这个表达式没有看明白。标准定义 sfr P4 = 0x90; /* SFR for P4 */
sbit P4_0 = P4^0;
你的这种定义可以是语法错误P4=P4^0x38;
4008
这么写应该是可以的,那个汇编窗口能再往上拉点就能看到汇编码了,你再贴一个汇编码
huo_hu 发表于 2020-2-4 03:03 这么写应该是可以的,那个汇编窗口能再往上拉点就能看到汇编码了,你再贴一个汇编码
谢谢版主!
P4=P4^0x38; 对应的汇编代码如下图所示
版主凌晨3:.03回的帖子呀,辛苦了!
P4=P4^0x38; 此行代码已执行,可是,P4的值还是0xC7,没有变化
无标题.png (133.76 KB, 下载次数: 0) 下载附件 保存到相册 2020-2-4 11:08 上传
无标题.png (133.76 KB, 下载次数: 0)
2020-2-4 11:08 上传
五彩晶圆(高级)
7755
18
引入一个零食变量,直接赋值。
char pt = P4;
char pt2 = pt ^ 0x38;
P4 = pt2; // P4 = 0xff;
中间看变量变化。如果还是这样,考虑编译器的问题。
默认摸鱼,再摸鱼。2022、9、28
搞定了,可是原因还是不清楚,见附一
把XBR2初始化这行代码 打开就可以了,见附二
可是XBR2和P4毫无关系呀,好奇葩,见附图三 P0-P3都有对应的XBR,唯独P4没有
附图一
无标题2.png (114.4 KB, 下载次数: 0) 下载附件 保存到相册 2020-2-4 13:05 上传 附图二
无标题2.png (114.4 KB, 下载次数: 0)
2020-2-4 13:05 上传
无标题1.png (53.51 KB, 下载次数: 0) 下载附件 保存到相册 2020-2-4 13:05 上传 附图三 无标题3.png (95.46 KB, 下载次数: 0) 下载附件 保存到相册 2020-2-4 13:05 上传
无标题1.png (53.51 KB, 下载次数: 0)
无标题3.png (95.46 KB, 下载次数: 0)
yhyworld 发表于 2020-2-4 11:08 huo_hu 发表于 2020-2-4 03:03 这么写应该是可以的,那个汇编窗口能再往上拉点就能看到汇编码了,你再贴 ...
这几天睡觉睡得黑白颠倒了,哈哈
发表回复 回帖后跳转到最后一页
EEWorld Datasheet 技术支持
查看 »