Está en la página 1de 2

; acoplan un sensor en c0, si la frecuncia es de 6300

hz la humedad corresponde al 100%, si la frecuencia


es de 7300 hz la humedad es del 0%
la frecuencia es valida si se encuentra entre 6300 7300 hz se debe visualizar en la pantalla lcd
:
frecuencia de entrada y calculo humedad

Convertidor A/D lcd 4filas - con lm35


include <P16F877A.INC>
CBLOCK .32
AUX_XY
AUX_XZ
ENDC
ORG 00H
GOTO INICIO

include <P16F877A.INC>

CBLOCK .32
AUX_XY
AUX_XZ
COMANDO
ENDC
ORG 00H
GOTO INICIO

CONVER
BSF
STATUS,RP0
BCF
STATUS,RP1
MOVLW B'10001110'; B0-B3 CONF CANALESD A/D Y VREF
;LO ANTERIOA ES A0 ANALOGO
;B4_B6: NO IMPLEMENTADO
;B7=1, 6 BITS DE > PESO EN ADRESSH SON IGUALES A 0
MOVWF
ADCON1
BCF
STATUS,RP0
CALL
RETARDO_20MICROS
BSF
ADCON0,2;ADCON0,GO = INICIA

INICIO
BSF
BCF
MOVLW
MOVWF
MOVLW
PREESCALER AL WDT
MOVWF
;
MOVLW
MOVWF
CLRF
;
MOVLW
;
MOVWF
BCF
MOVLW
MOVWF

STATUS,RP0
STATUS,RP1
D'6'
ADCON1
B'00111000' ; POR FLANCO DESCENDENTE,
OPTION_REG
B'00000001'
TRISC
TRISD
B'00010000'
TRISA
STATUS,RP0
B'00000111' ; EL B0 HABILITAR EL TMR1
T1CON

CLRF
goto
-------------------MOST
MOVLW
MOVWF mulcnd
MOVLW
MOVWF mulplr

COMANDO

dfgh
.250
.25

MOS
CALL
CALL
CALL
CALL
CALL
MOVLW
MOVWF mulcnd

.250

MOVLW
MOVWF mulplr

.25

INICIAR_PANTALLA
LCD_BORRA
LCD_CURSOR_INCREMENTO
LCD_CURSOR_OFF
LCD_LINEA1

CALL

Multip

MOVF
MOVWF
MOVF
MOVWF
CALL decdatohh
MOVF digh0,W
ADDLW
CALL
MOVF digh1,W
ADDLW
CALL
MOVF digh2,W
ADDLW
CALL
MOVF digh3,W
ADDLW
CALL
CALL
GOTO

l_byte,W
datol
h_byte,W
datoh

MOVLW
MOVWF
CALL

D'48'
LCD_ENVIA_CARACTER
D'48'
LCD_ENVIA_CARACTER
D'48'
LCD_ENVIA_CARACTER
D'48'
LCD_ENVIA_CARACTER
RETARDO_1S
MOS

B'10001000'
INTCON
ESPERAR_QUITAR_DEDO

dfgh
CALL
INICIAR_PANTALLA
CALL
LCD_BORRA
CALL LCD_CURSOR_INCREMENTO
CALL
LCD_CURSOR_OFF
CALL
LCD_LINEA1
MOVLW 'H'
CALL
LCD_ENVIA_CARACTER
MOVLW 'U'
CALL
LCD_ENVIA_CARACTER
MOVLW 'M'
CALL
LCD_ENVIA_CARACTER
MOVLW 'E'
CALL
LCD_ENVIA_CARACTER
MOVLW 'D'
CALL
LCD_ENVIA_CARACTER
MOVLW 'A'
CALL
LCD_ENVIA_CARACTER
MOVLW 'D'
CALL
LCD_ENVIA_CARACTER
MOVLW ':'
CALL
LCD_ENVIA_CARACTER
MOSTRAR_DATO_LCD
CALL
LCD_LINEA2
CLRF TMR1L
CLRF TMR1H
CALL
RETARDO_1S
MOVF
TMR1L,W
MOVWF AUX_XY
MOVF
TMR1H,W
MOVWF AUX_XZ

CALL
MOVF
MOVWF
MOVF
MOVWF
CALL decdatohh
MOVF digh0,W
SUBLW
BTFSS
GOTO
CLRF
movlw
addwf

LCD_LINEA3
AUX_XY,W
datol
AUX_XZ,W
datoh

MOVF
MOVWF mulcnd
MOVLW
MOVWF mulplr
CALL
MOVF h_byte ,W
MOVWF AUX1
MOVF l_byte ,W
MOVWF AUX2

digh1

MOVF digh2,W
MOVWF mulcnd
MOVLW
MOVWF mulplr
CALL
MOVF l_byte ,W
MOVWF AUX3
MOVF
ADDWF
ADDWF
MOVF
;

