TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: taner en 27 de Abril de 2009, 15:20:50

Título: variable que se incrementa en btsfc
Publicado 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

Título: Re: variable que se incrementa en btsfc
Publicado por: Suky en 27 de Abril de 2009, 15:36:26
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.
Título: Re: variable que se incrementa en btsfc
Publicado por: BrunoF en 27 de Abril de 2009, 15:37:42
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
Título: Re: variable que se incrementa en btsfc
Publicado por: BrunoF en 27 de Abril de 2009, 15:39:32
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...
Título: Re: variable que se incrementa en btsfc
Publicado por: taner en 27 de Abril de 2009, 17:06:03
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
Título: Re: variable que se incrementa en btsfc
Publicado por: taner en 27 de Abril de 2009, 19:36:42
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