Microcontroladores - Termometro de monofgrafias.com

 
Vista:

Termometro de monofgrafias.com

Publicado por Terry Logan (1 intervención) el 13/04/2006 04:16:44
K tal gente.

Soy estudiante de ingenieria y hasta hace menos de un mes no sabia ni que era un pic....
y ahora es lo k me mantiene despierto (damm)

En fin, de proyecto de medio curso me pidieron que hiciera el siguiente Termometro digital:

http://www.monografias.com/trabajos15/termometro-digital/termometro-digital.shtml

Pero creo que trae varios errores.... ademas no trae la programacion del PIC y me he roto la cabeza con esto:

LIST p=16F84A ;TERMOMETRO CON LCD ya tengo mucho sueño

#define LEER bsf PORTA,0 ;Pone LCD en Modo LECTURA
#define ESCRIBE bcf PORTA,0 ;Pone LCD en Modo ESCRITURA
#define OFFC bcf PORTA,1 ;Desactiva RS (modo comando)
#define ONC bsf PORTA,1 ;Activa RS (modo datos)

PCL EQU 0x02 ;bloque de etiquetas y
STATUS EQU 0x03 ;variables
PORTA EQU 0x05
PORTB EQU 0x06
CONTA2 EQU 0x0C
CONTA3 EQU 0x0D
decena EQU 0x0E
unidad EQU 0x0F
nueve EQU 0x10
AUX EQU 0x11
DIR EQU 0x12
RESUL EQU 0x13

ORG 0
goto INICIO ;salta a INICIO

ORG 5
INICIO bsf STATUS,5 ; Banco 1, CONFIGURACION PARA EL TERMOMETRO
movlw b'00011'
movwf PORTA ; PUERTO A SALIDA
movlw h'ff'
movwf PORTB ; PUERTO B ENTRADA
bcf STATUS,5 ; Banco 0

movlw d'09' ; nueve = 9
movwf nueve

clrf AUX ;limpiar variables (=0)
clrf decena

bcf PORTA,2 ; habilita ADC
nop ; lectura del ADC
nop
nop
bcf PORTA,2 ; habilita ADC
nop
nop
nop
bcf PORTA,4 ; habilita conversion
call time

bsf PORTA,4
nop
nop
nop

bcf PORTA,3 ; habilita buffers de salida
nop
nop
nop
call time ; espera

movf PORTB,w ; lectura del ADC
movwf AUX ; la varriable AUX guarda el valor
; de la conversión

bsf PORTA,2 ; deshabilita buffers de salida
nop
nop
nop
bsf STATUS,5 ;Banco 1 , CONFIGURA LCD
clrf PORTB ;PUERTOB salida
movlw b'10000' ;PA4 = entrada
movwf PORTA ;PA0-PA3= salida
bcf STATUS,5 ;Banco 0
OFFC ;RS=0
bcf PORTA,2 ;Desactiva LCD
movlw b'00111000' ;INICIA LCD
call INSTRUC ;Codigo de instrucci¢n
call time ;Temporiza

movlw b'00000001' ;Borra LCD y Home
call INSTRUC
movlw b'00001100' ;LCD activado, cursor desactivado
call INSTRUC
movf AUX,w ;w = AUX
movwf unidad ; unidad = w

;DIVISION DEL NUMERO EN UNIDADES
ini movf unidad,0 ; Y DECENAS
subwf nueve,0
btfss STATUS,0 ; ¨ unidad > 9 ?
goto divide ; Si, salta a restar 10
goto numero ; No, visualiza el dato

divide movlw d'10'
subwf unidad,f ; unidad - 10 = unidad
incf decena,f ; decena = decena + 1
goto ini ; salta a ini

numero movlw 0x84 ; se visualizan las unidades en la
; posicion 84 de la 1ra linea
call INSTRUC ; Comando para el LCD
movlw b'00000110' ; Establece la direccion del cursor
call INSTRUC
movf unidad,w ; w = unidad
call DATOS ; obtiene el equivalente ASCII
call DATO ; visualiza el dato

