Hola a todos! Necesito el archivo fuente con los includes para hacer un voltimetro amperimetro con lcd, encontre lo que necesito pero tengo un problema:
aca les dejo el link de lo que exactamente necesito (
http://www.dtforum.net/index.php?topic=57482.0), el problema es que para hacer las descargas tenes que tener un usuario con cierta cantidad de mensajes, y ya encontre una parte del programa que es esta:
;************************************************************************************
; Programa VOLTIMETRO.ASM FECHA: 17-11-2004
;************************************************************************************
;
; Voltímetro y amperímetro digital implementado con PIC16F819
;
; Autor: Alberto Moreno Tejada
; ***********************************************************************************
LIST P=P16F819
INCLUDE <P16F819.inc>
__CONFIG _INTRC_IO & _PWRTE_ON & _WDT_OFF & _LVP_OFF
CBLOCK 0x20 ; la primera posición de la memoria RAM en
ContaC ; la que se escribe es la 0x20
Temporal_1
Dato_H
Dato_L
MilesI
CentenasI
DecenasI
UnidadesI
ADRESH_Suma
ADRESL_Suma
ADRESH_Old
ADRESL_Old
Umbral
ENDC
; ***********************************************************************************
; Programa principal
;
; ***********************************************************************************
org 0x00 ; vector de reset
goto INICIO
ORG 0x05 ; una posición después del vector de
; interrupción
INICIO bsf STATUS,RP0 ; banco 1
movlw b'01000000' ; selecciona 1 MHz como frecuencia de reloj
movwf OSCCON
bcf STATUS,RP0 ; banco 0
clrf ADRESH_Old
clrf ADRESL_Old
call LCD_Inicializa ; se inicializa la pantalla LCD
PRINCIPAL bsf STATUS,RP0 ; banco 1 de registros
movlw b'10000001' ; se configuran las entradas y salidas
movwf ADCON1 ; del puerto A como digitales
movlw b'00111111' ; se configura el puero A como entradas
movwf TRISA
bcf STATUS,RP0 ; banco 0 de registros
movlw b'10001001' ; se selecciona la entrada de intensidad
movwf ADCON0 ;
Call ConversionAD ; Conversión A/D
call Convierte ; Conversión a BCD
movf BCD_Miles,W ; copia el resultado de la conversión a BCD
movwf MilesI ; de la intensidad a unos registros
movf BCD_Centenas,W ; auxiliares para que no se pierda la
movwf CentenasI ; información al hacer la conversión del
movf BCD_Decenas,W ; voltaje
movwf DecenasI
movf BCD_Unidades,W
movwf UnidadesI
movlw b'10100001' ; Se selecciona la entrada de tensión
movwf ADCON0
call ConversionAD ; conversion A/D
call Convierte ; conversion a BCD
call RestaShunt ; le resta al valor de la tensión el valor
; de la tensión que cae en la resistencia
; shunt
call Visualiza ; se visualizan los datos en la pantalla
goto PRINCIPAL
; ***********************************************************************************
; Subrutina ConversionAD: realiza la conversión anañógica-digital
; hace 4 conversiones y halla la media aritmética
; ***********************************************************************************
ConversionAD
clrf ADRESH_Suma ; borra los registros donde se sumarán
clrf ADRESL_Suma ; los resultados de las conversiones
movlw .4 ; carga 4 en contaC
movwf ContaC
MediaAD
call Retardo_20ms ; retardo de 20 ms
bcf PIR1,ADIF ; se borra el FLAG ADIF
bsf ADCON0,GO ; se da la orden de conversion
ADC_Wait btfss PIR1,ADIF ; esperar hasta que se realice la conversión
goto ADC_Wait
bsf STATUS,RP0 ; banco 1 de registros
movf ADRESL,W ; mueve ADRESL a W
bcf STATUS,RP0 ; banco 0 de registros
addwf ADRESL_Suma,F ; suma la conversion al total acumulado
movf ADRESH,W ; mueve ADRESH a W
btfsc STATUS,C ; comprueba si el resultado de la suma fue
; mayor de FF
addlw 0x01 ; si : suma 1 a W
addwf ADRESH_Suma,F ; no : suma normalmente el número al
; acumulado
decfsz ContaC,F ; decrementa contac y si es 0, sale
goto MediaAD
bcf STATUS,C ; banco 1 de registros
rrf ADRESH_Suma,F ; rota el total acumulado dos veces para
rrf ADRESL_Suma,F ; dividir por 4
bcf STATUS,C ; banco 0 de registros
rrf ADRESH_Suma,F ; rota el total acumulado dos veces para
rrf ADRESL_Suma,F ; dividir por 4
return
; ***********************************************************************************
; Subrutina Restashunt: le resta a la tensión el valor de la tensión que cae en la
; resistencia de 1 ohmio.
; como el valor de la tensión es 10 veces superior, resta las
; unidades de V con las decenas de A
; ***********************************************************************************
RestaShunt
movf DecenasI,W ; mueve decenas de intensidad a W
subwf BCD_Unidades,F ; se lo resta a las unidades de V
movf CentenasI,W ; mueve centenas de I a W
btfsc STATUS,C ; comprueba si el resultado de la resta fue
; menor de cero
goto RestaDecenas ; no: continua con la siguiente resta
movlw 0xF6 ; si: le resta F6 al número e incrementa las
subwf BCD_Unidades,F ; centenas de intensidad
incf CentenasI,W
RestaDecenas
subwf BCD_Decenas,F ; le resta las centenas de intensidad a las
; decenas de V
movf MilesI,W ; mueve los millares de intensidad a W
btfsc STATUS,C ; comprueba si el resultado de la resta fue
; menor de cero
goto RestaCentenas ; no: continua con la siguiente resta
movlw 0xF6 ; si: le resta F6 al número e incrementa los
subwf BCD_Decenas,F ; millares de intensidad
incf MilesI,W
RestaCentenas
subwf BCD_Centenas,F ; le resta los millares de intensidad a las
; centenas de V
btfsc STATUS,C ; comprueba si el resultado es menor de cero
return ; no: retorna
clrf BCD_Unidades ; si: la tensión menos la tensión en la
clrf BCD_Decenas ; resistencia nunca puede ser menor que
clrf BCD_Centenas ; cero. si se diera el caso, el valor de
clrf BCD_Miles ; la tensión como mínimo es cero
return ; retorno
; ***********************************************************************************
; Subrutina Convierte: toma el valor resultante de la conversión, lo multiplica
; por el tamaño del escalón del ADC, lo convierte a BCD y lo
; devuelve
;************************************************************************************
Convierte
movf ADRESH_Suma,w ; Mueve la parte alta de la conversion a
movwf DatoB_H ; DatoB_H
movf ADRESL_Suma,w ; Mueve la parte baja de la conversion a
movwf DatoB_L ; DatoB_L
movlw 0x0C ; tension de referencia = 3146 mV. Mueve primero
movwf DatoA_H ; la parte alta a DatoA_H
movlw 0x4A ; mueve la parte baja de la tensiónd de
movwf DatoA_L ; referencia a DatoA_L
call Mul16x16 ; Subrutina que multiplica DatoA por DatoB
movlw .10 ; carga 10 en temporal
movwf Temporal_1
BUCLE_V bcf STATUS,C ; rota a la derecha para dividir por 1024
rrf DatoD_H,F
rrf DatoD_L,F
rrf DatoC_H,F
rrf DatoC_L,F
decfsz Temporal_1,F ; decrementa temporal, y si llega a cero sale
goto BUCLE_V ; del bucle
movf DatoC_H,W ; mueve la parte alta a BCD_High
movwf BCD_High
movf DatoC_L,W ; la parte baja la mueve a W
call BIN_a_BCD ; hace la conversión a BCD
return
; ***********************************************************************************
; Subrutina Visualiza: se encarga de mostrar en el LCD los valores de tension e
; intensidad
; ***********************************************************************************
Visualiza bsf STATUS,RP0 ; banco 1 de registros
movlw b'00000110' ; configura las lineas del puertoA como
movwf ADCON1 ; digitales
bcf TRISA,0 ; RA0 y RA2 las configura como salidas
bcf TRISA,2
bcf STATUS,RP0 ; banco 0 de registros
call Retardo_20ms ; retardo de 20 ms
call LCD_Linea1 ; cursor al principio de la línea 1
; call LCD_UnEspacioBlanco
movf BCD_Miles,W ; comprueba si las decenas de Voltios son
btfsc STATUS,Z ; cero
goto NOMIL ; es cero : va a NOMIL
call LCD_Nibble ; no es cero: presenta las decenas en
; pantalla
goto SIMIL ; va a SIMIL
NOMIL call LCD_UnEspacioBlanco ; en lugar de las decenas pone un espacio
SIMIL movf BCD_Centenas,W ; mueve las unidades de voltio a W
call LCD_Nibble ; envia el caracter a la pantalla
movlw '.' ; representa el punto decimal
call LCD_Caracter
movf BCD_Decenas,W ; representa las décimas de voltio en la
call LCD_Nibble ; pantalla
movf BCD_Unidades,W ; representa las centésimas de voltio en la
call LCD_Nibble ; pantalla
movlw ' ' ; un espacio en blanco
Call LCD_Caracter
movlw 'V' ; símbolo del voltio
Call LCD_Caracter
Call LCD_DosEspaciosBlancos ; dos espacios en blanco para
; separar la intensidad
movf MilesI,W ; representa las unidades de amperios
call LCD_Nibble
movlw '.' ; punto decimal
call LCD_Caracter
movf CentenasI,W ; representa las décimas de amperio
call LCD_Nibble
movf DecenasI,W ; representa las centésimas de amperio
call LCD_Nibble
movf UnidadesI,W ; representa los miliamperios
call LCD_Nibble
call LCD_UnEspacioBlanco ; un espacio en blanco
movlw 'A' ; símbolo del amperio
call LCD_Caracter ; un espacio en blanco
call LCD_UnEspacioBlanco
Call LCD_Linea2 ; Se situa al comienzo de la línea 2
movlw Mensaje0 ; envia al LDC un mensaje personalizable
call LCD_Mensaje ; en la tabla Mensaje0
return
; ***********************************************************************************
Mensajes addwf PCL,F
Mensaje0 DT"Made by Alberto!" ,0x00 ; mensaje personalizable que se
; muestra en al linea 2 del LCD
INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <BIN_BCD_2.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <PRODUCTO16.INC>
END
; ***********************************************************************************
El problema es que me faltan los includes... este programa dicen que viene de la revista resistor fasciculo 225.
Es exactamente esto lo que preciso: voltimetro amperimetro con lcd 16 x 2 para ponerle a una fuente que armé.
Asi que si alguien se las ingenia para sacar esos archivos de ese tema que puse en el link se lo voy a agradecer eternamente.
muchas gracias a todos espero ayuda con el tema...