Programa
A continuación se muestra el programa final de control del capacimetro digital con PIC 16F84.
LIST P=16F84
TRISA EQU 85
TRISB EQU 86
PORTA EQU 05
PORTB EQU 06
W EQU 0
f EQU 1
PC EQU 02
EDATA EQU 08
EADR EQU 09
ECON1 EQU 88
ECON2 EQU 89
TIMER 0 EQU 01
OPCION EQU 81
STATUS EQU 03
REG1 EQU 10
REG3 EQU 12
REG4 EQU 17
AUXCI EQU 1B
BANDER1 EQU 1C
PER1 EQU 1E
REG5A EQU 1F
BANDERS EQU 20
REG1A EQU 22
REG2A EQU 23
REG3A EQU 24
REG4A EQU 25
CICLO EQU 26
INTCON EQU 0X0B
#DEFINE COMP PORTA,2
#DEFINE TRIGGER PORTA,3
#DEFINE ENABLE PORTA,1
#DEFINE RS PORTA,0
#DEFINE CARRY STATUS,0
#DEFINE OVERFL INTCON,2 ;BANDERA DE OVERFLOW DE TIMER0
ORG 00
GOTO INICIO
INICIO BSF 3,5 ;CONFIGURAR PUERTOS
MOVLW 0X04
MOVWF TRISA
MOVLW 0X00
MOVWF TRISB
MOVLW 0X80
MOVWF OPCION ;PREESCALIZADOR 1:2, CON FLANCO DE SUBIDA
BSF 3,5
BCF ENABLE ;LCD DESHABILITADO;
MOVLW .100 ;RETARDO DE ESTABILIDAD DE LCD
MOVWF REG1
CALL RETARDO
MOVLW 0X38 ; INICIA LCD A 8 BITS Y 2 LINEAS
CALL CONTROL
MOVLW 0X06 ; MENSAJE FIJO EN PANTALLA
CALL CONTROL
MOVLW 0X0C ; ACTIVA EL DISPLAY
CALL CONTROL
MOVLW 0X01 ; BORRAR PANTALLA
CALL CONTROL
CLEAR BSF TRIGGER ; DESCARGAR CONDENSADOR
BCF OVERFL ; BORRAR BANDERA DEL TIMER0
MOVLW .250
MOVWF REG1
CALL RETARDO ; RETARDO DE DESCARGA TOTAL DE C
MOVLW .250
MOVWF REG1
CALL RETARDO
CLRF REG1A ; CLEAR AL CONTADOR
CLRF REG2A
CLRF REG3A
CLRF REG4A
CLRF REG5A
CLRF BANDERS
CLRF TIMER0
BCF TRIGGER ; INICIAR CARGA DEL CONDENSADOR
FARA1 BCF OVERFL
FARAD2 BTFSC COMP ; COMPARACION VMAX DEL CONDENSADOR
GOTO CICLO2
BTFSS OVERFL
GOTO FARAD2 ; ESPERAR QUE CARGUE EL CONDENSADOR
INCF BANDERS,f
GOTO FARA1
CICLO2 MOVF TIMER0,W ; GUARDAR # DE PULSOS EN CICLO
MOVWF CICLO
MOVWF AUXCI
INCF BANDERS,f
MOVF BANDERS,W
MOVWF BANDER1 ; GUARDAR # DE BANDERAS EN
BANDER1
MOVLW .2 ; PERIODO PARA REPETIR DATOS
MOVWF PER1
CXLOS CALL INCONT
DECFSZ CICLO,f ; CONTAR # DE PULSOS DEL TIMER0
GOTO CXLOS
DECFSZ BANDERS,f ; DECREMENTAR CICLO DE ACUERDO
A # DE BANDERAS
DECFSZ PER1,f
GOTO CONTF
GOTO REPIT
BSF TRIGGER ; DESCARGAR CONDENSADOR
CALL VISUAL
GOTO CLEAR
REPIT MOVF AUXCI,W ; RECUPERAR LOS DATOS DEL
CONTEO
MOVWF CICLO ; PARA 2 VEZ Y PODER COMPENSAR
PREESCALIZADOR
MOVF BANDER1,W
MOVWF BANDERS
GOTO CXLOS
CONTF MOVLW 0XFF
MOVWF CICLO
GOTO CXLOS
VISUAL MOVLW 0X30 ; PERMITE VISUALIZAR LOS DATOS DE LOS
REG Y DE LA TABLA
ADDWF REG1A,f ; LOS CONVIERTE DE BCD A ASCII
ADDWF REG2A,f
ADDWF REG3A,f
ADDWF REG4A,f
ADDWF REG5A,f
MOVLW .1
CALL CONTROL
MOVLW "#"
CALL DATO
MOVLW "F"
CALL DATO
MOVLW "A"
CALL DATO
MOVLW "R"
CALL DATO
MOVLW "A"
CALL DATO
MOVLW "D"
CALL DATO
MOVLW "I"
CALL DATO
MOVLW "O"
CALL DATO
MOVLW "S"
CALL DATO
MOVLW ":"
CALL DATO
MOVF REG5A,W
CALL DATO
MOVF REG4A,W
CALL DATO
MOVF REG3A,W
CALL DATO
MOVLW "."
CALL DATO
MOVF REG2A,W
CALL DATO
MOVF REG1A,W
CALL DATO
RETURN
CONTROL BCF RS ; ESTA RUTINA GENERA LOS PULSOS PARA
ENVIAR ; UN DATO O UNA INSTRUCCION AL LCD
GOTO DATO1
DATO BSF RS
DATO1 BSF ENABLE
MOVWF PORTB
MOVLW .5
MOVWF REG1
CALL RETARDO
BCF ENABLE
CALL RETARDO
RETLW 0
RETARDO MOVF REG1,W ; RETARDO VARIABLE DE
ESTABILIDAD
MOVWF REG3
LOOP1 MOVLW .250
MOVWF REG4
LOOP NOP
DECFSZ REG4,f
GOTO LOOP
DECFSZ REG3,f
GOTO LOOP1
RETURN
INCONT INCF REG1A,f
:RUTINAPARA UNIDADES,DECENAS,CENTENAS DE
MOVLW 0X0A ; LOS VALORES DE CAPACITANCIA A
MEDIR
XORWF REG1A,W
BTFSS 3,2
GOTO SALIR
CLRF REG1A
INCF REG2A,f
MOVLW 0X0A
XORWF REG2A,W
BTFSS 3,2
GOTO SALIR
CLRF REG2A
INCF REG3A,f
MOVLW 0X0A
XORWF REG3A,W
BTFSS 3,2
GOTO SALIR
CLRF REG3A
INCF REG4A,f
MOVLW 0X0A
XORWF REG4A,W
BTFSS 3,2
GOTO SALIR
CLRF REG4A
INCF REG5A,f
MOVLW 0X0A
XORWF REG5A,W
BTFSS 3,2
GOTO SALIR
CLRF REG5A
SALIR RETURN
END