Autor Tema: PROBLEMA CON TERMOMETRO DIGITAL CON PIC 16F84  (Leído 5736 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ma77ias

  • PIC10
  • *
  • Mensajes: 5
PROBLEMA CON TERMOMETRO DIGITAL CON PIC 16F84
« en: 19 de Octubre de 2008, 02:12:26 »
HOLA! soy nuevo en esto pero necesito ayuda con este proyecto. Este programa esta en .asm es un termometro digital controlado por un PIC 16F84 con un rango de medida de -10ºC a +40ºC, que presenta la temperatura sobre una pantalla de cristal líquido (LCD) de dos filas y dieciséis columnas.
 Mi problema es que cuando lo pruebo con el soft PIC simulator IDE de da error en:
CALL        LCD_INI    ;
------------------
CALL        LCD_REG ;
------------------
XORWF   UNIT

   Si alguno sabe por qué ,por favor que lo comente...y si tine tiempo para probarlo mejor! :)
   Para mas informacion sobre el circuito el link: http://www.iesleonardo.info/ele/pro/CURSO%202001-2002/p02-luis/

;#################### DEFINICIONES ###########################

Lcd_var      EQU   0X10      
CONTA1      EQU   0X08
CONTA2      EQU   0X09
ASCI            EQU     0X12
CONTA3      EQU   0X20
CONTA4      EQU   0X21
TEMPERATURA   EQU   0X24
UNIT      EQU   0X25
DECT      EQU   0X26
DIEZ            EQU     0X27
UNO             EQU     0X28
UNI             EQU     0X29
;################ COMIENZO DEL PROGRAMA  #####################
                                
                ORG     0X00    
                GOTO    INICIO                                                                          

;################ PROGRAMA PRINCIPAL #########################
                ORG   0X05
                #include <LCD1602.inc>        ; Fichero  de rutinas LCD.

;*********TABLA DE VALORES DE TEMPERATURA.*******************
TABLA           ADDWF   PCL,F           ;SUMA W A PCL
                RETLW   B'10000011'     ;- 3°C POS.0
                RETLW   B'10000010'     ;- 2°C POS.1
                RETLW   B'10000001'     ;- 1°C POS.2
                RETLW   B'00000000'     ;  0°C POS.3
                RETLW   B'00000001'     ;+ 1°C POS.4
                RETLW   B'00000010'     ;+ 2°C POS.5
                RETLW   B'00000011'     ;+ 3°C POS.6
                RETLW   B'00000100'     ;+ 4°C POS.7
                RETLW   B'00000101'     ;+ 5°C POS.8
                RETLW   B'00000110'     ;+ 6°C POS.9
                RETLW   B'00000111'     ;+ 7°C POS.10
                RETLW   B'00001000'     ;+ 8°C POS.11
                RETLW   B'00001001'     ;+ 9°C POS.12
                RETLW   B'00001010'     ;+10°C POS.13
                RETLW   B'00001011'     ;+11°C POS.14
                RETLW   B'00001100'     ;+12°C POS.15
                RETLW   B'00001101'     ;+13°C POS.16
                RETLW   B'00001110'     ;+14°C POS.17
                RETLW   B'00001111'     ;+15°C POS.18
                RETLW   B'00010000'     ;+16°C POS.19
                RETLW   B'00010001'     ;+17°C POS.20
                RETLW   B'00010010'     ;+18°C POS.21
                RETLW   B'00010011'     ;+19°C POS.22
                RETLW   B'00010100'     ;+20°C POS.23
                RETLW   B'00010101'     ;+21°C POS.24
                RETLW   B'00010110'     ;+22°C POS.25
                RETLW   B'00010111'     ;+23°C POS.26
                RETLW   B'00011000'     ;+24°C POS.27
                RETLW   B'00011001'     ;+25°C POS.28
                RETLW   B'00011010'     ;+26°C POS.29
                RETLW   B'00011011'     ;+27°C POS.30
                RETLW   B'00011100'     ;+28°C POS.31
                RETLW   B'00011101'     ;+29°C POS.32
                RETLW   B'00011110'     ;+30°C POS.33
                RETLW   B'00011111'     ;+31°C POS.34
                RETLW   B'00100000'     ;+32°C POS.35
                RETLW   B'00100001'     ;+33°C POS.36
                RETLW   B'00100010'     ;+34°C POS.37
                RETLW   B'00100011'     ;+35°C POS.38
                RETLW   B'00100100'     ;+36°C POS.39
                RETLW   B'00100101'     ;+37°C POS.40
                RETLW   B'00100110'     ;+38°C POS.41
                RETLW   B'00100111'     ;+39°C POS.43
                RETLW   B'00101000'     ;+40°C POS.44
                RETLW   B'00101000'     ;+40°C POS.45
                RETLW   B'00101000'     ;+40°C POS.46
                RETLW   B'00101000'     ;+40°C POS.47
                RETLW   B'00101000'     ;+40°C POS.48
                RETLW   B'00101000'     ;+40°C POS.49
                RETLW   B'00101000'     ;+40°C POS.50
      
      RETURN         ;RETORNA DE LA SUBRUTINA.

