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 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料