qq_34007813
qq_34007813
2018-04-02 15:11

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

5
  • c
  • 汇编语言
  • 嵌入式

本人最近在用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条回答

为你推荐