;*************** INICIALIZACION DEL PROGRAMA.*****************
               
INICIO      BSF     STATUS,RP0      ;PONEMOS LOS PUERTOS A Y B COMO SALIDAS,
                CLRF    TRISB          
                CLRF    TRISA          
                BCF      STATUS,RP0
                MOVLW   B'00110000'     ;INTRODUCIMOS EL N§ '00110000' EN EL REGISTRO
                MOVWF   ASCI            ;ASCI.
                CALL    LCD_INI         ;INICIALIZAMOS EL DISPLAY LCD.

      MOVLW   B'00001100'   ;DISPLAY LCD SIN PARPADEO Y SIN CURSOR.
      CALL   LCD_REG
      
      MOVLW   0X80      ;VISUALIZACION DE LA FRASE "LA TEMPERATURA"
      CALL   LCD_REG      ;EN LA PRIMERA LINEA DEL DISPLAY LCD MEDIANTE
      MOVLW   'L'      ;LAS ORDENES LCD_REG Y LCD_DATO DEL ARCHIVO
                CALL    LCD_DATO        ;LCD1602.INC.
      MOVLW   'A'
      CALL   LCD_DATO
      MOVLW   ' '
      CALL   LCD_DATO
      MOVLW   'T'
      CALL   LCD_DATO
      MOVLW   'E'
      CALL   LCD_DATO
      MOVLW   'M'
      CALL   LCD_DATO
      MOVLW   'P'
      CALL   LCD_DATO
      MOVLW   'E'
      CALL   LCD_DATO
      MOVLW   'R'
      CALL   LCD_DATO
      MOVLW   'A'
      CALL   LCD_DATO
      MOVLW   'T'
      CALL   LCD_DATO
      MOVLW   'U'
      CALL   LCD_DATO
      MOVLW   'R'
      CALL   LCD_DATO
      MOVLW   'A'
      CALL   LCD_DATO

      MOVLW   0XC0      ;VISUALIZACION DE LA FRASE "ES DE: +00°C"
      CALL   LCD_REG      ;EN LA SEGUNDA LINEA DEL DISPLAY LCD MEDIANTE
      MOVLW   'E'      ;LAS ORDENES LCD_REG Y LCD_DATO DEL ARCHIVO
      CALL   LCD_DATO   ;LCD_CXX.INC.
      MOVLW   'S'
      CALL   LCD_DATO
      MOVLW   ' '
      CALL   LCD_DATO
      MOVLW   'D'
      CALL   LCD_DATO
      MOVLW   'E'
      CALL   LCD_DATO
      MOVLW   ':'
      CALL   LCD_DATO
      MOVLW   ' '
      CALL   LCD_DATO
      MOVLW   '+'
      CALL   LCD_DATO
      MOVLW   '0'
      CALL   LCD_DATO
      MOVLW   '0'
      CALL   LCD_DATO
      MOVLW   B'11011111'
      CALL   LCD_DATO
      MOVLW   'C'
      CALL   LCD_DATO

