;programa que controla la temperatura. 
;LCD configurado a 4 bits por la parte alta del puertoB

	list p=16f84
#include<p16f84.inc>

;#define _z status,2
;#define _c status,0
#define BANK0 bcf status,RP0
#define BANK1 bsf status,RP0
#define activar	PORTA,2 
#define enable	PORTA,3 ;habilitador de ADC.
#DEFINE	_C	STATUS,C
#DEFINE	_z	STATUS,Z

ton	equ 0x12
toff	equ 0x13
T	equ 0x14
ton1	equ 0x15
status	equ 0x03
conlin	equ 0x16
cons	equ 0x17
conv	equ 0x18
tecla1	equ 0x19
count	equ 0x1a
dato2	equ 0x1b
cont0	equ 0x1c
cont1	equ 0x1d
dato1	equ 0x1e
tecla	equ 0x1f
dato3	equ 0x20
dato4	equ 0x21
data1	equ 0x22
ret1	equ 0x23
ret2	equ 0x24
TRISA	equ 0x85
TRISB	equ 0x86
pc	equ 0x02
PORTA	equ 0x05
PORTB	equ 0x06
swq	equ 0x25
CUNT1    equ 0x25
CUNT2    equ 0x26
CUNT3    equ 0x27
DECENA	 equ 0x28
CENTENA  equ 0x29
UNIDAD   equ 0x2A
  
	org 0x00
	org 0x05
	goto inicio
tabla1
	addwf	pc,f
	retlw	" " ;1	
	retlw	"C" ;2
	retlw	"O" ;3
	retlw	"N" ;4
	retlw	"T" ;5
	retlw	"R" ;6
	retlw	"O" ;7
	retlw	"L" ;8
	retlw	" " ;9
	retlw	"D" ;10
	retlw   "E" ;11
	retlw	" " ;12
	retlw	"T" ;13
	retlw	"E" ;14
	retlw	"M" ;15
	retlw	"P" ;16
	retlw   "E" ;17
	retlw	"R" ;18
	retlw	"A" ;19
	retlw	"T" ;20
	retlw	"U" ;21
	retlw	"R" ;22
	retlw	"A" ;23
	retlw	" " ;24
	retlw	0x00

tabla2
	addwf	pc,f
	retlw	" " ;1	
	retlw	"P" ;2
	retlw	"A" ;3
	retlw	"R" ;4
	retlw	"A" ;5
	retlw	" " ;6
	retlw	"U" ;7
	retlw	"N" ;8
	retlw	"A" ;9
	retlw	" " ;10
	retlw   "C" ;11
	retlw	"A" ;12
	retlw	"R" ;13
	retlw	"G" ;14
	retlw	"A" ;15
	retlw	" " ;16
	retlw   "D" ;17
	retlw	"E" ;18
	retlw	" " ;19
	retlw	"1" ;20
	retlw	"1" ;21
	retlw	"0" ;22
	retlw	"V" ;23
	retlw	" " ;24
	retlw	0x00

tabla3
	addwf	pc,f
	retlw	" " ;1	
	retlw	"T" ;2
	retlw	"E" ;3
	retlw	"M" ;4
	retlw	"P" ;5
	retlw	"E" ;6
	retlw	"R" ;7
	retlw	"A" ;8
	retlw	"T" ;9
	retlw	"U" ;10
	retlw   "R" ;11
	retlw	"A" ;12
	retlw	" " ;13
	retlw	"A" ;14
	retlw	"C" ;15
	retlw	"T" ;16
	retlw   "U" ;17
	retlw	"A" ;18
	retlw	"L" ;19
	retlw	"=" ;20
	retlw	" " ;21
	retlw	" " ;22
	retlw	" " ;23
	retlw	" " ;24
	retlw	0x00

tabla4	
	addwf	pc,f
	retlw	" " ;1	
	retlw	"D" ;2
	retlw	"I" ;3
	retlw	"G" ;4
	retlw	"I" ;5
	retlw	"T" ;6
	retlw	"E" ;7
	retlw	" " ;8
	retlw	"L" ;9
	retlw	"A" ;10
	retlw   " " ;11
	retlw	"T" ;12
	retlw	"E" ;13
	retlw	"M" ;14
	retlw	"P" ;15
	retlw	"E" ;16
	retlw   "R" ;17
	retlw	"A" ;18
	retlw	"T" ;19
	retlw	"U" ;20
	retlw	"R" ;21
	retlw	"A" ;22
	retlw	" " ;23
	retlw	" " ;24
	retlw	0x00

