;*****************************************************************************
;
;
;*****************************************************************************
;23456789012345678901234567890123456789012345678901234567890123456789012345678
;=============================================================================

;******************************************************************************
; Descripcion del programa:
; 
; En la entrada analogica AN0 hayconectado un potenciometro
; En la entrada analogica AN1 hay un consensador que se carga con la salida RC4
; El digito muestra el valor de la entrada analogica seleccionada.
;
; Al pulsar RA3 selecciona se ilumina el led rojo  y se selecciona AN0 y por el
; digito se visualiza el valor del potenciometro.
;
; Al pulsar RA2 selecciona se ilumina el led verde y se selecciona AN1 y por el
; digito se visualiza el valor de la carga del condensador.
;
; Al pulsar RA5 conmuta la salida RC4 carga/descarga del condensador y el led 
; amarillo muestra el estado de RC4.
;
; *******************************************************************

#include <p16F886.inc>
	__config	_CONFIG1, _INTRC_OSC_NOCLKOUT & _LVP_OFF&_PWRTE_ON&_WDT_OFF& _FCMEN_OFF	;Palabra 1 de configuración
	__config	_CONFIG2, _WRT_OFF	 													;Palabra 2 de configuración

;	__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
;	__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V
		
;--------[ Declaraciones ]----------------

;D0		equ		0	; Port B


;--------[ Macros ]----------------

Delay	macro	miliSg
		movlw	miliSg
		call	Delay_mSeg
endm
     
;=============================================================================

    cblock 0x20
Delay1                   ; Retardo 1
Delay2                   ; Retardo 2
						 
ValorAN0				 ; Valor del Analogica 0  Potenciometro
ValorAN1				 ; Valor del Analogica 1  Condensador
     endc


;=============================================================================


;--------[ Vector - Reset ]----------------   
     org	0
     goto		Start



;--------[ Vector - Interupcion ]----------------   
;     org	4



;--------[ Inicio Programa ]----------------
Start:
     bsf       	STATUS,RP0          ; Select Pag 1
     movlw		0xFF
     movwf		TRISA				; Port A Todo Input
     clrf		TRISB				; Port B Todo Output
     movlw		b'11000011'
     clrf		TRISC				; Port C <5:2> Output
     
     movlw		b'00000000'			; Vref- Vss , Vref+ Vdd, ADFM=0 left justified
     movwf		ADCON1
     
     bsf       	STATUS,RP0          ; Select Pag 3
     bsf       	STATUS,RP1
     
     movlw		b'00000011'			; Analogicas <1:0> seleccionadas
;     movlw		b'00000010'			; Analogicas xxxx seleccionadas
     movwf		ANSEL
     
     bcf       	STATUS,RP0          ; Select Pag 0
     bcf       	STATUS,RP1
     
     
;=============================================================================
    
MainProg:
	
	call		ReadAn0	
	Delay		.200

	call		ReadAn1	
	Delay		.200
	
	;-----------[ Carga/Descarga condensador ]--------------
	movf		ValorAN1,w		; Si V.Cond. < 0x40 , RC4=On
	sublw		0x40
	btfsc		STATUS,0		; Salta si NotCarry-out
	bsf			PORTC,4
	
	movf		ValorAN1,w		; Si V.Cond. < 0xC0 , RC4=Off
	sublw		0xC0
	btfss		STATUS,0		; Salta si Carry-out
	bcf			PORTC,4
	
	;-----------[ Mostrar en digito valor de AN1 ]--------------
	movfw		ValorAN1
	movwf		PORTB
	
	;-----------[ Mostrar en Led's la comparacion de AN0 con AN1 ]-----------
	movf		ValorAN0,w		; Si V.Cond. < 0xC0 , RC4=Off
	subwf		ValorAN1,w
	btfss		STATUS,0		; Salta si Carry-out
	goto		PutLED_0
	bcf			PORTC,2
	bsf			PORTC,3	
	goto		PutLED_1
PutLED_0:	
	bcf			PORTC,3	
	bsf			PORTC,2
PutLED_1:	
	
	nop
	goto		MainProg


	
	goto		$-1

;=============================================================================

ReadAn0:
    movlw		b'01000001'			; Fosc/8 , AN0 , ADC=1
    movwf		ADCON0
	nop
	nop
	nop
	nop
	bsf			ADCON0,GO_DONE		; Start conversion
	btfss		ADCON0,GO_DONE
	goto		$-1
	movf		ADRESH,W			; Copia el valor ValorAN0
	movwf		ValorAN0
	return

;-------------------------------------------------------------
ReadAn1:
    movlw		b'01000101'			; Fosc/8 , AN1 , ADC=1
    movwf		ADCON0
	nop
	nop
	nop
	nop
	bsf			ADCON0,GO_DONE		; Start conversion
	btfss		ADCON0,GO_DONE
	goto		$-1
	movf		ADRESH,W			; Copia el valor ValorAN1
	movwf		ValorAN1
	return	  	 


;=============================================================================

Delay_mSeg:
	movwf		Delay2
	movlw		0xFF
	movwf		Delay1
	
Delay_mSeg_1:
	nop
	nop
	decfsz		Delay1,f
	goto		Delay_mSeg_1
	decfsz		Delay2,f
	goto		Delay_mSeg_1
	return
	
;-----------------------------------------------------------
     end