.100
Multip

.10

NOP
NOP
NOP
NOP
NOP
ESPERAR_CONVERSION
BTFSC
ADCON0,2; TERMINO DE CONVERTIR?
GOTO
ESPERAR_CONVERSION
;YA TERMINA SE PUIEDEN LEER LOS RESULTADOS
MOVF
ADRESH, W
MOVWF datoh
BSF
STATUS,RP0
BCF
STATUS,RP1
MOVF
ADRESL,W
BCF
STATUS,RP0
MOVWF
datol
RETURN
INICIO
BSF
STATUS,RP0
BCF
STATUS,RP1
MOVLW D'14' ; solo A0 es analogo
MOVWF
ADCON1
clrf
TRISC
CLRF
TRISD
MOVLW B'000001101'
MOVWF TRISA
BCF
STATUS,RP0

CALL
INICIAR_PANTALLA
CALL
LCD_BORRA
CALL
LCD_CURSOR_INCREMENTO
CALL
LCD_CURSOR_OFF
CALL
LCD_LINEA1
MOVLW 'T'
CALL
LCD_ENVIA_CARACTER
MOVLW 'E'
CALL
LCD_ENVIA_CARACTER
MOVLW 'M'
CALL
LCD_ENVIA_CARACTER
MOVLW 'P'
CALL
LCD_ENVIA_CARACTER
MOVLW 'E'
CALL
LCD_ENVIA_CARACTER
MOVLW 'R'
CALL
LCD_ENVIA_CARACTER
MOVLW 'A'
CALL
LCD_ENVIA_CARACTER
MOVLW 'T'
CALL
LCD_ENVIA_CARACTER
MOVLW 'U'
CALL
LCD_ENVIA_CARACTER
MOVLW 'R'
CALL
LCD_ENVIA_CARACTER
MOVLW 'A'
CALL
LCD_ENVIA_CARACTER
MOVLW ':'
CALL
LCD_ENVIA_CARACTER
MOSTRAR_DATO_LCD
CALL
LCD_LINEA2
; LEER EL CANAL 0
MOVLW B'10000001'
;B0=1 ENCIENDE MODULO AD ;B1=X NO IMPLEMENTADO
;B2=0 NO INICIE CONVERTIDOR ; B3-B5= SELECCION A0
;B6-B7=FREC CONVER (1:32)
MOVWF
ADCON0
CALL
CONVER
CALL
decdatohh; calcula millar,centena,decena y
unidad
; requiere valores en datol y datoh
MOVF digh0,W ;digh0 =millar
ADDLW D'48' ;
CALL
LCD_ENVIA_CARACTER
MOVF digh1,W;digh1 =centena
ADDLW D'48'
CALL
LCD_ENVIA_CARACTER
MOVF digh2,W; ;digh2 =decena
ADDLW D'48'
CALL
LCD_ENVIA_CARACTER
MOVF digh3,W ; ;digh3 =unidad
ADDLW D'48'
CALL
LCD_ENVIA_CARACTER

CALL LCD_LINEA3
MOVF ADRESH,W
MOVWF
dividendoh
BSF
STATUS,RP0
Movf
ADRESL,W
BCF
STATUS,RP0
MOVWF dividendol
movlw d'2'
movwf divisor
CALL
divi1
movf cocienteh,w
movwf datoh
movf cocientel,w
movwf datol

CALL

decdatohh; calcula millar,centena,decena y

unidad
; requiere valores en datol y datoh
MOVF digh0,W ;digh0 =millar
ADDLW D'48' ;
CALL
LCD_ENVIA_CARACTER
MOVF digh1,W;digh1 =centena
ADDLW D'48'
CALL
LCD_ENVIA_CARACTER
MOVF digh2,W; ;digh2 =decena
ADDLW D'48'
CALL
LCD_ENVIA_CARACTER
MOVF digh3,W ; ;digh3 =unidad
ADDLW D'48'
CALL
LCD_ENVIA_CARACTER

CALL
GOTO

INCLUDE <P16F877.INC>
CBLOCK
.32
CONTADOR
CONTADOR2
BH
BL
ENDC
#DEFINE DCEN PORTC,0
#DEFINE DDEC PORTC,1
#DEFINE DUNI PORTC,2
ORG
00H
GOTO INICIO
TABLA_7SEG_ANODO
ADDWF
RETLW B'11000000';0
RETLW B'11111001';1
RETLW B'10100100';2
RETLW B'10110000';3
RETLW B'10011001';4

RETLW
RETLW
RETLW
RETLW
RETLW

B'10010010';5
B'10000011';6
B'11111000';7
B'10000000';8
B'10011000';9

