Tengo el siguiente código
Estoy haciendo un contador de dígitos de 0-9 ascendente y descendente, con un PIC16F84A, y todo iba bien hasta que al simular ésta parte del programa (contador descendente), encontré que no funciona adecuadamente.
Tengo el siguiente código en el fragmento:
(le pongo el encabezado para que solo lo copien y peguen en MPLAB y lo puedan revisar)
;Fragmento de programa que realiza un contador descendente del 9 al 0 y saca el código de cada
;número por el puerto B, en código para un Display de 7 segmentos, con el punto
;decimal encendido
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
conde equ 0x20 ; registro para contador ascendente
ORG 0 ; El programa comienza en la dirección 0.
;Configuracion de puertos
bsf STATUS,RP0
clrf TRISB ; Las líneas del Puerto B se configuran como salida.
bcf STATUS,RP0
clrf TRISB
contdes
movlw d'10' ;carga a W un 10
movwf conde ;cargar contenido de W a registro contas
deconde
decf conde,1 ;incrementa contador y guarda el incremento en el mismo registro contas
call tabladec
movwf PORTB
movlw d'0'
subwf conde,0
btfss STATUS,Z ;revise el bit z del registro status y si es 1 saltara la sig inst
goto deconde
tabladec
; Tabla para display de 7 segmentos.
addwf PCL,F
Tabla2
retlw 0x9F ; El código 7 segmentos para el "0".
retlw 0x86 ; El código 7 segmentos para el "1".
retlw 0E ; El código 7 segmentos para el "2".
retlw 0xCF ; El código 7 segmentos para el "3".
retlw 0xE6 ; El código 7 segmentos para el "4".
retlw 0xED ; El código 7 segmentos para el "5".
retlw 0xFD ; El código 7 segmentos para el "6".
retlw 0x87 ; El código 7 segmentos para el "7".
retlw 0xFF ; El código 7 segmentos para el "8".
retlw 0xE7 ; El código 7 segmentos para el "9".
end
El problema es que cuando el registro de contador "conde" tiene 9 y 8, salta a la configuración del número 9y cuando llega al 7, salta a la configuración del 8, y al llegar al 6 salta a la configuración 7 y así sucesivamente.
¿Puede alguién asesorarme?
Pensé que el error estaba en el manejo del PCL y tal vez debería recurrir al PCLATCH, pero no estoy muy segura ya que uso solo 8 bits, que es tamaño del PCL.
Agradezco de antemano.
Estoy haciendo un contador de dígitos de 0-9 ascendente y descendente, con un PIC16F84A, y todo iba bien hasta que al simular ésta parte del programa (contador descendente), encontré que no funciona adecuadamente.
Tengo el siguiente código en el fragmento:
(le pongo el encabezado para que solo lo copien y peguen en MPLAB y lo puedan revisar)
;Fragmento de programa que realiza un contador descendente del 9 al 0 y saca el código de cada
;número por el puerto B, en código para un Display de 7 segmentos, con el punto
;decimal encendido
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
conde equ 0x20 ; registro para contador ascendente
ORG 0 ; El programa comienza en la dirección 0.
;Configuracion de puertos
bsf STATUS,RP0
clrf TRISB ; Las líneas del Puerto B se configuran como salida.
bcf STATUS,RP0
clrf TRISB
contdes
movlw d'10' ;carga a W un 10
movwf conde ;cargar contenido de W a registro contas
deconde
decf conde,1 ;incrementa contador y guarda el incremento en el mismo registro contas
call tabladec
movwf PORTB
movlw d'0'
subwf conde,0
btfss STATUS,Z ;revise el bit z del registro status y si es 1 saltara la sig inst
goto deconde
tabladec
; Tabla para display de 7 segmentos.
addwf PCL,F
Tabla2
retlw 0x9F ; El código 7 segmentos para el "0".
retlw 0x86 ; El código 7 segmentos para el "1".
retlw 0E ; El código 7 segmentos para el "2".
retlw 0xCF ; El código 7 segmentos para el "3".
retlw 0xE6 ; El código 7 segmentos para el "4".
retlw 0xED ; El código 7 segmentos para el "5".
retlw 0xFD ; El código 7 segmentos para el "6".
retlw 0x87 ; El código 7 segmentos para el "7".
retlw 0xFF ; El código 7 segmentos para el "8".
retlw 0xE7 ; El código 7 segmentos para el "9".
end
El problema es que cuando el registro de contador "conde" tiene 9 y 8, salta a la configuración del número 9y cuando llega al 7, salta a la configuración del 8, y al llegar al 6 salta a la configuración 7 y así sucesivamente.
¿Puede alguién asesorarme?
Pensé que el error estaba en el manejo del PCL y tal vez debería recurrir al PCLATCH, pero no estoy muy segura ya que uso solo 8 bits, que es tamaño del PCL.
Agradezco de antemano.