	PROCESSOR 16F690
	#INCLUDE "P16F690.INC"
	__CONFIG _WDT_OFF & _INTOSCIO & _PWRTE_ON 	
	CBLOCK 0x70
		
		Timer1
		Timer2
		Blinkf1
		Hundred
		Ten
		Unit
		Binary
		Count
		Bin2
		Tu
		Iron
		Pot
		
		ENDC
		org	0
		goto	Main
		org	4
		goto	Blink

;===============================================================================

Main		
	
;Beállítások

		banksel		ANSEL
		movlw		B'00000011'	; PORTA RA0 - RA1 analóg bemenet
		movwf		ANSELH	
		movlw		B'00001100'
		movwf		ANSELH		; PORTB RB4 - RB5 analóg bemenet
		
		banksel		CM1CON0		; COMP1 beállítása
		movlw		B'10100000'		
		movwf		CM1CON0		; Comp1=on, RA2 out = on

		banksel		TRISA			
		movlw		B'00001011'		
		movwf		TRISA		; PORTA 0 - 1 és 3 bemenet
		movlw		B'00110000'		
		movwf		TRISB		; PORTB 4 - 5 bemenet
		clrf		TRISC		; PORTC kimenet

		movlw		B'00110000'	; ADC beállítás	
		movwf		ADCON1		; Frc clock

		bsf			PIE1,1		; Interrupt beállítása
		movlw		B'11000000'
		movwf		INTCON
		
; LCD beállítás
		
		bcf			STATUS,RP0
		bcf			PORTA,5		; LCD parancs következik
		movlw		0x38        ; 38h=56 dec, 8 bit interface set
		call		Write
		;call		Kesl2		; Busy flag olvasását "helyettesíti"Kesl
		movlw		0x06        ; 06h, Entry mode set: increment
		call		Write
		movlw		0x0c        ; 0dh, Display on, cursor/blink off  (F0)
		call		Write
		movlw		0x10        ; 10h, Display/cursor shift: cursor
		call		Write
		movlw		0x02        ; 02h, DD RAM clear
		call		Write
		call		Kesl		; Busy flag olvasását "helyettesíti"Kesl
		movlw		0x01        ; 01h, Display clear
		call		Write
		call		Kesl		; Busy flag olvasását "helyettesíti"Kesl
	
		movlw		0x40		; CG beírás következik
		call		Write
		bsf			PORTA,5		; CG adat következik
		movlw		0x02
		call		Write		; "á" betü
		movlw		0x04	
		call		Write
		movlw		0x0e
		call		Write
		movlw		0x01
		call		Write
		movlw		0x0f
		call		Write
		movlw		0x11
		call		Write
		movlw		0x0f
		call		Write
		movlw		0x00
		call		Write
		
		movlw		0x02
		call		Write		; "í" betü
		movlw		0x04	
		call		Write
		movlw		0x00
		call		Write
		movlw		0x0c
		call		Write
		movlw		0x04
		call		Write
		movlw		0x04
		call		Write
		movlw		0x0e
		call		Write
		movlw		0x00
		call		Write

		movlw		0x05
		call		Write		; "ű" betü
		movlw		0x0a	
		call		Write
		movlw		0x00
		call		Write
		movlw		0x11
		call		Write
		movlw		0x11
		call		Write
		movlw		0x13
		call		Write
		movlw		0x0d
		call		Write
		movlw		0x00
		call		Write


		bcf			PORTA,5		; LCD parancs következik
		movlw		0x80        ; LCD cím= 0 (+128), első LCD sor
		call		Write
		bsf			PORTA,5		; LCD adat következik
		movlw		0x50		; P
		call		Write
		movlw		0x00		; á
		call		Write
		movlw		0x6b		; k
		call		Write
		movlw		0x61		; a
		call		Write
		movlw		0x5c3a		; :
		call		Write
		bcf			PORTA,5		; LCD parancs következik
		movlw		0x8e        ; LCD cím= 0 (+128), első LCD sor
		call		Write
		bsf			PORTA,5		; LCD adat következik
		movlw		0xdf		; Fok
		call		Write
		movlw		0x43		; C
		call		Write
			
		bcf			PORTA,5		; LCD parancs következik
		movlw		0xc0        ; LCD cím= 0 (+128), második LCD sor
		call		Write
		bsf			PORTA,5		; LCD adat következik
		movlw		0x42		; B
		call		Write
		movlw		0x65		; e
		call		Write
		movlw		0x00		; á
		call		Write
		movlw		0x6c		; l
		call		Write	
		movlw		0x6c		; l
		call		Write
		movlw		0x01		; í
		call		Write
		movlw		0x74		; t
		call		Write
		movlw		0x76		; v
		call		Write
		movlw		0x61		; a
		call		Write
		movlw		0x3a		; :
		call		Write
		movlw		0x20		; Space
		call		Write
		movlw		0x20		; Space
		call		Write
		movlw		0x20		; Space
		call		Write
		movlw		0x20		; Space
		call		Write
		movlw		0xdf		; Fok
		call		Write
		movlw		0x43		; C
		call		Write

;=================================================================================
		
Start

;=================================================================================

; Analog-Digital Converter 1. (Páka)	

		banksel		ADCON0
		movlw		B'00101001'		
		movwf		ADCON0		; Left, VDD ref, AN10, On
		call		Kesl100		; Acquisiton delay
		bsf			ADCON0,1	; Start conversion
		btfsc		ADCON0,1	; Is conversion done?
		goto		$-1			; No, test again
		bcf			STATUS,0
		rrf			ADRESH,W
		addlw		B'00010111'	; KALIBRÁLÁS !
		movwf		Binary
		movwf		Iron
		Call		Convert

;--------------------------------------------------------------------------------

