;############################################################# ; Fichero : ATERMO12.asm ; Autor : Luis A. Mart¡nez Berzosa. ; Fecha: fEBRERO 2001. ; Versi¢n:0.0 ; Sistema RAD-MICROS. ; Placa Microcontroladora: micro-p1684. ; Placa de Aplicaciones: apli-tdigital. ; Placa de programaci¢n: prog-wisp. ; Bus: bus-40. ; C¢digo para: PIC16C84 y PIC16F84 ; Clock: 4MHz , XT. -> Ciclo = 1 uS. ; Reset: Power On Reset. ; Watch dog: Inhabilitado. ; Protecci¢n de c¢digo: Inhabilitado. ; Ficheros requeridos: H16F84A.inc, LCD1602.inc ; Funci¢n : Genera un TERMàMETRO DIGITAL en un LCD. ;############################################################# LIST p=PIC16F84A ; Directiva para definir micro. #include ; Fichero st ndard de cabezera. __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;#################### 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 ; Fichero de rutinas LCD. ;*********TABLA DE VALORES DE TEMPERATURA.******************* ;************************************************************ ;Rutina: TABLA ;Funcion: Tabla con los valores de la temperatura para representar en el LCD. ;Entradas: W. ;Salidas: W. ;Variables utilizadas: Ninguna. ;************************************************************ 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.********************** ;************************************************************* ;Rutina: TEMPO1 ;Funcion: Retardo para la correcta lectura del ADC con 2 contadores en decimal ; de 255 y 40 respectivamente. ;Entradas: Ninguna. ;Salidas: Ninguna. ;Variables utilizadas: CONTA3,CONTA4 ;************************************************************* 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.************* ;************************************************************ ;Rutina: BCDT ;Funcion: Convierte los valores analogicos de temperatura a digitales para ; separar las decenas de las unidades y convertirlo en valor ASCI. ;Entradas: TEMPERATURA, ASCI. ;Salidas: UNIT, DECT. ;Variables utilizadas: Ninguna. ;************************************************************ 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