[PIC®/AVR®/dsPIC®产品]

PIC16F877A的C语言代码逻辑与问题,换了位置就执行效果不同

[复制链接]
864|6
手机看帖
扫描二维码
随时随地手机跟帖
飞翔浚流|  楼主 | 2020-7-12 08:42 | 显示全部楼层 |阅读模式
单片机是PIC16F877A 用Proteus仿真 发现代码有这个问题
  if((output_var!=0x00)&&(output_var!=0x80))
  {

       RB1=~RB1;
  }
和  if((output_var!=0x80)&&(output_var!=0x00))
  {

       RB1=~RB1;
  }
两个代码有什么区别?第二种会执行RB1,编译器是MPLAB+PICC 谢谢!
难道是编译器优化了?

使用特权

评论回复
淘猫汤姆| | 2020-7-12 11:37 | 显示全部楼层
本帖最后由 淘猫汤姆 于 2020-7-12 11:38 编辑

这两段代码逻辑是应该是一样的,除了运算顺序略有区别。
另外,编译器你应该给出版本和优化设置,其他也无法排出“破丢死”的问题,你也可以在MPLAB内sim一下看看。如果怀疑优化的问题,你最好贴出反汇编,菜单view,disassembly

使用特权

评论回复
dog_xin| | 2020-7-12 18:12 | 显示全部楼层
一模一样的,可能软件有问题

使用特权

评论回复
zeshoufx| | 2020-7-13 08:39 | 显示全部楼层
应该不至于吧

使用特权

评论回复
lcczg| | 2020-7-13 15:07 | 显示全部楼层
不会的。Proteus的问题吧

使用特权

评论回复
CoolSilicon| | 2020-7-13 16:20 | 显示全部楼层
看起来没差别啊..
可以试试在X IDE用simulator软仿的方式来试试..

使用特权

评论回复
飞翔浚流|  楼主 | 2020-12-14 15:50 | 显示全部楼层
淘猫汤姆 发表于 2020-7-12 11:37
这两段代码逻辑是应该是一样的,除了运算顺序略有区别。
另外,编译器你应该给出版本和优化设置,其他也无 ...

谢谢

使用特权

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

本版积分规则

6

主题

28

帖子

0

粉丝