TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: ignation en 19 de Abril de 2014, 08:23:04
-
Buenas a todos,
Estoy intentando igualar el bit 5 de PORTA al bit 5 de PORTB es decir PORTB[5] = PORTA[5] Llevo un rato intentándolo pero no se me ocurre nada.
Gracias
Un saludo!
-
Que tal ignition,
Tienes que usar enmascaramiento de bits, de esta forma compararas el numero de 8 bits generado cuando el bit 5 esta en 0 o en 1 (cero y treintados respectivamente).
Para realizar esto lees el estado completo del puerto A, luego le aplicas una AND con el bit 5 en alto solamente.
esto seria asi:
MOVF PORTA,W
ANDLW B'00100000'
MOVWF VAR_BIT5
Y luego haces lo mismo con el puerto B
MOVF PORTB,W
ANDLW B'00100000'
Esto como ya lo explique provocara que sucedan dos casos el puerto A y B pueden valer 0 o 32. Entonces despues de esto puedes aplicar una EXOR y cuando dos numeros son igules el resultado es cero y eso hace que se levante la bander de ZERO en el registro STATUS.
Esto seria asi,
XORWF VAR_BIT5,W ;Compara el valor del bit 5 del puerto A con el valor del bit 5 del puerto B
BTFSS STATUS,Z ;si son iguales salta a continua tu codigo
GOTO xxxxx ;Si no, entonces salta a xxxxx
Continua tu codigo
Espero que esto te sirva.
Saludos,
Elreypic.
-
Que tal ignition,
Tienes que usar enmascaramiento de bits, de esta forma compararas el numero de 8 bits generado cuando el bit 5 esta en 0 o en 1 (cero y treintados respectivamente).
Para realizar esto lees el estado completo del puerto A, luego le aplicas una AND con el bit 5 en alto solamente.
esto seria asi:
MOVF PORTA,W
ANDLW B'00100000'
MOVWF VAR_BIT5
Y luego haces lo mismo con el puerto B
MOVF PORTB,W
ANDLW B'00100000'
Esto como ya lo explique provocara que sucedan dos casos el puerto A y B pueden valer 0 o 32. Entonces despues de esto puedes aplicar una EXOR y cuando dos numeros son igules el resultado es cero y eso hace que se levante la bander de ZERO en el registro STATUS.
Esto seria asi,
XORWF VAR_BIT5,W ;Compara el valor del bit 5 del puerto A con el valor del bit 5 del puerto B
BTFSS STATUS,Z ;si son iguales salta a continua tu codigo
GOTO xxxxx ;Si no, entonces salta a xxxxx
Continua tu codigo
Espero que esto te sirva.
Saludos,
Elreypic.
Gracias compañero! Pero creo que no es lo que pregunto, ya que no quiero una comprobación si no una asignación. Lo que necesito hacer es que el bit 5 del PORTB sea igual que el bit 5 del PORTA. Necesito que cuando se encienda un LED (Bit 5 de PORTA) se encienda otro led situado en el Bit 5 de PORTB y lo mismo a la hora de apagarse. En PORTB tengo un teclado numérico y en PORTA un display así que solo me interesa el bit 5. Lo ideal sería no usar una variable auxiliar como la VAR_BIT5 que propones.
Gracias
Un saludo!
-
Usando instrucciones orientadas a byte:
MOVF PORTB,W
XORWF PORTA,W
ANDLW 0x20
XORWF PORTB,F
Usando instrucciones orientadas a bit:
BTFSS PORTA,5
BCF PORTB,5
BTFSC PORTA,5
BSF PORTB,5
Saludos