1 votos

Conversión de posición de bits a máscara de bits mediante directivas MPASM

Estoy escribiendo un firmware para un PIC16F877A en ensamblador, y quiero establecer algunas constantes en la parte superior de mi código fuente para indicar qué puerto se utiliza para qué, de modo que si es necesario puedo cambiar fácilmente todos los pines de E/S cambiando los valores constantes y recompilando.

Así:

O_LEDS   EQU      PORTA
CONSTANT O_RED    = RA1
CONSTANT O_GREEN  = RA2
CONSTANT O_BLUE   = RA3

En mi código, necesito una máscara de bits para representar los puertos que estoy utilizando. Mi pregunta es, ¿cómo puedo escribir una expresión usando directivas de ensamblador para calcular la máscara de bits?

Usando mi ejemplo anterior:

O_RED = 1
O_GREEN = 2
O_BLUE = 3

y la máscara de bits que quiero es

movlw b'00001110'

Si hubiera un al poder de operador, podría hacer algo así:

movlw (2 ^ O_RED) | (2 ^ O_GREEN) | (2 ^ O_BLUE)

pero ^ en MPASM es un OR exclusivo a nivel de bits, no al poder de .

¿Se le ocurre a alguien otra forma de hacerlo?

6voto

letronje Puntos 128

No he utilizado MPASM antes, pero ¿funciona esto?

movlw (1 << O_RED) | (1 << O_GREEN) | (1 << O_BLUE)

El desplazamiento hacia la izquierda duplica un número.

1 << x == 2 x

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X