Desplazador a la izquierda Operador bit a bit de PIC

2

Estoy siguiendo un tutorial sobre la programación de PIC serie 12F en ensamblador.

Tengo una pregunta relacionada con los operadores bitwise específicamente el < < operador de cambio a la izquierda.

Vamos a usar un ejemplo, el PIC que estoy usando es un 12F509, así que si quisiera establecer GP1 y GP0 como salidas y el resto de pines de E / S como entradas, normalmente lo haría así.

movlw    b'111100' ; Set GP1 and GP0 as outputs
tris     GPIO    

Si quisiera usar un operador bit a bit para lograr lo mismo, creo que podría usar < < desplazamiento a la izquierda como este.

movlw    0<<1 ; Shift 0 left once to set GP1 and GP0 as outputs
tris     GPIO

Después de esta operación, lo tomo, los últimos 2 bits serían 00. Desde < < el desplazamiento a la izquierda desplaza todos los bits a la izquierda, descarta el bit de la izquierda y establece el bit a la derecha a 0.

Este es mi entendimiento de cómo funciona el operador de cambio de bit a la izquierda. Esperemos que sea correcto.

Ahora en el tutorial se introdujo este bit de código, había una explicación de lo que hace, pero no cómo lo hace.

movlw    ~(1<<1) ; set GP1 as an output
tris     GPIO

Voy a probar lo que hace este código. Avísame si lo entendí bien. Primero se desplaza un 1 binario a la izquierda una vez a la posición GP1, lo que deja un 0 en la posición GP0.

Entonces, cuando se complete la operación entre paréntesis, el valor se vería así 000010.

¿Entonces ~ está invirtiendo el 1 en la posición GP1 a 0 y el 0 en todas las otras posiciones a 1? ¿Dejando el valor establecido en 111101 (GP1 como salida)?

Gracias de antemano.

    
pregunta Krankshaft

1 respuesta

3

El operando de la instrucción PIC se evalúa a una constante en el tiempo de ensamblaje; el código emitido contendrá una constante en esa posición. Por ejemplo:

  

movlw ~ (1 < < 1); establecer GP1 como una salida

1 < < 1 se evalúa como b'00000010 '(b'00000001' desplazado a la izquierda por 1 - se entiende que un 0 está desplazado)

Se aplica el complemento (todos los 8 bits se voltean), por lo que obtienes

b'11111101 '

y el código emitido es

movlw b'11111101 '

Es lo mismo que escribir directamente lo anterior, excepto que puede resultarle más legible escribirlo de la manera que se muestra.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas