Estoy escribiendo 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 usa para qué, de modo que, si es necesario, pueda cambiar fácilmente todos los pines de E/S por cambiando los valores constantes y recompilando.
Como esto:
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 usando. 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 poder de operador, podría hacer algo como esto:
movlw (2 ^ O_RED) | (2 ^ O_GREEN) | (2 ^ O_BLUE)
pero ^
en MPASM es un OR exclusivo Bitwise, no a la potencia de .
¿Alguien puede pensar en otra forma de hacer esto?
No he usado MPASM antes, pero ¿funciona esto?
movlw (1 << O_RED) | (1 << O_GREEN) | (1 << O_BLUE)
Desplazamiento a la izquierda duplica un número.
1 << x
== 2x
BG100