This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Problema ejemplo fibonacci
#1
Pues la cuestion es que estoy siguiendo unos ejemplos y si bien esta no es la solución tal cual la pone el libro si que es valida, pero como lo tengo aqui puesto no funciona, en la linea 24 he comentado lo que tengo que ponerle pàra que funcione correctamente,explico el fallo:

Por ejemplo para cuando suma=1,Anterior=0 y Actual=0, al realizar el addwf Actual,w deberia dar W=1 pero me da W=2 es como si el movf Anterior,W al ser 0 no le hiciera caso y no pusiera W a 0.

Desde ya gracias por pegar un ojo

Código:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC        ;Configuración para el grabador
        LIST    P=16F84A        ;Procesador
        INCLUDE <P16F84A.INC>         ;Definicion de los operandos utilizados
        CBLOCK    0X0C
        Suma
        Actual
        Anterior
        ENDC
        
        ORG    0
Inicio        bsf    STATUS,RP0
        clrf    PORTB
        bcf    STATUS,RP0
Principal        
        clrf    Suma            ;Empecemos desde el 0
        clrf    Anterior        ;Empecemos desde el 0
        clrf    Actual            ;Empecemos desde el 0
        incf    Suma,F            ;Sumamos uno
        
Fibo        movf    Actual,W
          movwf    Anterior        ;Actual lo pasamos al anterior
        movf    Suma,W
        movwf    Actual
        ;clrw    W
        movf    Anterior,W        ;Cargamos el anterior en trabajo
        addwf    Actual,W        ;Sumamos actual+anterior
        btfsc    STATUS,C        ;Si la suma es mayor se produce acarreo en C y C=1
        goto    Fin        
        movwf    Suma
        goto    Fibo                
Fin        movf    Actual,W
        movwf    PORTB
        Sleep
        END
  Responder
#2
Has probvado a simularlo con el MPLABX, para poder ver en que linea del codigo te hace extraños?
  Responder
#3
Vale, solucionado, no tengo ni idea lo que estava pasando ahora me funciona bien creo que seria que al modificar el codigo no compilaba y volvia a simular el anterior.

Gracias
  Responder
#4
Si usas el MPLABX, ten en cuenta que si tienes otros proyectos, te compila y simula el que tienes marcado como principal
  Responder
#5
Estoy usando el MPLAB IDE v7.20 por ser el que viene en los ejemplos más que nada,tengo el X tambien instalado pero antes de meterme con el me gustaria terminar el libro este "Microcontrolador PIC 16F84 Desarrollo de proyectos" que parece estar muy bien.
  Responder
#6
Si, conozco ese libro y esta muy bien
  Responder
#7
Otro problemilla.., es un contador que cuenta del 0 al 9 y lo muestra poor un display de 7 segmentos, con el simulador parece funcionar bien, pero luego solo me cuenta hasta el 8 y vuelve al 0, si la linea 34 la pongo en la 41 todo funciona correcto, pero no entiendo el porque, en principio veo que deberia funcionar bien como lo tengo puesto.

Código:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC        ;Configuración para el grabador
        LIST    P=16F84A        ;Procesador
        INCLUDE <P16F84A.INC>         ;Definicion de los operandos utilizados
        CBLOCK    0x0C
        Contador
        Tiempo
        Tiempo2
        ENDC

        ORG    0
Incio        bsf    STATUS,RP0
        clrf    PORTB
        clrf    Contador
        bcf    STATUS,RP0
        movlw    b'11111111'
        movwf    Tiempo
        movlw    b'11111111'
        movwf    Tiempo2
Principal
        movf    Contador,W
        sublw    d'9'
        btfss    STATUS,C
        clrf    Contador        ;Seteo a 0 la cuenta
        movf    Contador,W
        Call    Cosa
        movwf    PORTB
        Call    Lapso
        Call    Lapso
        Call    Lapso
        Call    Lapso
        Call    Lapso
        Call    Lapso
        Call    Lapso
        clrf    PORTB
        movlw    b'11111111'
        movwf    Tiempo

        movlw    b'11111111'
        movwf    Tiempo2
        incf    Contador,F        ;Incremento en 1 contador

        goto    Principal
Cosa        addwf    PCL,F
Tabla        retlw    3Fh
        retlw    06h
        retlw    5Bh
        retlw    4Fh
        retlw    66h
        retlw    6Dh
        retlw    7Dh
        retlw    07h
        retlw    7Fh
        retlw    67h
Lapso
        decfsz    Tiempo,F
        goto    Lapso
        decfsz    Tiempo2,F
        goto    Lapso
        return
        END
  Responder
#8
No me he leido el codigo porque ando algo cansado, pero estas cosas suelen pasar porque justo en el momento que llega a 9, el contador se reinicia, no mostrando el 9 debido a la velocidad de ejecucion, por ello se reinicial cuando llega a 10, para que se pueda mostrar el 9.
  Responder
#9
Pues hoy lo he vuelto a conectar y lo he dejado un poco mas de tiempo y me hace unos estraños que si puede ser lo que dices,igual me cuenta hasta el 8 que hasta el 9,luego si puedo subo un video.

P.D he duplicado el retardo y nada

PD2:No he podido averiguar que pasa con ese codigo,el caso es que si en vez de poner 9 le pongo 10 11 o 15 siempre cuenta solo hasta el 8, he mejorado un poco el codigo para que funcione correctamente, pero la pena es que no he sabido resolver el anterior :nuse: , este es el codigo correcto y un video.

Código:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC        ;Configuración para el grabador
        LIST    P=16F84A    ;Procesador
        INCLUDE <P16F84A.INC> ;Definicion de los operandos utilizados
        
        CBLOCK    0x0C
        Contador
        Tiempo
        Tiempo2
        ENDC

        ORG    0
Incio        bsf    STATUS,RP0
        clrf    PORTB
        clrf    Contador
        bcf    STATUS,RP0
        movlw    b'11111111'
        movwf    Tiempo
        movlw    b'11111111'
        movwf    Tiempo2
Principal    
        movf    Contador,W
        sublw    d'9'
        btfss    STATUS,C
        clrf    Contador        ;Seteo a 0 la cuenta
        movf    Contador,W
        Call    Cosa
        movwf    PORTB
        goto    Lapso    
Retardo    
        movlw    b'11111111'
        movwf    Tiempo    
        movlw    b'11111111'
        movwf    Tiempo2
        incf    Contador,1        ;Incremento en 1 contador
        nop
        goto    Principal
Cosa        addwf    PCL,F
Tabla        retlw    3Fh
        retlw    06h
        retlw    5Bh
        retlw    4Fh
        retlw    66h
        retlw    6Dh
        retlw    7Dh
        retlw    07h
        retlw    7Fh
        retlw    67h
Lapso    
        decfsz    Tiempo,F
        goto    Lapso2    
        goto    Retardo
Lapso2        
        nop
        nop
        decfsz    Tiempo2,F
        goto    Lapso2
        goto    Lapso
        END
  Responder