;Termometro.asm ;programa para leer temperatura con DS18S20 mediante la ;subrutina "Tempe" que se encuentra en el archivo ;Tempera1.inc processor 16f84 include __config _XT_OSC & _WDT_OFF & _PWRTE_ON CBLOCK 0XC Digito1 Digito2 Punto Digito3 ENDC #DEFINE BANCO0 BCF STATUS,RP0 #DEFINE BANCO1 BSF STATUS,RP0 #DEFINE RS PORTA,1 #DEFINE EN PORTA,2 #DEFINE PUERTO PORTB eight equ H'38' ;constantes usadas en LCD clear equ H'01' home equ H'03' cursor equ H'0F' renglon1 equ H'80' renglon2 equ H'C0' SinCurso equ H'0c' LCD MACRO ;INICIALIZA LCD BANCO1 bcf RS bcf EN movlw 0x0 movwf PUERTO BANCO0 bcf RS bcf EN movlw eight ;envía 5 comandos call puco movlw clear call puco movlw home call puco movlw cursor call puco movlw renglon1 call puco ENDM SEGREN MACRO ;inicializa lcd para BANCO1 ;segundo renglon bcf RS bcf EN movlw 0x0 movwf PUERTO BANCO0 bcf RS bcf EN movlw eight call puco movlw SinCurso ;sin cursor call puco movlw renglon2 call puco ENDM org 0 goto Inicio Mensaje addwf PCL,F MenTe DT "TEMPE =",0X00 Grado DT h'd6',"C" ,0X00 ;caracteres °, y C ;0xd6 = 214 Inicio btfsc R_Band,2 goto SeRe LCD goto Salud SeRe SEGREN Salud call Tempe call Desple goto cabo Desple LCD movlw MenTe call LCDMen SEGREN btfsc R_Band,0 ; es Neg? goto EsPos EsNeg movlw menos call puda EsPos ;movf R_Cen,w ;movwf PORTB ;call puda Decenas movf Digito1,w movwf PORTB call puda Unidade movf Digito2,w movwf PORTB call puda btfsc R_Band,1 ;si esta bandera es 1 hay fraccion call DeFrac goto Nomas DeFrac movlw punto ;se pone solo si hay fraccion call puda movfw Digito3 ;si existe es un 5 call puda movlw blanco call puda movlw Grado call Celsius return Nomas movlw blanco call puda movlw blanco call puda movlw blanco call puda movlw Grado call Celsius return LCDMen movwf R_Apunta movlw Mensaje subwf R_Apunta,f decf R_Apunta,f OtroCar movf R_Apunta,w call Mensaje movwf R_Valor movf R_Valor,f btfsc STATUS,Z goto FinMen NoUlti call puda incf R_Apunta,f goto OtroCar FinMen return Celsius movwf R_Apunta movlw Mensaje subwf R_Apunta,f decf R_Apunta,f Mas movf R_Apunta,w call Mensaje movwf R_Valor movf R_Valor,f btfsc STATUS,Z goto FinCel Falta call puda incf R_Apunta,f goto Mas FinCel return puco: movwf PORTB ;escribe comando en puertoB bcf RS call Habil call Ret50m ;50 milisegundos return puda: movwf PORTB ;escribe dato en puertoB bsf RS call Habil call Ret50m ;50 milisegundos return Habil bsf EN nop bcf EN return Visual btfsc R_Signo,0 goto cabo SigMas movfw R_Dec movwf PORTB call puda return cabo call Ret1s goto Inicio include Tempera1.inc end