tabla10	
	addwf	pc,f
	retlw	" " ;1	
	retlw	" " ;2
	retlw	" " ;3
	retlw	" " ;4
	retlw	" " ;5
	retlw	"S" ;6
	retlw	"E" ;7
	retlw	"T" ;8
	retlw	" ";9
	retlw	"P" ;10
	retlw   "O" ;11
	retlw	"I" ;12
	retlw	"N" ;13
	retlw	"T" ;14
	retlw	":" ;15
	retlw	" " ;16
	retlw	0x00

tabla20	
	addwf	pc,f
	retlw	" " ;1	
	retlw	" " ;2
	retlw	"V" ;3
	retlw	"A" ;4
	retlw	"L" ;5
	retlw	"O" ;6
	retlw	"R" ;7
	retlw	" " ;8
	retlw	"L" ;9
	retlw	"E" ;10
	retlw   "I" ;11
	retlw	"D" ;12
	retlw	"O" ;13
	retlw	":" ;14
	retlw	" " ;15
	retlw	0x00



tabla5	
	addwf	pc,f
	retlw   " " ;1
	retlw	"D" ;2
	retlw	"E" ;3
	retlw   " " ;4
	retlw	"C" ;5
	retlw	"O" ;6
	retlw	"N" ;7
	retlw	"T" ;8
	retlw	"R" ;9
	retlw	"O" ;10
	retlw	"L" ;11
	retlw	" " ;12	
	retlw	" " ;13
	retlw	" " ;14
	retlw	" " ;15
	retlw	0x00
tabla6
	addwf	pc,f
	retlw   " " ;1
	retlw	"T" ;2
	retlw	"E" ;3
	retlw	"M" ;4
	retlw	"P" ;5
	retlw	"E" ;6
	retlw   "R" ;7
	retlw	"A" ;8
	retlw	"T" ;9
	retlw	"U" ;10
	retlw	"R" ;11
	retlw	"A" ;12
	retlw	"=" ;13
	retlw	" " ;14
	retlw	" " ;15
	retlw   " " ;16
	retlw	" " ;17
	retlw	" " ;18
	retlw	" " ;19
	retlw	" " ;20
	retlw	" " ;21
	retlw	" " ;22
	retlw	" " ;23
	retlw	" " ;24	
	retlw	0x00



inicio
	BANK1
	movlw	0x0f
	movwf	TRISB
	movlw	0x00
	movwf	TRISA
	BANK0
	clrf	PORTA
	clrf	cons
	call	lcd
	call	mensaje1
	call	enter
	call	mensaje3
	call	scanum
	movf	tecla,w
	movwf	dato3
	call	scanum
	movf	tecla,w
	movwf	dato4
	swapf	dato3,w
	iorwf	dato4,w
	movwf	dato4
	movf	dato4,w
	movwf	UNIDAD
	call	DECIMAL
	movf	CENTENA,w
	iorlw	0x30
	movwf	tecla
	call	desplegar2
	movf	DECENA,w
	iorlw	0x30
	movwf	tecla
	call	desplegar2
	movf	UNIDAD,w
	iorlw	0x30
	movwf	tecla
	call	desplegar2
	call	enter
	call	del5ms
	call	mensaje33
	bsf	activar
ver	movlw	0xD1
	call	control
	call	del5ms
	bsf	enable
	BANK1
	movlw	0xFF
	movwf	TRISB
	BANK0
	movf	PORTB,w
	movwf	conv	
	bcf	enable
	BANK1
	movlw	0x0F
	movwf	TRISB
	BANK0
	movf	conv,w
	movwf	UNIDAD
	call	DECIMAL
	movf	CENTENA,w
	iorlw	0x30
	movwf	tecla
	call	desplegar2
	movf	DECENA,w
	iorlw	0x30
	movwf	tecla
	call	desplegar2
	movf	UNIDAD,w
	iorlw	0x30
	movwf	tecla
	call	desplegar2
	movf	dato4,w
	subwf	conv,w
	btfss	_C
        goto	ya
	goto	apagar
ya	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	bsf	activar
	goto	ver
		
apagar	bcf	activar
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	call	del5ms
	goto	ver	


DECIMAL	CLRF	DECENA
	CLRF	CENTENA
	MOVLW	D'100'
OTRA	SUBWF	UNIDAD,F
	BTFSS	_C
	GOTO	SUM
	INCF	CENTENA,F
	GOTO	OTRA
SUM	ADDWF	UNIDAD,F
	MOVLW	D'10'