;*************** COMIENZO DEL PROGRAMA PRINCIPAL.*************

PRINCIPAL   MOVLW   B'00011000'   ;DESHABILITACION DEL DISPLAY Y EL ADC.
      MOVWF   PORTA

      CALL   TEMPO1      ;TEMPORIZACIONES PARA EL BUEN FUNCIONAMIENTO
      CALL   TEMPO1      ;DEL ADC.
      CALL   TEMPO1
      CALL   TEMPO1
      CALL   TEMPO1

      BSF     STATUS,RP0    ;PUERTO B COMO ENTRADAS PARA RECIBIR DATOS,
      MOVLW   B'11111111'   ;HABILITACION DEL ADC COMO LECTURA.
      MOVWF   TRISB
      BCF     STATUS,RP0
      MOVLW   B'00010000'
      MOVWF   PORTA

      CALL   TEMPO1      ;TEMPORIZACION PARA TERMINAR DE REALIZAR
      CALL   TEMPO1      ;LA LECTURA EL ADC.
      CALL   TEMPO1
      CALL   TEMPO1
      CALL   TEMPO1   

      MOVLW   B'00000000'   ;HABILITACION DE LA ESCRITURA DEL ADC.
      MOVWF   PORTA

      CALL   TEMPO1      ;TEMPORIZACION PARA TERMINAR DE REALIZAR
      CALL   TEMPO1      ;LA ESCRITURA DEL ADC.
      CALL   TEMPO1
      CALL   TEMPO1
      CALL   TEMPO1   

      MOVF   PORTB,W      ;RECOGIDA DE DATOS DEL ADC, LLAMADA A TABLA
      CALL   TABLA      ;PARA LA CONVERSION DE DATOS Y ALMACENAJE DE
      MOVWF   TEMPERATURA   ;ESTOS DATOS EN REGISTRO TEMPERATURA.

      BSF     STATUS,RP0    ;PUERTO B COMO SALIDAS, DESHABILITACION DEL ADC
      CLRF   TRISB        ;Y HABILITACION DEL DISPLAY LCD.
                BCF      STATUS,RP0
      MOVLW   B'00011100'   
      MOVWF   PORTA

      BTFSS   TEMPERATURA,7   ;PREGUNTA SI EL DATO ES POSITIVO O
      GOTO   POSITIVO   ;NEGATIVO CON EL BIT 7 DEL REGISTRO TEMPERATURA.
      GOTO   NEGATIVO

POSITIVO   MOVLW   0XC7      ;MANDA EL SIGNO '+' A LA POSICION 0XC7
      CALL   LCD_REG      ;DEL DISPLAY LCD Y SALTA A LA POSICION
      MOVLW   '+'      ;FINT.
      CALL   LCD_DATO
      GOTO   FINT

NEGATIVO   BCF   TEMPERATURA,7   ;PONE A CERO EL BIT 7 DEL REGISTRO TEMPERATURA
      MOVLW   0XC7      ;Y MANDA EL SIGNO '-' A LA POSICION 0XC7
                CALL    LCD_REG         ;DEL DISPLAY LCD.
                MOVLW   '-'            
      CALL   LCD_DATO
                            
FINT      CALL   BCDT      ;LLAMA A LA SUBRUTINA DE CONVERSION A BCD.

      MOVLW   0XC9      ;ESCRIBE EL DATO DEL REGISTRO UNIT EN LA
      CALL   LCD_REG      ;POSICION 0XC9 DEL DISPLAY LCD.
                MOVF    UNIT,W
      CALL   LCD_DATO

      MOVLW   0XC8      ;ESCRIBE EL DATO DEL REGISTRO DECT EN LA
      CALL   LCD_REG      ;POSICION 0XC8 DEL DISPLAY LCD.
      MOVF   DECT,W
      CALL   LCD_DATO

      GOTO   PRINCIPAL   ;SALTA A LA POSICION PRINCIPAL.

;******************** SUBRUTINA TEMPO1.**********************
            
