;2PROYECTOSF88TINY.asm ;SI SW4=0, MIDE TEMPERATURA AMBIENTE Y LA ESCRIBE EN LCD ;SI SW4=1, ESCRIBE UN MENSAJE DE 256 CARACTERES CON SCROLLING ;EN EL LCD. processor 16f88 include J equ H'21' ;localidad para subrutina de retardo K equ H'22' ;localidad para subrutina de retardo valor equ H'23' ;localidad guardar valor offset en tabla counter equ H'24' ;localidad para cuenta descendente de 16 localidades offset equ H'25' ;localidad para offset de tabla CBLOCK 0X30 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 clrf PCLATH goto WEB org 3 WEB BANCO0 bcf RCSTA,SPEN ;DESHABILITA UART BANCO1 movlw 7 movwf CMCON clrf CVRCON clrf ANSEL BANCO1 movlw 0x18 movwf TRISA BANCO0 btfss PORTA,4 goto P1 goto P2 P1 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 "DS18B20.inc" P2 clrf PORTA clrf PORTB movlw H'4' movwf PCLATH ;preparar PCH en página 1, para manejo de tabla movlw H'00' movwf offset ;inicializa offset de tabla bsf STATUS,RP0 ;BANCO 1 bcf STATUS,RP1 movwf TRISB ;bits de puerto B, salidas movwf TRISA ;bits de puerto A, salidas bcf STATUS,RP0 ;BANCO 0 bcf STATUS,RP1 call comand ;incializa LCD. envía 4 comandos loop call filbuf ;llena el buffer en memoria call primer ;escribe primer renglón call segund ;escribe segundo renglón call delay3 goto loop filbuf movlw H'30' ;inicializa W ,inicio de BUFFER movwf FSR ;prepara direccionamiento indirecto movlw D'16' ;prepara cuenta de contador movwf counter weer movfw counter addwf offset,w ;suma w + offset, resultado en w call tabla ;trae cada uno de los caracteres movwf INDF ;colócalo en buffer incf FSR decfsz counter goto weer incf offset return primer movlw renglon1 call puco1 ;envía comando de renglón 1 movlw D'8' movwf valor movlw H'3F' movwf FSR malla1 movfw INDF call puda1 ;escribe caracter en LCD decf FSR decfsz valor,f goto malla1 return segund movlw renglon2 call puco1 ;envía comando de renglón 2 movlw D'8' movwf valor movlw H'37' movwf FSR malla2 movfw INDF call puda1 ;escribe caracter en LCD decf FSR decfsz valor,f goto malla2 return comand movlw eight ;envía 4 comandos call puco1 movlw clear call puco1 movlw home call puco1 movlw cursor call puco1 return puco1 movwf PORTB ;escribe comando en puertoB call delay ;50 milisegundos movlw H'04' ;RS=0, EN=1 movwf PORTA call delay movlw H'00' ;RS=0, EN=0 movwf PORTA call delay movlw H'04' movwf PORTA call delay return puda1 movwf PORTB ;escribe dato en puertoB call delay ;50 milisegundos movlw H'06' ;RS=1, EN=1 movwf PORTA call delay movlw H'02' ;RS=1, EN=0 movwf PORTA call delay movlw H'06' movwf PORTA call delay return delay movlw D'10' ;50 milisegundos movwf K mallaK movwf J mallaJ decfsz J,f goto mallaJ decfsz K,f goto mallaK return delay2 movlw D'250' ;100 milisegundos movwf K mallaM movwf J mallaL decfsz J,f goto mallaL decfsz K,f goto mallaM return delay3 call delay2 call delay2 ; call delay2 return tabla movwf PCL ;PCH =01, PCL =w org H'400' retlw '.' retlw 'E' retlw 'V' retlw 'O' retlw 'L' retlw 'U' retlw 'P' retlw 'I' retlw 'C' retlw ' ' retlw 'B' retlw 'o' retlw 'o' retlw 't' retlw 'l' retlw 'o' retlw 'a' retlw 'd' retlw 'e' retlw 'r' retlw ' ' retlw '1' retlw '6' retlw 'F' retlw '8' retlw '8' retlw '.' retlw '.' retlw '4' retlw 'K' retlw ' ' retlw 'M' retlw 'E' retlw 'M' retlw 'O' retlw 'R' retlw 'I' retlw 'A' retlw ' ' retlw 'F' retlw 'L' retlw 'A' retlw 'S' retlw 'H' retlw '.' retlw '.' retlw '3' retlw '6' retlw '8' retlw ' ' retlw 'B' retlw 'Y' retlw 'T' retlw 'E' retlw 'S' retlw ' ' retlw 'R' retlw 'A' retlw 'M' retlw '.' retlw '.' retlw '2' retlw '5' retlw '6' retlw ' ' retlw 'D' retlw 'E' retlw ' ' retlw 'E' retlw 'E' retlw 'P' retlw 'R' retlw 'O' retlw 'M' retlw '.' retlw '.' retlw 'P' retlw 'U' retlw 'E' retlw 'R' retlw 'T' retlw 'O' retlw 'S' retlw ' ' retlw 'P' retlw 'A' retlw 'R' retlw 'A' retlw ' ' retlw 'L' retlw 'C' retlw 'D' retlw ' ' retlw 'Y' retlw ' ' retlw 'T' retlw 'E' retlw 'C' retlw 'L' retlw 'A' retlw 'D' retlw 'O' retlw '.' retlw '.' retlw 'R' retlw 'E' retlw 'L' retlw 'E' retlw 'V' retlw 'A' retlw 'D' retlw 'O' retlw 'R' retlw ' ' retlw 'D' retlw 'E' retlw ' ' retlw '1' retlw '2' retlw '7' retlw 'v' retlw '.' retlw ' ' retlw '1' retlw ' ' retlw 'a' retlw 'm' retlw 'p' retlw '.' retlw '.' retlw '8' retlw ' ' retlw 'L' retlw 'E' retlw 'D' retlw 'S' retlw '.' retlw '.' retlw '4' retlw ' ' retlw 'M' retlw 'I' retlw 'C' retlw 'R' retlw 'O' retlw 'S' retlw 'W' retlw 'I' retlw 'T' retlw 'C' retlw 'H' retlw 'E' retlw 'S' retlw '.' retlw '.' retlw 'P' retlw 'R' retlw 'O' retlw 'G' retlw 'R' retlw 'A' retlw 'M' retlw 'A' retlw 'D' retlw 'O' retlw 'R' retlw ' ' retlw 'D' retlw 'E' retlw 'L' retlw ' ' retlw '1' retlw '6' retlw 'F' retlw '8' retlw '8' retlw ' ' retlw 'I' retlw 'N' retlw 'T' retlw 'E' retlw 'G' retlw 'R' retlw 'A' retlw 'D' retlw 'O' retlw '.' retlw '.' retlw 'S' retlw 'E' retlw 'N' retlw 'S' retlw 'O' retlw 'R' retlw ' ' retlw 'D' retlw 'E' retlw ' ' retlw 'T' retlw 'E' retlw 'M' retlw 'P' retlw 'E' retlw 'R' retlw 'A' retlw 'T' retlw 'U' retlw 'R' retlw 'A' retlw '.' retlw '.' retlw 'P' retlw 'U' retlw 'E' retlw 'R' retlw 'T' retlw 'O' retlw ' ' retlw 'S' retlw 'E' retlw 'R' retlw 'I' retlw 'A' retlw 'L' retlw ' ' retlw 'R' retlw 'S' retlw '2' retlw '3' retlw '2' retlw '.' retlw '.' retlw 'F' retlw 'I' retlw 'R' retlw 'M retlw 'W' retlw 'A' retlw 'R' retlw 'E' retlw ' ' retlw 'B' retlw 'O' retlw 'O' retlw 'T' retlw 'L' retlw 'O' retlw 'A' retlw 'D' retlw 'E' retlw 'R' retlw '.' retlw '.' retlw '.' retlw '.' retlw '.' retlw '.' retlw '.' end end