LIST p=16F876A
INCLUDE <P16F876A.INC>
__config _CP_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_XT_OSC
;===========================================================
;===========================================================
canal equ 0x18 ;AGREGADO PARA SELECCIONAR CANAL
cont equ 0x19
uni equ 0x20
dec equ 0x21
cen equ 0x22
pcl equ 0x02 ;Contador de programa (Parte baja)
estado equ 0x03 ;Registro de estados
ptoa equ 0x05 ;Puertos de E/S
ptob equ 0x06
ptoc equ 0x07
intcon equ 0x0B ;Controlador de interrupciones
adres equ 0x1E ;Resultado de la conversión A/D (HIGH / LOW)
adcon equ 0x1F ;Configuración del conversor A/D
buffer equ 0x28 ;Usado como registro temporal
#define CARRY estado, 0 ;Bit de acarreo
#define CERO estado, 2 ;Flag indicador de resultado cero
#define MP0 estado, 5 ;Bit 0 selector de página de memoria
#define MP1 estado, 6 ;Bit 1 selector de página de memoria
#define ADGO adcon, 2 ;Bit que inicia la conversión (1) / Indica finalización (0)
Inicio
bsf MP0 ;Pasa a página 1
bcf MP1
movlw b'00011111' ;Configura puerto A
movwf ptoa
clrf ptob ;Puerto B completo como salidas (bus del LCD)
clrf ptoc ;Puerto C completo como salidas
; movlw b'10001110' ;Configura los pines del Puerto A ANTERIOR CONFIGURACION AN0
movlw b'10000101' ;Configura los pines del Puerto A AN0 Y AN1 CONFIGURADO COMO ENTRADAS ADC
movwf adcon ;AN0 Y AN1 como entrada análoga
bcf MP0
movlw b'01000001' ;Enciende y configura el convertidor A/D
movwf adcon
clrf ptoa ;Apaga todo
clrf ptob
clrf ptoc
clrf uni
clrf dec
clrf cen
CICLO
movlw d'100' ; ========== MODIFICADODO DESDE ACA ==========
movwf cont
clrf canal ; AN0
call seguir
decfsz cont,f
goto $-2
call Retardo_1s ;==== DEBERIA RETRASAR 1 SEGUNDO PERO NO FUNCIONA NADA =====
clrf cont
movlw d'100'
movwf cont
movlw d'1'
movwf canal ; AN1
call seguir
decfsz cont,f
goto $-2
call Retardo_1s
clrf cont
goto CICLO
seguir
movlw b'01000001' ;repone a cero para que iorlw pueda
movwf ADCON0
;bcf ADCON0,ADON ;apaga el convertidor
rlf canal,F ;posiciona los bits
rlf canal,F
rlf canal,W
iorwf ADCON0,F
;bsf ADCON0,ADON ;enciende el convertidor
rrf canal,F
rrf canal,F ;retorna a la anterior
; bcf PIR1,ADIF ;limpia flag de conversion completa
;============== HASTA ACA LA MODICICACION ================
bsf ADGO ;Inicia la conversión A/D
btfsc ADGO ;Espera que termine de convertir
goto $ -1
bsf MP0 ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado)
movf adres, 0 ;Resultado de conversión -> W
bcf MP0 ;Pasa a página 1
movwf buffer ;Guarda el dato obtenido de ADRESL en el buffer temporal
bcf CARRY ;Limpia el CARRY
btfsc adres, 0 ;Mira el bit menos significativo de ADRESH (Bit 8)
bsf CARRY ;Si está en 1 pone en uno el carry
rrf buffer, 1 ;Hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por el 7 de ADRESL
movf buffer, 0 ;Dato digitalizado -> W
;//////////////////////////////////////////////////////
call DECIMAL
display
movf uni,0 ;Carga W con el valor de unidad UNIDAD
call tabla ;Vuelve W con los bits para formar el digito
movwf ptob ;manda el digito al puerto B
bsf ptoc,2 ;enciende el bit 2 del puerto A
call Retardo_2ms ;Espera para que se persiva el digito
bcf ptoc,2 ;apaga el bit 2 del puerto A
movf dec,0 ;Carga W con el valor de decena DECENA
call tabla ;Vuelve W con los bits para formar el digito
movwf ptob ;Mando el digito al puerto B
bsf ptoc,1 ;Enciende el bit 1 del puerto A
call Retardo_2ms ;Espera para que se persiva el digito
bcf ptoc,1 ;apaga el bit 1 del puerto A
movf cen,0 ;Carga W con el valor de centena CENTENA
call tabla ;Vuelve W con los bits para formar el digito
movwf ptob ;Manda el digito al puerto B
bsf ptoc,0 ;Enciende el bit 0 del puerto A
call Retardo_2ms ;Espera para que se persiva el digito
bcf ptoc,0 ;apaga el bit 0 del puerto A
return ;vuelve a CICLO
; goto CICLO
DECIMAL movwf uni ;Convierte el dato presente en W en UNI, DEC y CEN
clrf dec
clrf cen
movlw d'100' ;Determina la cant. de centenas
CENTENA subwf uni, 1
btfss CARRY ;SI ES 100 salta a incrementar
goto CIEN ;NO ES 100 continua aca
incf cen, 1
goto CENTENA
CIEN addwf uni, 1
movlw d'10' ;Determina la cant. de decenas
DECENA subwf uni, 1
btfss CARRY
goto DIEZ
incf dec, 1
goto DECENA
DIEZ addwf uni, 1 ;Uni queda con la cant. de unidades (sin decenas ni centenas)
return
;/////////////////////////////////////////////////////
tabla ; retlw b'gfedcba' para display catodo comun
addwf PCL,1 ; Se incrementa el contador del programa.-
DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F ; EL ANTEULTIMO CAMBIAR DE 0XFF A 0X7F
;==========================
INCLUDE <RETARDOS.INC>
end