;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	  <p16f88.inc>
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
