list p=16F877A
include "P16F877A.INC"
;======================================================================================
;= POSICIONES DE MEMORIA =
;======================================================================================
porta equ 05 ;defino los puertos
portb equ 06
portc equ 07
portd equ 08
porte equ 09
trisa equ 85h ;configuracion de los puertos
trisb equ 86h
trisc equ 87h
trisd equ 88h
trise equ 89h
DATOSH equ 0x25
TIME equ 0x20
BCD_UNIDADES equ 0x22 ;variables de salida para BCD
BCD_DECENAS equ 0x23
BCD_CENTENAS equ 0x24
;======================================================================================
;= PROGRAMA PRINCIPAL =
;======================================================================================
org 0
goto INICIO
INICIO clrf porta ;limpia salidas
clrf portb
clrf portc
clrf portd
clrf porte
bsf STATUS,RP0 ;banco 1
bcf STATUS,RP1
movlw b'00000110' ;puerto A en modo E/S digitales
movwf ADCON1
movlw b'11111111'
movwf trisa
clrf portb
clrf portc
clrf portd
clrf porte
movlw b'00000101' ;justifico resultado a la izquierda
movwf ADCON1 ;RA0 y RA1 entradas analogas y RA3 Vref+
bcf STATUS,RP0 ;banco 0
movlw b'11000001' ;oscilador RC canal RA0/AN0 como entrada
movwf ADCON0 ;y conversor activado
nop
COMIENZA clrf DATOSH
bsf ADCON0,GO ;inicia conversion
ADC_WAIT btfsc ADCON0,2 ;ha terminado la conversion?
goto ADC_WAIT ;NO, ESPERAR
bcf STATUS,RP0 ;banco 0
bcf STATUS,RP1
movf ADRESH,W ;tomo el dato obtenido y lo muevo
movwf DATOSH ;a RAM
call DELAY ;delay para iniciar otra conversion
call BIN_a_BCD ;paso el resultado binario a BCD
call VISU ;visualizo en 7 segmentos
call DELAY ;delay
goto COMIENZA ;vuelve a hacer otra conversión
;======================================================================================
;= RUTINAS =
;======================================================================================
DELAY clrwdt
movlw .255
movwf TIME
decfsz TIME
clrwdt
return
;======================================================================================
BIN_a_BCD clrf BCD_CENTENAS
clrf BCD_DECENAS
movf DATOSH,W
movwf BCD_UNIDADES
BCD_RESTA10 movlw .10
subwf BCD_UNIDADES,W
btfss STATUS,C
goto BIN_BCD_FIN
BCD_INCDE movwf BCD_UNIDADES
incf BCD_CENTENAS,F
movlw .10
subwf BCD_CENTENAS,W
btfss STATUS,C
goto BCD_RESTA10
BCD_INCCEN clrf BCD_DECENAS
incf BCD_CENTENAS,F
goto BCD_RESTA10
BIN_BCD_FIN swapf BCD_DECENAS,W
addwf BCD_UNIDADES,W
clrwdt
return
;======================================================================================
VISU clrf portd
clrf portb
movf BCD_UNIDADES,W
movwf portb
bsf portd,0
bcf portd,0
movf BCD_DECENAS,W
movwf portb
bsf portd,1
bcf portd,1
movf BCD_CENTENAS,W
movwf portb
bsf portd,2
bcf portd,2
clrwdt
return
;======================================================================================
end