TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: kurdo22 en 14 de Octubre de 2004, 08:48:00
-
Muy buenas. Estoy intentando recorrer el byte de una variable, es decir, leer bit a bit los 8 bits de una variable cualquiera. ¿Alquien sabe como se puede hacer esto de una forma sencilla?
Un saludo
-
Se me olvidaba que decir que estoy programando en ensamblador.
Un saludo
-
Simple:
BTFSS Registro,Numero de bit
GOTO es0
GOTO es1
Y si lo quieres alreves:
BTFSC Registro,Numero de bit
GOTO es1
GOTO es0
Las instrucciones son BTFSS (Bit Test, Skip if Set) y BTFSC (Bit Test, Skip if Clear), y saltan la siguiente instruccion, dependiendo de si el bit esta seteado o no, respectivamente.
salu2
PD: Me acabo de acordar, que tu usas un 18F8720, creo que estos tienen instrucciones booleanas mas concretas, mira en el datasheet, porque son una delicia para manejar bits. No obstante lo que te he dicho creo que sirve.
-
TIENES 2 FORMAS DE HACERLO!!!!...... UNA ES ASI COMO TE SEÑALO EL AMIGO Q SERIA:
BTFSS REGISTRO,0
GOTO ES_CERO
GOTO ES_UNO
...
...
...
BTFSS REGISTRO,7
GOTO ES_CERO
GOTO ES_UNO
CLARO ESA ES LA MANERA MAS ARCAICA LO MEJOR ES ROTAR EL REGISTRO A TRAVES DEL CARRY Y BRICAR SEGUN CARRY ME EXPLICO:
BCF STATUS,C
RRF REGISTRO
CALL PRUEBA
RRF REGISTRO
CALL PRUEBA
.....
.....
.....
ESTO 8 VECES RECORRE EL REGISTRO EN TODAS SUS POSICIONES
PRUEBA BTFSS STATUS,C
GOTO ES_CERO
GOTO ES_UNO
ES_CERO HAGO SI ES CERO
RETURN
ES_UNO HAGO SI ES UNO
RETURN
-
Hola chicos
Otra forma de comprobar el estado de un bit o de varios bits dentro de un byte, es hacer una máscara y una operación XOR. Así:
Imaginad que queremos comprobar el estado del tercer bit de más peso del puerto B. Hacemos una máscara: 00100000
movlw 0x20 ;Comprobamos el tercer bit
xorwf PORTB,W ;si está a uno todos, saltamos a SALIDA
btfsc STATUS,Z
goto SALIDA
Así podrías ir recorriendo todo el byte. Pero este mecanismo de la máscara es muy efectivo, sobretodo, para en casos que quieras comprobar muchos bits de golpe, no una por uno. Así por ejemplo, para comprobar los primeros 4 bits haríamos esto:
movlw 0xF0 ;Comprobamos los 4 bits más altos
xorwf PORTB,W ;si están a uno todos, saltamos a SALIDA
btfsc STATUS,Z
goto SALIDA
Espero que te sirva.