;Curso básico de microcontroladores PIC.  --- micropic@lledia.org
;prac_18.asm - Secuencia de 0 a F en el display conectado en PORTB

	list	p=16F84		;indica al ensamblador el modelo de PIC
	include	"P16F84.inc"	;incluye librería de definiciones para el PIC16F84
	__config	_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;palabra de configuración

CONTA_0		equ	0x0C	;primer registro para bucle de retardo
CONTA_1		equ	0x0D	;segundo registro para bucle retardo
CONTA_HEX	equ	0x0E	;registro para contador de la TABLA

	org	0x00		;primera posición de la memoria de programa
	goto	INICIO		;salto a la etiqueta inicio
	org	0x05		;para pasar por encima del vector de interrupción

INICIO	bsf	STATUS,RP0	;selecciona banco 1 del área de datos
	clrf	TRISB		;configura PORTB todo salidas
	bcf	STATUS,RP0	;vuelve a banco 0 del área de datos
	clrf	PORTB		;empieza apagando display
	goto	EMPEZAR		;salta la subrutina TABLA


;Tabla de código siete segmentos para el display 

TABLA	movf	CONTA_HEX,W	;pasa el contador a W
	addwf	PCL,F		;se suma al contador de programa para…
				;...desplazarse por la tabla
	retlw	b'00111111'	;0 en código siete segmentos
	retlw	b'00000110'	;1
	retlw	b'01011011'	;2
	retlw	b'01001111'	;3
	retlw	b'01100110'	;4
	retlw	b'01101101'	;5
	retlw	b'01111101'	;6
	retlw	b'00000111'	;7
	retlw	b'01111111'	;8
	retlw	b'01100111'	;9
	retlw	b'01110111'	;A
	retlw	b'01111100'	;B
	retlw	b'00111001'	;C
	retlw	b'01011110'	;D
	retlw	b'01111001'	;E
	retlw	b'01110001'	;F



;programa principal

EMPEZAR	clrf	CONTA_HEX	;incia conta_hex a 0
BUCLE	call	TABLA		;llama a tabla para coger valor código 7 segmentos
	movwf	PORTB		;muestra en el display
	call	RETARDO		;retardo para visualizar
	call	RETARDO		;otro retardo
	incf	CONTA_HEX,F	;incrementa contador_hex
	movf	CONTA_HEX,W	;
	sublw	.17		;ha llegado a 17 ?
	btfss	STATUS,Z	;si Z = 1, es que conta_hex = 17 
	goto	BUCLE		;no es 17, a buscar siguiente valor de la tabla
	goto	EMPEZAR		;si es 17, vuelve a empezar


;subrutina retardo, mediante dos bucles anidados se consigue un tiempo de unos 192ms.

RETARDO	decfsz	CONTA_0,F	
	goto	RETARDO		
	decfsz	CONTA_1,F	
	goto	RETARDO		
	return			

	end			
