;********************
;*  Hőmérő program  *
;*    DS1620-szal   *
;*        by:       *
;*.:: MaSTeRFoXX::.	*
;**** 2005-10-29 ****


;Hardver:
;		-CPU     : PIC16F628A @4MHz , INTRC mód
;		-Szenzor : DS1620 SPI Buszon

;Először kapcsoljunk ki hibaüzeneteket..   :)))
	ERRORLEVEL -302
	ERRORLEVEL -207

;Proci megadása
		LIST P=16F628A
		#INCLUDE P16F628A.inc

;konfigurálás
		__CONFIG  _CP_OFF & _WDT_OFF & _PWRTE_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT
		;XT mód;
		;Watchdog: ki
		;Power on reset: be
		;Kódos védelem: ki
	
;maga a programhoz kell
	#DEFINE CLK 	PORTA,3				; CLOCK 
	#DEFINE DAT 	PORTA,2				; DATA
	#DEFINE RST		PORTA,4				; RESET
	#DEFINE	FUTES	PORTA,1				; FŰTÉS
	#DEFINE	LED		PORTA,6				; FŰTÉSJELZŐ LED
	#DEFINE	FEL		PORTA,0				; OPTIMÁLIS HŐMÉRSÉKLET FEL
	#DEFINE	LE		PORTA,7				; OPTIMÁLIS HŐMÉRSÉKLET LE

;Változóblokk
	CBLOCK 0x20
				COUNT 					;számláló
				KIMENO
				BEJOVO1
				BEJOVO2 
				BEJOVO_TEMP		
				T1
				T2
				ALSO
				FELSO
				OPTIMALIS_HOMERSEKLET
	ENDC
	;Változóblokk vége

	ORG     0x00		
  	GOTO    START			


;---- INICIALIZÁCIÓS RÉSZ ----
START 
	BSF 	STATUS, RP0 				; Select Bank 1 
	MOVLW	b'10000001'					; PORTA 0 és 7. bit bemenet (gombok) többi kimenet 
	MOVWF 	TRISA 
	CLRF 	TRISB						; PORTB ÖSSZES KIMENET
	BSF		PCON,OSCF					; Belső oscillátor 4 Mhz (OSCF=1), 37 Khz (OSCF=0)
	BCF 	STATUS, RP0					; Bank0
	MOVLW   07H							; PIC16F628 - nál kikapcsolja a komparátort
	MOVWF	CMCON
	CLRF	PORTA
	CLRF	PORTB

;A DS1620 konfigurálása
			; 76543210
	;parancs: 00001100  ;write config
	;adat	: 00000001	; 1SHOT mode
	MOVLW 	0x0c
	MOVWF 	KIMENO
	BSF 	RST							; engedélyezés
	CALL 	SEND						; elküldeni a paranacsot
	MOVLW 	b'00000011'	
	MOVWF 	KIMENO
	CALL 	SEND						; elküldeni az adatot
	CALL 	VARJ
	BCF 	RST							; tiltás
	CALL	DELAY

	CLRF	ALSO
	CLRF	FELSO
	MOVLW	d'20'
	MOVWF	OPTIMALIS_HOMERSEKLET 

ELEJE
	CALL 	START_CONVERT
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY	
	CALL 	READ_TEMPERATURE
;Most már a BEJOVO1 -ben van a hőmérséklet


;	MOVLW    b'01000000'   		; Csak a legalsó bitet akarjuk ellentétesre fordítani 
; 	XORWF    PORTA,F    		; PORTB alsó bitjét ellentétesre fordítjuk
;	GOTO	 ELEJE

	BTFSC	BEJOVO1,0
	BCF		LED
	BSF		LED

	GOTO	ELEJE
	
START_CONVERT
;ez a rész küld az IC-nek egy parancsot, hogy végezzen el egy mérést
;PARANCS: 11101110
	MOVLW 	0xee
	MOVWF 	KIMENO
	BSF 	RST
	CALL 	SEND
	CALL 	VARJ
	BCF 	RST
	RETURN

READ_TEMPERATURE
;Ez a rész olvassa ki a hőmérsékletet
;parancs : AA    10101010
	MOVLW 	0xaa
	MOVWF 	KIMENO
	BSF 	RST
	CALL 	SEND
	CALL 	RECEIVE
	MOVF 	BEJOVO_TEMP,W
	MOVWF 	BEJOVO1
	CALL 	RECEIVE
	MOVF 	BEJOVO_TEMP,W
	MOVWF 	BEJOVO2
	BCF 	RST
	RETURN


SEND
	MOVLW 	D'8'
	MOVWF 	COUNT
	CALL 	DATA_LOW					; kimenetre kapcsolás
	NOP
SEND_
	BSF 	CLK
	NOP
	BCF 	DAT
	BTFSC 	KIMENO,0					; HA H AKKOR H-t küldjön
	BSF 	DAT
SEND_VEGE
	CALL 	DELAY
	RRF 	KIMENO,F
	BCF 	CLK
	DECFSZ 	COUNT,F
	GOTO 	SEND_	
	RETURN

RECEIVE
	MOVLW 	D'8'
	MOVWF 	COUNT
	CALL 	DATA_HIGH					; bemenetre kapcsolás
	CLRF 	BEJOVO_TEMP
RECEIVE_
	BSF 	CLK
	BCF 	STATUS,C
	BTFSC 	DAT
	BSF 	STATUS,C
	RRF 	BEJOVO_TEMP,F
	CALL 	DELAY
	BCF 	CLK
	DECFSZ 	COUNT,F
	GOTO 	RECEIVE_
	RETURN

DATA_HIGH
	BSF 	STATUS,RP0
	BSF 	TRISA,2
	BCF 	STATUS,RP0
	RETURN

DATA_LOW
	BSF 	STATUS,RP0
	BCF 	TRISA,2
	BCF 	STATUS,RP0
	RETURN

VARJ
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP	
	RETURN

DELAY	
	MOVLW	d'150'
	MOVWF	T1
DEL	
	MOVLW	d'255'
	MOVWF	T2	
DEL1	
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ	T2,f
	GOTO	DEL1
	DECFSZ	T1,f
	GOTO	DEL
	RETURN 
		
	END