REPITE	SUBWF	UNIDAD,F
	BTFSS	_C
	GOTO	SUM1
	INCF	DECENA,F
	GOTO	REPITE
SUM1	ADDWF	UNIDAD,F
	RETLW	0


retardo	movf    ton,w
	MOVWF	CUNT1
LOOP1	movf	ton,w
	MOVWF	CUNT2
LOOP2	movf	ton,w
	MOVWF	CUNT3
LOOP3	DECFSZ	CUNT3,F
	GOTO	LOOP3
	DECFSZ	CUNT2,F
	GOTO	LOOP2
	DECFSZ	CUNT1,F
	GOTO	LOOP1
	RETURN

retardo1
	movlw   .2 
	MOVWF	CUNT1
LP1	movlw   .5
	MOVWF	CUNT2
LP2	movlw   .200
	MOVWF	CUNT3
LP3	DECFSZ	CUNT3,F
	GOTO	LP3
	DECFSZ	CUNT2,F
	GOTO	LP2
	DECFSZ	CUNT1,F
	GOTO	LP1
	RETURN


     
mensaje1
	movlw	0x01
	call	control
	movlw	0x02
	call	control
	movlw	.24
	movwf	conlin
	clrf	cons
klo	movf	cons,w
	call	tabla1
	call	desplegar
	incf	cons,f
	decfsz	conlin,f
	goto	klo
	movlw	0xc0
	call	control
	movlw	.24
	movwf	conlin
	clrf	cons
jjj	movf	cons,w
	call	tabla2
	call	desplegar
	incf	cons,f
	decfsz	conlin,f
	goto	jjj
	return	


mensaje33
	movlw	0x01
	call	control
	movlw	.16
	movwf	conlin
	clrf	cons
ko	movf	cons,w
	call	tabla10
	call	desplegar
	incf	cons,f
	decfsz	conlin,f
	goto	ko
	movf	dato4,w
	movwf	UNIDAD
	call	DECIMAL
	movf	CENTENA,w
	iorlw	0x30
	movwf	tecla
	call	desplegar2
	movf	DECENA,w
	iorlw	0x30
	movwf	tecla
	call	desplegar2
	movf	UNIDAD,w
	iorlw	0x30
	movwf	tecla
	call	desplegar2
	movlw	0xC2
	call	control
	movlw	.15
	movwf	conlin
	clrf	cons
jo	movf	cons,w
	call	tabla20
	call	desplegar
	incf	cons,f
	decfsz	conlin,f
	goto	jo
	return	



mensaje2
	
	movlw	0x01
	call	control
	movlw	0x02
	call	control
	movlw	.20
	movwf	conlin
	clrf	cons
kk	movf	cons,w
	call	tabla3
	call	desplegar
	incf	cons,f
	decfsz	conlin,f
	goto	kk
	return	

mensaje3
	movlw	0x01
	call	control
	movlw	0x02
	call	control
	movlw	.24
	movwf	conlin
	clrf	cons
kkkk	movf	cons,w
	call	tabla4
	call	desplegar
	incf	cons,f
	decfsz	conlin,f
	goto	kkkk
	movlw	0xc0
	call	control
	movlw	.15
	movwf	conlin
	clrf	cons
jjjj	movf	cons,w
	call	tabla5
	call	desplegar
	incf	cons,f
	decfsz	conlin,f
	goto	jjjj
	return	

mensaje4
	
	movlw	0x01
	call	control
	movlw	0x02
	call	control
	movlw	.14
	movwf	conlin
	clrf	cons
ww	movf	cons,w
	call	tabla6
	call	desplegar
	incf	cons,f
	decfsz	conlin,f
	goto	ww
	return	
	


	
lcd
	movlw 0X02
	call control
	movlw 0X28
	call control
	movlw 0X06
	call control
	movlw 0X0C
	call control
	movlw 0X01
	call control
	return


control			;rutina para enviar comandos.
	movwf dato1
	andlw 0Xf0
	movwf PORTB
	bcf PORTA,0
	bsf PORTA,1
	call retard
	bcf PORTA,1
	bsf PORTA,0
	swapf dato1,0
	andlw 0Xf0
	movwf PORTB
	bcf PORTA,0
	bsf PORTA,1
	call retard
	bcf PORTA,1
	bsf PORTA,0
	return
retard
	movlw 9
	movwf cont0
	movlw .115
	movwf cont1
	decfsz cont1,1
	goto $-1
	decfsz cont0,1
	goto $-5
	return


