AVR sbi命令 - 错误:数字必须为正且小于32

时间:2010-04-10 09:10:04

标签: assembly avr avr-gcc

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

2 个答案:

答案 0 :(得分:6)

更新事实证明您应该write your assembly code like this when using avr-libc

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

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

答案 1 :(得分:2)

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

范围内,您可能需要从PORTB中减去32