3

我花了很长时间使用完整的 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。

编译/组装:

avr-gcc ledon.S -mmcu=atmega168

4

2 回答 2

6

更新事实证明,在使用 avr-libc 时,您应该像这样编写汇编代码

#include <avr/io.h>
sbi  _SFR_IO_ADDR(PORTB), 0

[删除调试提示没有实际解决方案]

于 2010-04-10T10:32:06.647 回答
2

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

于 2010-04-10T10:17:45.467 回答