ERRORLEVEL -205
;ERRORLEVEL -302

LIST p=16f873a
#include <p16f873a.inc>


CBLOCK 0x21
	TEMP_H
	TEMP_L
	TEMP1A
	TEMP1B
	UNI
	DEC
	CEN
	MIL
	UNMIL
	W_TEMP
	S_TEMP
	TEMP_TMR0
ENDC

ORG 0x00
	goto RESET
ORG 0x04
	goto INT

;
INT:			movwf	W_TEMP	
			swapf	STATUS,W	
			movwf	S_TEMP
			decfsz	TEMP_TMR0,F
			goto	NEXT
			
			call	LEER_ADC
			call	BIN16BCD5
						
			
_TMR0:		movlw	.217
			movwf	TMR0
			movlw	.100
			movwf	TEMP_TMR0
			bcf		INTCON,2
			goto	EXIT
NEXT:		movlw	.217
			movwf	TMR0
			goto	EXIT
EXIT:		swapf   	S_TEMP,W	
			movwf	STATUS
			swapf   	W_TEMP,F		
			swapf	W_TEMP,W		
			bcf		INTCON,2
			retfie	

;
RESET:		bsf		STATUS,RP0
			bcf		STATUS,RP1
			;RA1-RA3 = display
			movlw	b'00000001'
			movwf	TRISA
			;RA0 = AN0			
			movlw	b'10001110'
			movwf	ADCON1
			;RB0-RB7 = 7 segmentos
			movlw	b'00000000'
			movwf	TRISB
			;RC4 = display
			movlw	b'00000000'
			movwf	TRISC
			movlw	b'00000111'
			movwf	OPTION_REG
			bcf		STATUS,RP0
			bcf		STATUS,RP1
			
			movlw	.217
			movwf	TMR0
			movlw	.100
			movwf	TEMP_TMR0
			movlw	b'10100000'
			movwf	INTCON

			bsf		PORTC,3		
			clrf	UNI
			clrf	DEC
			clrf	CEN
			clrf	MIL
			clrf	TEMP_H
			clrf	TEMP_L
			
INICIO:		call	IMPRIMIR
			goto	INICIO	

;			
LEER_ADC:		movlw	b'10000001'
			movwf	ADCON0
			bsf		STATUS,RP0
			bcf		STATUS,RP1
			bsf		ADCON1,ADFM
			bcf		STATUS,RP0
			movlw 	.20
			movwf	TEMP1A
			decfsz	TEMP1A,F
			goto	$-1
		  	bsf		ADCON0,GO_DONE
		  	movlw 	.20
			movwf	TEMP1A
			decfsz	TEMP1A,F
			goto	$-1
			btfsc	ADCON0,GO_DONE
			goto	$-1
			movf	ADRESH,W
			movwf	TEMP_H ;H
			bsf		STATUS,RP0
			bcf		STATUS,RP1
			movf	ADRESL,W
			bcf		STATUS,RP0
			movwf	TEMP_L ;L			
			return
   			
;
BIN16BCD5:	swapf	TEMP_H,W
			andlw	0x0F
			addlw	0xF0
			movwf	MIL
			addwf	MIL,F
			addlw	0xE2
			movwf	CEN
			addlw	0x32
			movwf	UNI
			movf	TEMP_H,W
			andlw	0x0F
			addwf	CEN,F
			addwf	CEN,F
			addwf	UNI,F
			addlw	0xE9
			movwf	DEC
			addwf	DEC,F
			addwf	DEC,F
			swapf	TEMP_L,w
			andlw	0x0F
			addwf	DEC,F
			addwf	UNI,F
			rlf		DEC,F
			rlf		UNI,F
			comf	UNI,F
			rlf		UNI,F
			movf	TEMP_L,W
			andlw	0x0F
			addwf	UNI,F
			rlf		MIL,F
			movlw	0x07
			movwf	UNMIL            
        		movlw	0x0A
			addwf	UNI,F
			decf	DEC,F
			btfss	3,0
			goto	$-3
			addwf	DEC,F
			decf	CEN,F
			btfss   3,0
			goto	$-3
			addwf	CEN,F
			decf	MIL,F
			btfss	3,0
			goto	$-3
			addwf	MIL,F
			decf	UNMIL,F
			btfss	3,0
			goto	$-3
			return	
			   			
;
IMPRIMIR:		bcf		PORTC,4
			bcf		PORTC,5
			bcf		PORTC,6
			bcf		PORTC,7		
			bsf		PORTC,7
			movf	UNI,W
			call	_7SEG
			movwf	PORTB
			call	TIEMPO
			bcf		PORTC,7
			bsf		PORTC,6
			movf	DEC,W
			call	_7SEG
			movwf	PORTB
			call	TIEMPO
			bcf		PORTC,6
			bsf		PORTC,5
			movf	CEN,W
			call	_7SEG
			movwf	PORTB
			call	TIEMPO
			bcf		PORTC,5		
			bsf		PORTC,4
			movf	MIL,W
			call	_7SEG
			movwf	PORTB
			call	TIEMPO
			bcf		PORTC,4					
			return	
			
;
TIEMPO:		movlw 	.255
			movwf	TEMP1A
			decfsz	TEMP1A,F
			goto	$-1
		  	return

;		  	
_7SEG:		addwf	PCL,F
			retlw	b'00000011'	; cero
			retlw	b'10011111'	; uno
			retlw	b'00100101'	; dos
			retlw	b'00001101'	; tres
			retlw	b'10011001'	; cuatro
			retlw	b'01001001'	; cinco
			retlw	b'01000001'	; seis
			retlw	b'00011111'	; siete						
			retlw	b'00000001'	; ocho
			retlw	b'00011001'	; nueve
			retlw	b'11111101'	; (-)


END

