Autor Tema: Manejo de tablas con píc16f84A  (Leído 146 veces)

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

Desconectado tomasguido

  • PIC10
  • *
  • Mensajes: 8
Manejo de tablas con píc16f84A
« en: 10 de Julio de 2018, 17:13:33 »
Consulta. El programa hace que un display de 7 segmentos, valla contando de manera ascendente, cada un segundo, y al llegar al numero 9 se pone a dormir, la idea de este programa es amigarme con el uso de las tablas, el problema esta que comienza a contar a partir de 1 y no de cero, si alguien sabe a que se debe esto les agradecería la ayuda. Saludos...

Aquí el programa:
;-----------------------------------------------------------------------------------
   
#include "p16f84a.inc"

 __CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _CP_OFF

varA   EQU 0x0c
varB   EQU 0x0d
varC   EQU 0x0e
varD   EQU 0x0f
cont1   EQU 0x10
cont2   EQU 0x11   
   
    ORG 0                 ; inicio del programa
   
    CLRF     PORTB        ; limpio el puerto b 
    BSF      STATUS, RP0  ; configuro el puerto b como salida
    MOVLW    B'00000000'
    MOVWF    TRISB
    BCF      STATUS, RP0
    clrf     cont1
    clrf     PORTB
    movlw    D'9'
    movwf    cont2
   
cambia:
    incf     cont1,1
    movf     cont1,0
    call     tabla         
    movwf    PORTB
    call     retardo1s
    decfsz   cont2,F
    goto     cambia
    sleep
   
tabla:
    addwf PCL,1
    retlw 0x3f
    retlw 0x06
    retlw 0x5b
    retlw 0x4f
    retlw 0x66
    retlw 0x6d
    retlw 0x7d
    retlw 0x07
    retlw 0x7f
    retlw 0x6f
   
retardo1s:
    MOVLW   D'4'
    MOVWF   varC
bucleext2:
    MOVLW   D'252'
    MOVWF   varB
bucleext:
    MOVLW   D'247'
    MOVWF   varA
bucleint:
    NOP
    DECFSZ  varA,F
    GOTO    bucleint
    DECFSZ  varB,F
    GOTO    bucleext
    DECFSZ  varC,F     
    GOTO    bucleext2
    MOVLW   D'13'     
    MOVWF   varD
regfina:               
    DECFSZ  varD,F
    GOTO    regfina
    NOP
    NOP
    RETURN
   
    END
;-----------------------------------------------------------------------------------------

Desconectado tomasguido

  • PIC10
  • *
  • Mensajes: 8
Re:Manejo de tablas con píc16f84A
« Respuesta #1 en: 10 de Julio de 2018, 17:48:33 »
Me respondo a mi mismo por si a alguien le sirve, el programa quedaría:

   
#include "p16f84a.inc"

 __CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _CP_OFF

varA    EQU 0x0c
varB    EQU 0x0d
varC    EQU 0x0e
varD    EQU 0x0f
cont1   EQU 0x10
cont2   EQU 0x11   
   
    ORG 0                 ; inicio del programa
   
    CLRF     PORTB        ; limpio el puerto b 
    BSF      STATUS, RP0  ; configuro el puerto b como salida
    MOVLW    B'00000000'
    MOVWF    TRISB
    BCF      STATUS, RP0
    clrf     cont1           ;limpio contador de la tabla
    clrf     PORTB           ;limpio puerto B
    movlw    D'9'
    movwf    cont2           ;cargo contador para entrar a dormir
   
cambia:
    movf     cont1,0         ;cargo w con el contador de la tabla
    call     tabla           ;voy a la tabla
    movwf    PORTB           ;muestro en el puerto B
    call     retardo1s       ;espero un segundo
    incf     cont1,1
    decfsz   cont2,F         ;decremento y verifico si es el final del contador para entrar a dormir
    goto     cambia          ;todavia no llego a cero el contador para entrar a dormir
    sleep                    ;duermo
   
tabla:
    addwf PCL,1
    retlw 0x3f
    retlw 0x06
    retlw 0x5b
    retlw 0x4f
    retlw 0x66
    retlw 0x6d
    retlw 0x7d
    retlw 0x07
    retlw 0x7f
    retlw 0x6f
   
retardo1s:
    MOVLW   D'4'
    MOVWF   varC
bucleext2:
    MOVLW   D'252'
    MOVWF   varB
bucleext:
    MOVLW   D'247'
    MOVWF   varA
bucleint:
    NOP
    DECFSZ  varA,F
    GOTO    bucleint
    DECFSZ  varB,F
    GOTO    bucleext
    DECFSZ  varC,F     
    GOTO    bucleext2
    MOVLW   D'13'     
    MOVWF   varD
regfina:               
    DECFSZ  varD,F
    GOTO    regfina
    NOP
    NOP
    RETURN
   
    END