; LCD beállítás	

		banksel		PORTA
		bcf			PORTA,5
		movlw		0x8b		; LCD cím= 0 (+128), első LCD sor
		call		Write
		bsf			PORTA,5		; LCD adat következik
		movf		Hundred,W
		addlw		B'00110000'
		call		Write
		movf		Ten,W
		addlw		B'00110000'
		call		Write
		movf		Unit,W
		addlw		B'00110000'
		call		Write

;=================================================================================

; Analog-Digital Converter 2. (Beállítás)	

		banksel		ADCON0
		movlw		B'00101101'		
		movwf		ADCON0		; Left, VDD ref, AN11, On
		call		Kesl100		; Acquisiton delay
		bsf			ADCON0,1	; Start conversion
		btfsc		ADCON0,1	; Is conversion done?
		goto		$-1			; No, test again
		bcf			STATUS,0
		rrf			ADRESH,0
		addlw		B'00011000'
		movwf		Binary
		movwf		Pot
		Call		Convert

;----------------------------------------------------------------------------------

; LCD beállítás	

		banksel		PORTA
		bcf			PORTA,5	
		movlw		0xcb		; LCD cím= 0 (+128), első LCD sor
		call		Write
		bsf			PORTA,5		; LCD adat következik
		movf		Hundred,W
		addlw		B'00110000'
		call		Write
		movf		Ten,W
		addlw		B'00110000'
		call		Write
		movf		Unit,W
		btfsc		Unit,3		; Az egyes helyiértéket 0-ra, vagy 
		goto		$+5			; 5-re állítja
		btfsc		Unit,2
		goto		$+3
		movlw		B'00110000'
		goto		$+2
		movlw		B'00110101'
		call		Write
;=================================================================================

; Páka kapcsoló		

		movf		Iron,0		; A Páka, vagy a Beállítás értéke nagyobb-e
		subwf		Pot,0
		btfsc		STATUS,0
		goto		Fűtés
		bcf			PORTB,6		; Páka kikapcsolása
		bcf			PORTA,5		; LCD parancs következik
		movlw		0x87        ; LCD cím= 0 (+128), első LCD sor(0x87)
		call		Write
		bsf			PORTA,5		; LCD adat következik
		movlw		0x20		; space
		call		Write
		movlw		0x20		; space
		call		Write
		movlw		0x20		; space
		call		Write
		goto		Start

Fűtés
		bsf			INTCON,7
		bsf			PORTB,6		; Páka bekapcsolása
		bsf			Blinkf1,0
		bsf			T2CON,2
		goto		Start

;=================================================================================	

Write	
		movwf		PORTC
		bsf			PORTA,4
		call		Kesl		; Busy flag olvasását "helyettesíti"
		bcf			PORTA,4
		return

;=================================================================================		

; Binary-BCD Converter		

Convert
		banksel		ADRESL
		movf		ADRESL,W		
		bcf			STATUS,RP0		
		movwf		Bin2			
		movlw		.8			
		movwf		Count		
		clrf		Tu				
		clrf		Hundred		
		clrf		Ten
		clrf		Unit
BinBCD	
		call		Step
		decfsz		Count		
		goto		BinBCD	
		goto		BCD				
Step
		rlf			Tu			
		rlf			Hundred		
		bcf			Tu,0		
		rlf			Binary
		btfss		STATUS,C
		goto		Test
		incf		Tu,1
Test	
		btfsc		Tu,7
		goto		Pl48
		btfss		Tu,6
		goto		Test2
		btfsc		Tu,5
		goto		Pl48
		btfsc		Tu,4
		goto		Pl48
		goto		Test2
Pl48	
		movlw		B'00110000'
		addwf		Tu,1
		btfsc		STATUS,C
		incf		Hundred,1
Test2	
		btfsc		Tu,3
		goto		Pl3
		btfss		Tu,2
		return
	
		btfsc		Tu,1
		goto		Pl3
		btfss		Tu,0
		return
	
Pl3		
		movlw		B'00000011'
		addwf		Tu,1
		btfsc		STATUS,C
		incf		Hundred,1
		return
BCD		
		rlf			Hundred
		bcf			Hundred,0
		rlf			Tu		
		bcf			Tu,0
		btfsc		STATUS,C
		incf		Hundred,1
		incf		Hundred,1
		btfsc		Bin2,7
		bsf			Tu,0
		movlw		B'00001111'
		andwf		Tu,0
		movwf		Unit
		swapf		Tu,1
		movlw		B'00001111'
		andwf		Tu,0
		movwf		Ten
		return

;===============================================================================

;Késleltetés


Kesl	
		clrf		Timer1		; 2ms késleltetés  
		movlw		60
		movwf		Timer2
Kesl21	
		call		Kesl100
		decfsz		Timer2,1
		goto		Kesl21
		return

;-------------------------------------------------------------------------------

Kesl100	
		movlw		40			; 100us késleltetés
		movwf		Timer1
Kesl1	
		decfsz		Timer1,1
		goto		Kesl1
		return

;===============================================================================

Blink

		bcf			PORTA,5		; LCD parancs következik
		movlw		0x87        ; LCD cím= 0 (+128), első LCD sor
		call		Write
		bsf			PORTA,5		; LCD adat következik
		btfsc		Blinkf1,0
		goto		Blink2
		movlw		0x46		; F
		call		Write
		movlw		0x02		; ű
		call		Write
		movlw		0x74		; t
		call		Write
		bsf			Blinkf1,0
		goto		Start

Blink2	
		movlw		0x20		; space
		call		Write
		movlw		0x20		; space
		call		Write
		movlw		0x20		; space
		call		Write
		bcf			Blinkf1,0
		goto		Start

;================================================================================
	
		end
