El número debe ser positivo y menor de 64

2

Estoy trabajando con un ATMEGA328P, haciendo un poco de código USART.

Utilicé asm vinculado con C, con no menos de 7 errores de construcción.

Todos aquellos fueron iguales "El número debe ser positivo y menor de 64".

Sí, he definido __SFR_OFFSET en 0 y _SFR_ASM_COMPAT en 1. No tengo problemas al acceder a los puertos, pero cuando intento esta línea

#define __SFR_OFFSET        0
#define _SFR_ASM_COMPAT     1

#include <avr/io.h>

#define PORT                PORTD
#define LSB                 0
#define XCK                 4

.macro Blank
CBI PORT, LSB
.endm

.macro Black
SBI PORT, LSB
.endm

.org 0x13

    //*Emulated DMA*
    //R18 <-- [Z], Z++
    //USART <-- R18
    //if Z=0, Z=1024

    ld r18, Z+
    out UDR0, r18
    cp ZH, r1
    cpc ZL, r1
    brne Normal
    ldi ZL, 0x00
    ldi ZH, 0x02

    Normal:

reti
    

1 respuesta

2

Los operandos de algunas funciones de ensamblador son muy restrictivos, por ejemplo. El código de operación relacionado con el registro de origen / destino está limitado por 6 bits, es decir, máx. el valor es 64. Supongo que al menos "out UDR0, r18" no es correcto porque UDR0 está fuera del rango de puertos. Verifique las líneas donde el compilador se queja y vuelva a verificar los posibles operandos en la hoja de datos AVR Registro / Conjunto de instrucciones resumen párrafo. También existe una hoja de datos adicional para el conjunto de instrucciones ATMEGA.

    
respondido por el TMa

Lea otras preguntas en las etiquetas