Ich schreibe Firmware für einen PIC16F877A in Assembler und möchte einige Konstanten am Anfang meines Quellcodes setzen, um anzugeben, welcher Port wofür verwendet wird, damit ich bei Bedarf problemlos alle E / A-Pins ändern kann Ändern der konstanten Werte und Neukompilieren.
So was:
O_LEDS EQU PORTA
CONSTANT O_RED = RA1
CONSTANT O_GREEN = RA2
CONSTANT O_BLUE = RA3
In meinem Code benötige ich eine Bitmaske, um die von mir verwendeten Ports darzustellen. Meine Frage ist, wie kann ich einen Ausdruck mit Assembler-Direktiven schreiben, um die Bitmaske zu berechnen?
Anhand meines obigen Beispiels:
O_RED = 1
O_GREEN = 2
O_BLUE = 3
und die Bitmaske, die ich will, ist:
movlw b'00001110'
Wenn es einen zur Macht des Operators gäbe, könnte ich so etwas tun:
movlw (2 ^ O_RED) | (2 ^ O_GREEN) | (2 ^ O_BLUE)
aber ^
in MPASM ist ein bitweises exklusives ODER, nicht hoch .
Kann sich jemand einen anderen Weg vorstellen, dies zu tun?
Ich habe MPASM noch nie benutzt, aber funktioniert das?
movlw (1 << O_RED) | (1 << O_GREEN) | (1 << O_BLUE)
Eine Verschiebung nach links verdoppelt eine Zahl.
1 << x
== 2x
BG100