Autor Tema: variable que se incrementa en btsfc  (Leído 1935 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado taner

  • PIC10
  • *
  • Mensajes: 3
variable que se incrementa en btsfc
« 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


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: variable que se incrementa en btsfc
« Respuesta #1 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í en el tutorial Asm desde 0 de Leon Pic explica el uso de las instrucciones que te indico.
« Última modificación: 27 de Abril de 2009, 16:20:59 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: variable que se incrementa en btsfc
« Respuesta #2 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
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: variable que se incrementa en btsfc
« Respuesta #3 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...
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado taner

  • PIC10
  • *
  • Mensajes: 3
Re: variable que se incrementa en btsfc
« Respuesta #4 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

Desconectado taner

  • PIC10
  • *
  • Mensajes: 3
Re: variable que se incrementa en btsfc
« Respuesta #5 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