我花了很多时间用完整的 GCC 工具链设置我的 AVR 开发系统(一切都是最新的当前稳定版本),我已经解决了大多数问题,但只有一个。

下面的代码给了我一个我没有得到的错误。 AVR 汇编手册指出 sbi 指令可以接受 0-7 作为常量表达式,但它仍然在我身上出错。任何人都可以阐明为什么这样做吗?

  #ifndef __AVR_ATmega168__
      #define __AVR_ATmega168__
  #endif

  #include <avr/io.h>

      rjmp Init

  Init:

      ser r16
      out DDRB, r16
      out DDRD, r16

      clr r16

      out PORTB, r16
      out PORTD, r16

  Start:

      sbi PORTB, 0
      rjmp Start

有问题的行是 sbi PORTB, 0。

编译/组装:

最佳答案

我认为它在提示 PORTB 而不是位数 (0)。你是如何定义 PORTB 的?它需要在 0..31 范围内。如果您的端口定义在 32..63 范围内,您可能需要从 PORTB 中减去 32 ?

关于assembly - AVR sbi 命令 - 错误 : number must be positive and less than 32,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2612843/

10-10 17:36