desplegar		;rutina para enviar datos.	
	movwf dato2
	andlw 0xf0
	movwf PORTB
	bsf PORTA,0	;habilita RS con uno 1 para enviar dato leido.
	bsf PORTA,1	;coloca uno 1 para habilitar LCD.
	call retard
	bcf PORTA,1	;deshabilita LCD.
	bcf PORTA,0	
	swapf dato2,0
	andlw 0xf0
	movwf PORTB
	bsf PORTA,0	;habilita RS envio de datos.
	bsf PORTA,1	;habilita LCD.
	call retard
	bcf PORTA,1	;deshabilita LCD.
	bcf PORTA,0
	return


desplegar1
	movf  tecla,w
	iorlw 0x30
	movwf tecla	
	andlw 0xf0
	movwf PORTB
	bsf PORTA,0
	bsf PORTA,1
	call retard
	bcf PORTA,1
	bcf PORTA,0
	swapf tecla,0
	andlw 0xf0
	movwf PORTB
	bsf PORTA,0
	bsf PORTA,1
	call retard
	bcf PORTA,1
	bcf PORTA,0
	return

desplegar2
	movf	tecla,w
	andlw	0xF0
	movwf PORTB
	bsf PORTA,0
	bsf PORTA,1
	call retard
	bcf PORTA,1
	bcf PORTA,0
	swapf	tecla,w
	andlw 0xF0
	movwf PORTB
	bsf PORTA,0
	bsf PORTA,1
	call retard
	bcf PORTA,1
	bcf PORTA,0
	return

lin1
	call	scanum
	movf	tecla,0
	movwf	dato3	;centenas.   
	call	desplegar1
	call	scanum
	movf	tecla,0
	movwf	dato4	;decenas.
	call	desplegar1
	call	scanum	
;	movwf	dato5	;unidades. 
;	call	desplear1
	swapf dato3,0
	andlw 0xf0
	iorwf dato4,0
	movwf data1
	call  enter
	return



scanum
	movlw B'11100000'
	movwf PORTB
	btfsc PORTB,0
	goto uno1
	call antireb
	movlw 0X00
	movwf tecla
	return
uno1	btfsc PORTB,1
	goto dos1
	call antireb
	movlw 0X01
	movwf tecla
	return
dos1	btfsc PORTB,2
	goto efe
	call antireb
	movlw 0X02
	movwf tecla
	return
efe	btfsc	PORTB,3
	goto	tres1
	call	antireb
	movlw	0x0F
	movwf	tecla
	return
tres1	movlw B'11010000'
	movwf PORTB
	btfsc PORTB,0
	goto cuatro1
	call antireb
	movlw 0X03
	movwf tecla
	return
cuatro1	btfsc PORTB,1
	goto cinco1
	call antireb
	movlw 0X04
	movwf tecla
	return
cinco1	btfsc PORTB,2
	goto e1
	call antireb
	movlw 0X05
	movwf tecla
	return
e1	btfsc	PORTB,3
	goto	seis1
	call	antireb
	movlw	0x0E
	movwf	tecla
	return
seis1	movlw B'10110000'
	movwf PORTB
	btfsc PORTB,0
	goto siete1
	call antireb
	movlw 0X06
	movwf tecla
	return
siete1	btfsc PORTB,1
	goto ocho1
	call antireb
	movlw 0X07
	movwf tecla
	return
ocho1	btfsc PORTB,2
	goto d1
	call antireb
	movlw 0X08
	movwf tecla
	return
d1	btfsc	PORTB,3
	goto	nueve1
	call	antireb
	movlw	0x0D
	movwf	tecla
	return
nueve1	movlw B'01110000'
	movwf PORTB
	btfsc PORTB,0
	goto  a1	 
	call antireb
	movlw 0X09
	movwf tecla
	return
a1	btfsc	PORTB,1
	goto	b1
	call	antireb
	movlw	0x0A
	movwf	tecla
	return
b1	btfsc	PORTB,2
	goto	c1
	call	antireb
	movlw	0x0B
	movwf	tecla
	return
c1	btfsc	PORTB,3
	goto	scanum
	call	antireb
	movlw	0x0C
	movwf	tecla
	return


enter	movlw	B'01110000'
	movwf	PORTB
	btfsc	PORTB,3
	goto	enter
	call	antireb
	return

antireb
	movlw .50
	movwf count
loopscan
	call del5ms
	decfsz count,1
	goto loopscan
	return
del5ms
	movlw 7
	movwf ret1
loop_del
	movlw .237
	movwf ret2
loop_del2
	decfsz ret2,1
	goto loop_del2
	decfsz ret1,1
	goto loop_del
	return
	END
