Atmel Studio assembler: ¿cómo defino un pin de puerto?

4

Digamos que necesito probar un pin de puerto como este:

sbic  PIND,2

Esto debería funcionar, pero en C definitivamente haría un #define INPUT ((PORTD&(1<<2))!=0) . ¿Es posible algo similar en ensamblador? Algo como

.def  INPUT = PIND,2   ; this is not work!

Perdón por la estupida pregunta. Acabo de comenzar a ensamblar después de años de codificación C ...

    
pregunta Roman Matveev

1 respuesta

1

Tienes tres opciones.

1. Usando #defines

AVR Studio pasa el código a través de AVR ASM Preprocessor . Esto hace cosas similares al preprocesador C / C ++, pero funciona en el ensamblaje. Dado que está escribiendo en ensamblador puro, el código no será portátil, por lo que también puede aprovechar las capacidades de AVR Studio (y de hecho cualquier cosa que use AVR libc). Simplemente puedes usar un define como en C:

#define SOMEPIN PINC,2

sbic SOMEPIN;

Incluso podría buscar algo más avanzado para poder utilizar los registros de entrada, salida y dirección. Algo a lo largo de las líneas de:

#define CONCAT(a,b,c) a##b##,##c ; Helper for concatenation
#define SOMEPIN(p) CONCAT(p,C,2) ; Define as xC,2

sbic SOMEPIN(PIN)  ; Expands to 'sbic PINC,2', and then to 'sbic 0x##,2'
sbi  SOMEPIN(DDR)  ; Expands to 'sbi  DDRC,2'

Algunos pueden decir que está abusando del preprocesador, pero si te ayuda a entender mejor el código, que así sea.

2. Sólo el bit

Este es posiblemente más fácil ya que no requiere el preprocesador. En lugar de definir todo el comando, simplemente defina el bit que desea, pero también incluya en qué puerto está interesado en el nombre. Por ejemplo:

.equ SOMEPIN_D = 2;

sbic PIND, SOMEPIN_D;

De esa manera, si conoce el nombre del pin (SOMEPIN_D), puede recordar fácilmente a qué puerto / pin / ddr lo pertenece, ya que forma parte del nombre.

3. Macros

@Ignacio mencionó esto en los comentarios. Puede usar macros para hacer lo que quiera, aunque han pasado varios años desde que escribí algo en ensamblador puro, así que no puedo decir de inmediato cómo.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas