LIST p=16F887 ;Tipo de micro
INCLUDE "P16F887.inc" ;File include
;<<<<<<------------------------Define palabra de configuracion -------------------------->>>>>>>
__CONFIG _CONFIG1, _FOSC_INTRC_NOCLKOUT & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_ON & _CPD_OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF
;------------------------------------------------------------------------------------------
cblock 0x20
d1
endc
org 0x00
goto INICIO
org 0x04
goto INTERRUPCION ;direccion de interrupcion. 0x04
; Se transmite via Serie el dato que esta en el registro W
;------------------------------------------------------------------------------------------
INICIO
bsf STATUS,RP0 ;Cambio al banco 1
CLRF TRISB
CLRF TRISC
bcf STATUS,RP0
bcf STATUS,RP1 ;Cambio al banco 0
MOVLW 0XFF
MOVWF PORTB
MOVWF PORTC
;----------------------------------------------------------------------------------------------------
;inicia ADC
BANKSEL ADCON0 ;
MOVLW B'11000001' ;ADC Frc clock,
MOVWF ADCON0 ;AN0, On
BANKSEL ADCON1 ;
MOVLW B'10000000' ;right justify
MOVWF ADCON1 ;Vdd and Vss as Vref
BANKSEL TRISA ;
BSF TRISA,0 ;Set RA0 to input
BANKSEL ANSEL ;
BSF ANSEL,0 ;Set RA0 to analog
;----------------------------------------------------------------------------------------------------
;configura interrupcion
;BANKSEL ADCON1 ;
;MOVLW B'10000000' ;right justify
;MOVWF ADCON1 ;Vdd and Vss as Vref
BANKSEL PIE1;
BSF PIE1,ADIE ;HABILITAMOS EL REGISTRO DE INTERRUPCION
BANKSEL PIR1
BCF PIR1,ADIF
BANKSEL INTCON ;
bsf INTCON, PEIE ; Enable peripheral interrupts
bsf INTCON, GIE ; Enable global interrupts
;BANKSEL TRISA ;
;BSF TRISA,0 ;Set RA0 to input
;BANKSEL ANSEL ;
;BSF ANSEL,0 ;Set RA0 to analog
CALL DELAY ;Acquisiton delay
;BANKSEL ADCON0 ;
;MOVLW B'11000001' ;ADC Frc clock,
BANKSEL ADCON0
bsf ADCON0,2 ; Start conversion (set GO)
principal goto principal
;-------------------------------------------------------------------------------------------
INTERRUPCION
call DELAY
BSF ADCON0,GO ;Start conversion
BTFSC ADCON0,GO ;Is conversion done?
GOTO $-1 ;No, test again
bcf PIR1,ADIF ;restauramos bandera
BANKSEL ADRESH ;
MOVF ADRESH,W ;Read upper 2 bits
MOVWF PORTC ;store in GPR space
BANKSEL ADRESL ;
MOVF ADRESL,W ;Read lower 8 bits
MOVWF PORTB ;Store in GPR space
RETFIE
;--------------------------------------------------------------------------------------------
DELAY
;16 cycles
movlw 0x05
movwf d1
Delay_0
decfsz d1, f
goto Delay_0
;4 cycles (including call)
return
END
LIST p=16F887 ;Tipo de micro
INCLUDE "P16F887.inc" ;File include
;<<<<<<------------------------Define palabra de configuracion -------------------------->>>>>>>
__CONFIG _CONFIG1, _FOSC_INTRC_NOCLKOUT & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_ON & _CPD_OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF
;------------------------------------------------------------------------------------------
cblock 0x20
d1
endc
org 0x00
goto INICIO
org 0x04
goto INTERRUPCION ;direccion de interrupcion. 0x04
; Se transmite via Serie el dato que esta en el registro W
;------------------------------------------------------------------------------------------
INICIO
bsf STATUS,RP0 ;Cambio al banco 1
CLRF TRISB
CLRF TRISC
MOVLW 0xff
MOVWF TRISA
BANKSEL ANSEL ;
BSF ANSEL,0 ;Set RA0 to analog
bcf STATUS,RP0
bcf STATUS,RP1 ;Cambio al banco 0
;----------------------------------------------------------------------------------------------------
;inicia ADC
BANKSEL ADCON0 ;
MOVLW B'11000001' ;ADC Frc clock,
MOVWF ADCON0 ;AN0, On
BANKSEL ADCON1 ;
MOVLW B'10000000' ;right justify
MOVWF ADCON1 ;Vdd and Vss as Vref
;----------------------------------------------------------------------------------------------------
;configura interrupcion
BANKSEL INTCON ;
bsf INTCON, PEIE ; Enable peripheral interrupts
bsf INTCON, GIE ; Enable global interrupts
BSF PIE1,ADIE ;HABILITAMOS EL REGISTRO DE INTERRUPCION
BANKSEL PIR1
BCF PIR1,ADIF ;apagamos la bandera
CALL DELAY ;Acquisiton delay
BSF ADCON0,GO ; Start conversion (set GO)
principal
CALL DELAY
goto principal
;-------------------------------------------------------------------------------------------
INTERRUPCION
BANKSEL ADCON0
call DELAY
; BTFSC ADCON0,GO ;Is conversion done?
; GOTO $-1 ;No, test again
BANKSEL ADRESL ;
MOVF ADRESL,W ;Read lower 8 bits
BANKSEL PORTB ;
MOVWF PORTB ;Store in GPR space
BSF ADCON0,GO ;Start conversion
BCF PIR1,ADIF ;restauramos bandera
RETFIE
;--------------------------------------------------------------------------------------------
DELAY
;16 cycles
movlw 0x05
movwf d1
Delay_0
decfsz d1, f
goto Delay_0
;4 cycles (including call)
return
END