Hola muy buenas, estoy intentando hacer un simple contador descendente, utilizo el PIC16F877 y dos displays de 7 segmentos conectados al PORTB y PORTD.
Tengo una subrutina llamada BIN_7SEG que lo que hace es mediante una tabla devolverme la configuracion de pins de salida para mostrar en el display el valor que hay guardado en W
Si hago eso:
movlw .3
call BIN_7SEG
movwf PORTB
Funciona perfecto y muestra el numero 3 por el display, pero si intento enviarle un valor desde un registro por ejemplo:
movlw .3
movwf TiempoEngrase
movlw Display1
call BIN_7SEG
movwf PORTB
Asi no muestra nada por el display se queda apagado completamente. He cambiado la subrutina que tiene la tabla haciendola con saltos condicionales y me envia que el numero es mas grande que 10
Puede ser que al copiar entre registros se cuele algun bit mas alto o algo asi?
os pongo el codigo para ver si me podeis ayudar.
Principal
clrw
movf TiempoEngrase,W
movwf Display1
movwf Display2
movf Display1,W
call BCD_7SEG
movwf PORTB
movf Display2,W
call BCD_7SEG
movwf PORTD
goto Principal ; Crea un bucle cerrado.
; SUBRUTINAS *************************************************************************
BCD_7SEG ; Tabla para display de 7 segmentos.
movwf IndiceTabla
movlw .10
subwf IndiceTabla,W
btfsc STATUS,C
retlw 0x40
movlw .0
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x3F
movlw .1
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x06
movlw .2
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x5B
movlw .3
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x4F
movlw .4
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x66
movlw .5
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x6D
movlw .6
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x7D
movlw .7
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x07
movlw .8
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x7F
movlw .9
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x6F
END ; Fin del programa.
Muchas gracias de antemano!
Tengo una subrutina llamada BIN_7SEG que lo que hace es mediante una tabla devolverme la configuracion de pins de salida para mostrar en el display el valor que hay guardado en W
Si hago eso:
movlw .3
call BIN_7SEG
movwf PORTB
Funciona perfecto y muestra el numero 3 por el display, pero si intento enviarle un valor desde un registro por ejemplo:
movlw .3
movwf TiempoEngrase
movlw Display1
call BIN_7SEG
movwf PORTB
Asi no muestra nada por el display se queda apagado completamente. He cambiado la subrutina que tiene la tabla haciendola con saltos condicionales y me envia que el numero es mas grande que 10
Puede ser que al copiar entre registros se cuele algun bit mas alto o algo asi?
os pongo el codigo para ver si me podeis ayudar.
Principal
clrw
movf TiempoEngrase,W
movwf Display1
movwf Display2
movf Display1,W
call BCD_7SEG
movwf PORTB
movf Display2,W
call BCD_7SEG
movwf PORTD
goto Principal ; Crea un bucle cerrado.
; SUBRUTINAS *************************************************************************
BCD_7SEG ; Tabla para display de 7 segmentos.
movwf IndiceTabla
movlw .10
subwf IndiceTabla,W
btfsc STATUS,C
retlw 0x40
movlw .0
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x3F
movlw .1
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x06
movlw .2
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x5B
movlw .3
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x4F
movlw .4
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x66
movlw .5
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x6D
movlw .6
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x7D
movlw .7
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x07
movlw .8
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x7F
movlw .9
subwf IndiceTabla,W
btfsc STATUS,Z
retlw 0x6F
END ; Fin del programa.
Muchas gracias de antemano!