TEMPO1          MOVLW   .255            ;SUBRUTINA DE TEMPORIZACION MEDIANTE
      MOVWF   CONTA3      ;DOS CONTADORES CARGADOS CON LOS NUMEROS
                MOVLW   .40             ;EN DECIMAL 255 Y 40 RESPECTIVAMENTE.
      MOVWF   CONTA4      
               
BUCLE3      DECFSZ   CONTA3,1   
      GOTO   BUCLE3      
               
BUCLE4      DECFSZ   CONTA4,1   
      GOTO   BUCLE3      
      RETURN         
            
;************ CONVERSION A BCD DE LA TEMPERATURA.*************

;************************************************************

BCDT      CLRF   UNIT      ;SUBRUTINA QUE CONVIERTE EL VALOR EN
                CLRF    DECT            ;BINARIO DE UN REGISTRO A BCD.
                MOVLW   B'00001010'     ;VARIABLE DIEZ=10.
                MOVWF   DIEZ            
                MOVLW   B'00000001'     ;VARIABLE UNO=1.
                MOVWF   UNO
                GOTO    DOS
PRINCI          INCF    DECT,F          ;INCREMENTAMOS DECT EN 1 POR CADA
DOS             MOVF    TEMPERATURA,W   ;DECENA DE TEMPERATURA.
TRES            MOVWF   UNI              
                MOVF    DIEZ,W
                SUBWF   TEMPERATURA,F   ;RESTAMOS 10 A LA TEMPERATURA PARA
                BTFSC   STATUS,C        ;SEPARAR LAS DECENAS DE LAS UNIDADES.
                GOTO    PRINCI
                GOTO    CUATRO
CINCO           INCF    UNIT,F          ;INCREMENTAMOS UNIT EN 1 POR CADA
CUATRO          MOVF    UNO,W           ;UNIDAD DE TEMPERATURA.
                SUBWF   UNI,F           ;RESTAMOS 1 A LAS UNIDADES PARA SABER
                BTFSC   STATUS,C        ;LAS UNIDADES.
                GOTO    CINCO
                MOVF    ASCI,W          ;CONVERTIMOS EL VALOR DE UNIT A ASCI.
                XORWF   UNIT
                MOVF    ASCI,W          ;CONVERTIMOS EL VALOR DE DECT A ASCI.
                XORWF   DECT
                RETURN
;################ FIN PROGRAMA PRINCIPAL #####################
                END                     ; Fin de programa



Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: PROBLEMA CON TERMOMETRO DIGITAL CON PIC 16F84
« Respuesta #1 en: 19 de Octubre de 2008, 02:21:11 »
no se si el PSI sea bueno para simular tu codigo, seria mejor que lo compilaras y probaras el Hex en Proteus parace mas confiable para la simulacion.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado sandra

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 374
Re: PROBLEMA CON TERMOMETRO DIGITAL CON PIC 16F84
« Respuesta #2 en: 19 de Octubre de 2008, 16:08:43 »
Te puedo decir que fiarse de la simulación no es  nada recomendable  por experiencia personal hay veces que te rompes la cabeza checando código en la simulación y cuando por fin se te ocurre probar el circuito físicamente funcionan muy bien.
Nunca te fíes  al 100% de los sof de simulación por que únicamente  “simulan” un circuito.
Incluso hay muchas veces que en la simulación corre  bien y en el cto.real falla
Toma la simulación únicamente como una herramienta más pero nunca te fíes del todo.
El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado calvin1000

  • PIC10
  • *
  • Mensajes: 1
Re: PROBLEMA CON TERMOMETRO DIGITAL CON PIC 16F84
« Respuesta #3 en: 30 de Mayo de 2009, 11:10:33 »
amigo soy novato pero he tenido varias experiencias con programas de termometros y creo q te falta el include del lcd

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: PROBLEMA CON TERMOMETRO DIGITAL CON PIC 16F84
« Respuesta #4 en: 03 de Septiembre de 2010, 12:19:19 »
Yo cuando algun programa no me funciona, lo que hago es probar las rutinas por separado. Proba de mostrar un dato en el display, el error puede estar en el display o la configuracion de la simulacion.


 

anything