打印

C51中对ACC直接操作被编译优化掉

[复制链接]
3848|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
can88can88|  楼主 | 2008-5-8 12:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在实现带奇校验的串口通许时,TB8的设置需要软件参与,而我以下的写法发现,ACC=0x55;直接被编译器优化掉了。
#include <reg52.h>

main()
{
  ACC=0x55;    //待发送0x55,放入ACC以得到奇偶位P
  TB8=PSW^0;
  SBUF=ACC;
  while(TI==0);
  TI=0;
 }

后来把TB8=PSW^0改为TB8=P,就不会被优化掉。我想问一下,P与PSW^0在编译器的角度来看是不一样的吗?

相关帖子

沙发
HWM| | 2008-5-8 12:25 | 只看该作者

本来就不是一个东西。

使用特权

评论回复
板凳
can88can88|  楼主 | 2008-5-8 12:29 | 只看该作者

更正

谢谢PWM,我笔误了,我想问
P与PSW^0在编译器的角度来看是不一样的吗

使用特权

评论回复
地板
HWM| | 2008-5-8 12:35 | 只看该作者

一样,编译帮你算好了,你应感谢它才对。

使用特权

评论回复
5
can88can88|  楼主 | 2008-5-8 12:38 | 只看该作者

可是用psw^0,直接就优化掉了。这样不确定P是我想要的。

使用特权

评论回复
6
lenglx| | 2008-5-8 12:41 | 只看该作者

呵呵

P <=> PSW.0

PSW^0 这里不是PSW.0的意思, 是PSW 异或 0.

sbit P = PSW^0; 是C51的扩展语法,不是C标准语法.也只有这样写才是PSW.0的意思, 你不能在程序中直接写成PSW^0.

使用特权

评论回复
7
HWM| | 2008-5-8 12:44 | 只看该作者

最终结果对吗?TB8是否为0,SBUF是否是0x55?

若对就没啥问题。

使用特权

评论回复
8
computer00| | 2008-5-8 13:05 | 只看该作者

6楼正解。直接在程序里使用^表示异或。只有sbit时才表示什

使用特权

评论回复
9
can88can88|  楼主 | 2008-5-8 13:21 | 只看该作者

谢谢lenglx,HWM等。

TO HWM:不在乎结果,想弄明白PSW^0,P 与 PSW.0关系。
TO lenglx:你解释得太好了,谢!

使用特权

评论回复
10
ayb_ice| | 2008-5-8 16:11 | 只看该作者

TB8=PSW^0;根本就不是指PSW的0位

使用特权

评论回复
11
yiuyang| | 2008-5-8 21:58 | 只看该作者

编译器

请教各位:我在89C51系统中用的编译器各为VD5026-4;VD5027-4。工作一直不稳定而且货源不足,请各位能给以引荐。首先谢谢了。

使用特权

评论回复
12
hotpower| | 2008-5-8 22:07 | 只看该作者

哈哈~~~ACC别在main()里玩,要私养在函数的金屋里~~~

使用特权

评论回复
13
程序猿| | 2014-3-17 15:04 | 只看该作者
谢谢楼主分享!

使用特权

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

本版积分规则

2

主题

7

帖子

0

粉丝