movlw 0x83 ; se visualizan las decenas en la
; posicion 83 de la 1ra linea
call INSTRUC ; Comando para el LCD
movlw b'00000110' ; Establece la direccion del cursor
call INSTRUC
movf decena,w ; w = decena
call DATOS ; obtiene el equivalente ASCII
call DATO ; visualiza el dato

movlw 0x86 ; MENSAJE
call INSTRUC ; Comando para el LCD
movlw b'00000110' ; Establece la direccion del cursor
call INSTRUC
clrf DIR ; Direcci¢n del mensaje
clrf RESUL ; Inicializa contador de caracteres
MENSAJE movf DIR,w ; toma el desplazamiento
addwf RESUL,w ; Calcula el caracter a tomar
call DATOS1 ; obtiene el equivalente ASCII
iorlw 0 ;
btfsc STATUS,2 ; Comprueba si es el ultimo
goto FIN ; Si, salta a FIN
call DATO ; No, Visualiza el caracter
incf RESUL,f ; Incrementa contador de caracteres
goto MENSAJE ; salta a MENSAJE

FIN call time ; espera
call time
call time

goto INICIO ; vuelve para hacer nuevamente todo
; el proceso

DATOS addwf PCL,1 ; TABLA DE DATOS
retlw '0'
retlw '1'
retlw '2'
retlw '3'
retlw '4'
retlw '5'
retlw '6'
retlw '7'
retlw '8'
retlw '9'

DATOS1 addwf PCL,1 ; TABLA DE DATOS A VISUALIZAR
retlw h'DF' ; equivalente ASCII de ø
retlw 'C'
retlw 0x00

BUSY LEER ; Pone el LCD en Modo LECTURA
bsf STATUS,5
movlw H'FF'
movwf PORTB ; Puerto B como entrada
bcf STATUS,5 ; Selecciona el banco 0
bsf PORTA,2 ; activa LCD
nop
BUSY1 btfsc PORTB,7 ; Checa bit de Busy
goto BUSY1
bcf PORTA,2 ; Desactiva LCD
bsf STATUS,5
clrf PORTB ; Puerto B salida
bcf STATUS,5
ESCRIBE ; Pone LCD en modo ESCRITURA
return

ACTIVA bsf PORTA,2 ; Activa LCD
nop
nop
nop
bcf PORTA,2 ; Desactiva LCD
nop
nop
nop
return

DATO OFFC ; Desactiva RS (modo comando)
movwf PORTB ; Valor ASCII a sacar por PUERTOB
call BUSY ; Espera a que se libere el LCD
ONC ; Activa RS (modo dato)
call ACTIVA ; Habilitacion del LCD
return

INSTRUC OFFC ; Desactiva RS (modo comando)
movwf PORTB ; Codigo de comando
call BUSY ; LCD libre?
call ACTIVA ; Si, Genera pulso de E.
return
time movlw 0x99
movwf CONTA3 ; CONTA3 = 0x99
movwf CONTA2 ; CONTA2 = 0x99
DEL1 decf CONTA2,f ; CONTA2 - 1
DEL2 decf CONTA3,f ; CONTA3 - 1
nop
nop
movf CONTA3,1 ; Se actualiza Z
btfss STATUS,2 ; Explora Z y si vale 1 se produce
goto DEL2 ; "brinco"
movf CONTA2,1 ; Se actualiza Z
btfss STATUS,2 ; Explora Z y si vale 1 se produce
goto DEL1 ; "brinco"
return
END

El caso es que segun la configuracion que aparece en el diagrama tiene conecciones que no he visto que sean usadas normalmente en otros trabajos con el 16f84

ya lo tengo armado EXACTAMENTE como aparece el diagrama, ahora necesito saber si hay algun error en la programacion para saber si esto funcionara.

GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Termometro de monofgrafias.com

Publicado por felipe (1 intervención) el 03/06/2006 22:22:58
Tambien soy estudiante de Ingenieria y me interesa el manejo del Ds18s20, me podrias facilitar pautas para su manejo mediante el micro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar