qq_34007813 2018-04-02 15:11 采纳率: 66.7%
浏览 747
已采纳

这是什么问题,是编译器的小缺陷吗?

本人最近在用STC12C5A60S2做一个AD电压检测,编写了如下程序

void ADC_SEL(unsigned char shift,unsigned char num)
{
//unsigned char c = 0x1;
P1ASF = num << shift;
}
我想用对num(num = 1)的移位来打开P1口AD允许,但是经过移位后发现P1ASF = 0,于是我截取了如下汇编代码:
反汇编:
C:0x054F ED MOV A,R5
C:0x0550 A807 MOV R0,0x07
C:0x0552 08 INC R0
C:0x0553 8002 SJMP C:0557
C:0x0555 C3 CLR C
C:0x0556 33 RLC A
C:0x0557 D8FC DJNZ R0,C:0555
C:0x0559 F59D MOV P1ASF(0x9D),A
按C语言调用规则,第一个参数是放在R7寄存器里的,也就是说R7里的数是左移位数,但我并没有在代码里看到对R7的处理。而是编译器自作主张将ACC移了8位,那肯定最后就等于零了呀。这是不是编译器的一个小缺陷?编译器我用的Keil4请问各位高手怎么解决?

  • 写回答

4条回答 默认 最新

  • qq_34007813 2018-04-12 07:39
    关注

    经过实验,直接对PIASF赋值0xff即可。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 绿盟安全扫描--检测到目标站点存在javascript框架库漏洞
  • ¥30 Android STD快速启动
  • ¥15 如何使用simulink建立一个永磁同步直线电机模型?
  • ¥30 天体光谱图的的绘制并得到星表
  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包