Skip to content

Instantly share code, notes, and snippets.

@charliexr
Created December 21, 2010 01:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save charliexr/749360 to your computer and use it in GitHub Desktop.
Save charliexr/749360 to your computer and use it in GitHub Desktop.
contador_0_a_9_gpsim
;
;Contador de 0 a 9 que muestra estos digitos en un display 7 segmentos conectado al puerto A del PIC
;PIC16F628A
;20/12/2010
;http://charliexray.blogspot.com
;
;Para simular con gpsim. No fue probado en la practica.
;
;========================================================================
;PIC a utilizar
;========================================================================
list p = 16F628A
#include <p16F628A.inc>
;========================================================================
;configuracion de fusibles
;========================================================================
__CONFIG _WDT_OFF & _PWRTE_OFF & _INTOSC_OSC_NOCLKOUT & _MCLRE_OFF & _BOREN_ON & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;========================================================================
;reserva de registros en memoria
;========================================================================
dig_act equ 0x20 ;registro para almacenar valor del dígito mostrado
contador equ 0x21 ;un contador
ORG 0x00 ;inicio luego de un reset
;========================================================================
;configuracion de registros
;========================================================================
;me paso al banco1
bcf STATUS,RP1
bsf STATUS,RP0
clrf TRISA ;puerto A como salida
;vuelvo al banco0
bcf STATUS,RP1
bcf STATUS,RP0
;deshabilito comparadores analogicos
;movlw 0x07
;movwf CMCON
;========================================================================
;Programa Principal
;========================================================================
ORG 0x05
ppal ;programa principal
clrf dig_act ;cargo valor cero al registro del digito actual
;inicializo el contador con el valor 10
movlw b'0001010' ;cargo el valor 10 en el registro W
movwf contador ;cargo valor de W en registro contador
bucle ;muestro los digitos del 0 al 9
call mostrar_dig ;muestro el dígito actual y lo incremento
decfsz contador,1 ;si contador = 0, se salta la siguiente instruccion
goto bucle
goto ppal ;vuelvo a pppal.
mostrar_dig ;subrutina que muestra el dígito actual y lo incrementa en uno
movf dig_act,W ;cargo el valor del registro dig_act en el registro de trabajo W
call tabla_conv ;obtengo el equivalente 7segmentos a ese digito
movwf PORTA ;muestro el valor obtenido de la tabla
incf dig_act ;Incremento en uno el dígito actual
return
tabla_conv ;tabla de conversion a 7segmentos
addwf PCL,1 ;agrego un offset del valor de W al Program Counter
retlw b'00111111' ;0 en 7 segmentos
retlw b'00000110'
retlw b'01011011'
retlw b'01001111'
retlw b'01100110'
retlw b'01101101'
retlw b'01111100'
retlw b'00000111'
retlw b'01111111'
retlw b'01100111' ;9 en 7 segmentos
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment