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