; ARCHIVO SIETESEGMENTOS.ASM
; CODIGO FUENTE PARA EL MICROCONTROLADOR PIC16F628 

; MUESTRA el valor "4.79" EN UN DISPLAY DE 7 SEGMENTOS DE LEDS 
; RA1 SE USA PARA DAR RESET AL CONTADOR DE COLUMNAS
; RA2 SE USA PARA INCREMENTAR EL CONTADOR DE COLUMNAS
; rB0...Rb7 se usan para encender cada uno de los segmentos
 
; VERSION PARA OSCILADOR CRISTAL 4 MHZ

; CPU configuration
; 	(It's a 16F628, XT OSCILADOR
; 	watchdog timer off, power-up timer on)

	processor 16f628
	include	  <p16f628.inc>
	__config _XT_OSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _BODEN_OFF & _LVP_OFF 

#DEFINE BANCO0	BCF	STATUS,RP0
#DEFINE	BANCO1	BSF	STATUS,RP0
J	equ	H'20'	  
K	equ	H'21'
L	equ	H'22'	;contador tabla	 


			org	0
		BANCO1
		CLRF	VRCON
		CLRF	TRISB	;PUERTO B SALIDAS
		CLRF	TRISA	;PUERTO A SALIDAS
		BANCO0
		MOVLW	H'07'
		MOVWF	CMCON
		CLRF	PORTA
		CLRF	PORTB
malla2:		clrf	L
		call	MR	;RA1 MANDA PULSO DE MASTER RESET AL CONTADOR
malla1:		
		movfw	L
		call	tabla
		movwf	PORTB
		call	CP0	;RA2 MANDA PULSO PARA INCREMENTAR CONTADOR
		call 	retro
		incf	L,f
		movfw	L
		sublw	3		;malla de 3 ciclos
		btfss	STATUS,Z
		goto	malla1
cero:		goto 	malla2

MR:		BSF	PORTA,1	;MASTER RESET AL CONTADOR
		CALL	UNMILI	;RETRASO DE 1 MILISEGUNDO
		BCF	PORTA,1
		RETURN
CP0:		BSF	PORTA,2	;INCREMENTA COLUMNA CONTADOR
		CALL	UNMILI	;RETRASO DE 1 MILISEGUND0
		BCF	PORTA,2
		RETURN
	  
	; RETRASO DE 0.5 SEGUNDOS

retro:		movlw	D'35'	;RUTINA RETRASO 10 MS
		movwf	J	; J = w
jloop:		movwf	K	; K = w
kloop:		decfsz	K,f	; K = K-1, skip next if zero
		goto 	kloop
		decfsz	J,f	; J = J-1, skip next if zero
		goto	jloop
		return

UNMILI:		movlw	D'250'	; RUTINA RETRASO 1 MILISEGUNDO
		movwf	K	; J = w
kloop2:		decfsz	K,f	; K = K-1, skip next if zero
		goto 	kloop2
		return

tabla:		addwf	PCL		;patrón de segmentos encendidos
		retlw	B'11001101'	;en cada módulo.
		retlw	B'00001110'
		retlw	B'11001110'
		

			end	