CONVERSION
BSF
STATUS,RP0
BCF
STATUS,RP1
MOVLW B'10001110'
MOVWF
ADCON1
BCF
STATUS,RP0
BSF
ADCON0,2
CALL
RETARDO_20MICROS
ESPERAR_CONVERSION
BTFSC ADCON0,2
GOTO ESPERAR_CONVERSION
;SALTA A ESTE PUNTO UNA VEZ TERMINA
; LUEGO YA PUEDO LEER ADRESSH Y ADRESSL
; COMO EXISTE UNA SUBRUTINA
;QUE CALUCULA MILLAR,CENTENA,DECENA Y UNIDAD
; EL RESULTADO LO ASIGNAMOS A BH Y BL
;BH<-- ADRESSH
;BL<-- ADRESSL
MOVF
ADRESH,W
MOVWF BH
BSF
STATUS,RP0
BCF
STATUS,RP1
MOVF
ADRESL,W
BCF
STATUS,RP0
MOVWF BL
BCF
ADCON0,0;APAGA EL MODULO A/D
RETURN

INICIO
BSF
STATUS,RP0
BCF
STATUS,RP1
;SOLO REQUIERO A0 SEA ANALOGO
MOVLW D'14'
MOVWF
ADCON1
MOVLW B'00000001'
MOVWF TRISA
CLRF
TRISB
CLRF
TRISC
BCF
STATUS,RP0

BSF
DCEN
BSF
DDEC
BSF
DUNI
MOVLW D'0'
MOVWF PORTB
LEER_TEMPERATURA
; LO PRIMERO ES CONFIGURAR ADCON0
MOVLW B'10000001'
MOVWF
ADCON0
CALL
CONVERSION
; EL RESULTADO BAJO LO TINE BL
; ES NECESARIO CALCULAR:CEN,DEC,UNI

; SI DIVIDO ENTRE DOS SE APROXIMA A LA TEMPERATURA


;REAL, PARA ELLO ROTA A DERECHA U CARRY DEBE SER 0
BCF
STATUS,C
RRF
BL,F
MOVF
BL,W
CALL BIN_CDU

RETARDO_1S
MOSTRAR_DATO_LCD

INCLUDE <MATEMATICAS.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <LCD_8BIT_4F.INC>
END

digh3,W
RETARDO_1S
MOSTRAR_DATO_LCD
digh0,W

INCLUDE
INCLUDE
INCLUDE
INCLUDE
INCLUDE
END

PCL,F

RETARDO_20MICROS ;2 CM
MOVLW
D'4'
;
1CM
MOVWF
CONTADOR;1CM =K
CICLO_INT
NOP
;K
DECFSZ
CONTADOR,F;(K-1)+2
GOTO
CICLO_INT; (K-1)*2
RETURN
;2CM
; 4+K+K+1+2K-2+2=5+4K
; SI DESEA 20 MICROS k DEBE SER 4
RETARDO_10MS ;2CM
MOVLW D'100' ;1CM
MOVWF
CONTADOR;1CM CONTADOR= k
CICLO_EXT_10MS
MOVLW D'24'
;K VECES
MOVWF CONTADOR2;CONTADOR2=T ;K VECES
CICLO_INT_10MS
NOP
;KT
DECFSZ
CONTADOR2,F ; ((T-1)+2)K=TK+K
GOTO
CICLO_INT_10MS; ((T-1)*2)k=2TK-2K
DECFSZ
CONTADOR,F ;(K-1)+2=K+1
GOTO
CICLO_EXT_10MS ; (K1)*2=2K-2
RETURN ;2CM
;4+2K+KT+KT+K+2KT-2K+K+1+2K-2+2
;=5+4K+4KT SI K=100 ENTONCES =5+400+400T
;10000-405=400T
9595/400=T T=24
; TIEMPO=5+400+400*24=405+9600=10005

Multip

AUX2,W
AUX3,W

CALL
GOTO
MOVF

.7
STATUS,Z
RES6
digh0
.2
digh1,f

CONVERSION

LM35 CON TRES DISPLAY

<RETARDOS.INC>
<LCD_8BIT_4F.INC>
<MATEMATICAS.INC>
<TECLADO.INC>
<EEPROM.INC>

MOVF CEN,W
CALL
MOVWF
BCF
BSF
BSF
CALL

TABLA_7SEG_ANODO
PORTB
DCEN
DDEC
DUNI
RETARDO_10MS

MOVF DEC,W
CALL
MOVWF
BSF
BCF
BSF
CALL

TABLA_7SEG_ANODO
PORTB
DCEN
DDEC
DUNI
RETARDO_10MS

MOVF UNI,W
CALL
MOVWF
BSF
BSF
BCF
CALL

TABLA_7SEG_ANODO
PORTB
DCEN
DDEC
DUNI
RETARDO_10MS

GOTO LEER_TEMPERATURA

INCLUDE <MATEMATICAS.INC>
END

También podría gustarte