TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: taner en 27 de Abril de 2009, 15:20:50
-
tengo un codigo en el que comprueba bit a bit un registro con btfsc
per me interesaria que con un bucle se invrementara cada vez, para no tener que hacer una linea para cada bit
ejemplo
bstfc bit1,(variable)
..... codigo
y luego incrementar (variable)
y hacer un goto para volver
yo le asigno una direccion como esto: variable equ 06c
pero no me funciona
soy bastante nuevo en esto asi que me gustaria que me orientaran un poco
-
No entiendo bien lo que quieres hacer, pero si es testear cada uno de los bits de un byte utiliza la instrucción rrf (Rotar byte a la derecha) o rlf (Rotar byte a la izquierda).
Aquí (http://www.todopic.com.ar/foros/index.php?topic=23623.msg196189#msg196189) en el tutorial Asm desde 0 de Leon Pic explica el uso de las instrucciones que te indico.
-
Para comprobar bit a bit podrías usar rotaciones que es lo que normalmente se usa. Los uC no permiten variables como parámetros en los argumentos de las instrucciones.
el ejemplo que pusiste está mal.
el primer argumento de la btfsc es una posición de memoria RAM entre 0x00 y 0x7F. No es un bit. El segundo valor es un numero entre 0 y 7.
checkbits
;contar q se rotara 8 veces
movlw .8
movwf conta
otrobit:
btfsc registro,0
goto biten1 ;o lo que quieras que haga...
rrf registro,f
defsz conta,f
goto otrobit
return
-
Y cuidado! las rotaciones afectan el valor del registro en cuestión. Tal vez te convenga copiar en otro registro el registro a comprobar. Sino deberás asegurarte de que rotarás la cantidad correcta de veces y que no ensuciarás el bit STATUS,C en medio del proceso...
-
ahora entiendo, lees el mismo bit, loq eu haces es rotar los bits del registro para que puedas leerlos uno a uno
lo pruebo y os digo algo
Aunque creo que ya esta
Gracias por la contestacion
-
era eso
gracias
asi se me ha quedado el codigo
clrf bit2
movfw bit1
movwf bit2
clrf posicion
buclefinal btfsc posicion, 3 ;primero comprueba el contador, si el bit 3 esta a uno ya esta (8 en decimal)
return
btfsc bit2,0
goto biten1
incf posicion, 1
bcf portb,2
call retardo
nop
call retardo
rrf bit2,1
goto buclefinal
;****************************parte si el bit era uno
biten1 incf posicion, 1
bsf portb,2
call retardo
bcf portb,2
call retardo
rrf bit2,1
call retardo
goto buclefinal
es una rutina que enviara los datos grabados en ese bit
Al ordenador por puerto paralelo
la subrutina retardo sera la que detectara el envio
intente hacer el bucle con decfsz con decfsz posicion, 1 pero se me complicaba un poco la idea
Aun asi muchas gracias
este es el proyecto
www.tanerbilly.blogspot.com