; ARCHIVO DS18B20SIETEF88SCREAMER-3.ASM
; VERSION EVOLUPIC Bootloader SCREAMER
; ULTIMA VERSION DEL TERMOMETRO CON SALIDA
; A 7 SEGMENTOS DE LEDS. DISPLAY NO PARPADEA.
; CODIGO FUENTE PARA EL MICROCONTROLADOR PIC16F88
; LEE EL VALOR DE LA TEMPERATURA DEL SENSOR DS18B20
; MUESTRA el valor EN UN DISPLAY DE 7 SEGMENTOS DE LEDS 
; RA1 SE USA PARA DAR RESET AL CONTADOR DE COLUMNAS
; RA2 SE USA PARA INCREMENTAR EL CONTADOR DE COLUMNAS
; rB0...Rb7 se usan para encender cada uno de los segmentos
 
; VERSION PARA OSCILADOR CRISTAL 4 MHZ

; CPU configuration
; 	(It's a 16F88, XT OSCILADOR
; 	watchdog timer off, power-up timer on)

	processor 16f88
	include	  <p16f88.inc>
	
BANCO0	MACRO	
	BCF	STATUS,RP0
	BCF	STATUS,RP1
	ENDM
BANCO1	MACRO
	BSF	STATUS,RP0
	BCF	STATUS,RP1
	ENDM	

CBLOCK	0X20
J	  
K	
L			;contador tabla	
M			;buffer segmentos 3 dígitos
N
PY	
A	 
Digito1			;codigo ascii primer dígito
Digito2	
Digito3
Punto	
ENDC
		ORG 0
		CLRF PCLATH
		GOTO WEB
WEB		org	3		
		BANCO0
		bcf	RCSTA,SPEN	;DESHABILITA UART
		BANCO1
		movlw	7
		movwf	CMCON
		clrf	CVRCON
		clrf	ANSEL		;DESHABILITA CONVERTIDORES A/D		
		clrf	TRISA
		clrf	TRISB			
inicio:		BANCO0
		CLRF	PORTA
		CLRF	PORTB		
		call	Tempe
		movfw	Digito1
		andlw	H'0F'	;conserva solo valor BCD
		call	tabla	;regresa de tabla con patrón de segmentos en W
		movwf	M		;carga buffer
		movfw	Digito2
		andlw	H'0F'	;conserva solo valor BCD
		call	tabla	;regresa de tabla con patrón de segmentos en W
		iorlw	H'01'	;añade el punto decimal, segmento RB0
		movwf	N		;carga buffer
		movfw	Digito3
		andlw	H'0F'	;conserva solo valor BCD
		call	tabla	;regresa de tabla con patrón de segmentos en W
		movwf	PY		;carga buffer

		movlw	H'FF'
		movwf	A	
malla2:	clrf	L		;L es el contador de dígitos
		movlw	M
		movwf	FSR		;inicializa dirección buffer
		call	MR		;RA1 MANDA PULSO DE MASTER RESET AL CONTADOR
malla1:		
		movfw	INDF	;carga en w contenido de buffer
		movwf	PORTB	;carga en PUERTO B patrón de segmentos
		call	CP0		;RA2 MANDA PULSO PARA INCREMENTAR CONTADOR
		call 	retro	;retraso
		incf	FSR,f
		incf	L,f		
		movfw	L
		sublw	3		;malla de 3 ciclos
		btfss	STATUS,Z
		goto	malla1
		decf	A,f
		btfss	STATUS,Z
		goto 	malla2
		goto 	inicio

MR:		BSF	PORTA,1		;MASTER RESET AL CONTADOR
		CALL UNMILI		;RETRASO DE 1 MILISEGUNDO
		BCF	PORTA,1
		RETURN
CP0:	BSF	PORTA,2		;INCREMENTA COLUMNA CONTADOR
		CALL UNMILI		;RETRASO DE 1 MILISEGUND0
		BCF	PORTA,2
		RETURN
	  
	; RETRASO DE 0.5 SEGUNDOS

retro:	movlw	D'40'	;RUTINA RETRASO 10 MS
		movwf	J		; J = w
jloop:	movwf	K		; K = w
kloop:	decfsz	K,f		; K = K-1, skip next if zero
		goto 	kloop
		decfsz	J,f		; J = J-1, skip next if zero
		goto	jloop
		return

UNMILI:	movlw	D'250'	; RUTINA RETRASO 1 MILISEGUNDO
		movwf	K		; J = w
kloop2:	decfsz	K,f		; K = K-1, skip next if zero
		goto 	kloop2
		return

tabla:	addwf	PCL			;patrón de segmentos encendidos
		retlw	B'01111110'	;0
		retlw	B'00001100'	;1
		retlw	B'10110110'	;2
		retlw	B'10011110'	;3
		retlw	B'11001100'	;4
		retlw	B'11011010'	;5
		retlw	B'11111000'	;6
		retlw	B'00001110'	;7
		retlw	B'11111110'	;8
		retlw	B'11001110'	;9
;cabo:	goto 	inicio			;se quitó
		
	include	"DS18B20-3.inc"	

			end
	
	
	



	 			

