;********************
;*  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_ON & _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

; READ/WRITE BEMENET FIXEN "0" - RA VAN KÖTVE, CSAK KÜLDÜNK ADATOT


;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
	ORG     0x04			


;---- INICIALIZÁCIÓS RÉSZ ----
START 
	BSF 	STATUS, RP0 				; Select Bank 1
	MOVLW	b'10000001'					; PORTA ALSÓ 4 BIT KIMENET, 5. BIT (RA4) BEMENET, 6. BIT (RA5) KIMENET, 7. ÉS 8. BIT BEMENET 
	MOVWF 	TRISA
	CLRF 	TRISB						; PORTB ÖSSZES KIMENET (LCD)
	BSF		PCON,OSCF					; Belső oscillátor 4 Mhz (OSCF=1), 37 Khz (OSCF=0)
	BCF 	STATUS, RP0					; Bank0
	CLRF	PORTA
	CLRF	PORTB
	MOVLW   07H							; PIC16F628 - nál kikapcsolja a komparátort
	MOVWF	CMCON
;A DS1620 konfigurálása
			; 76543210
	;parancs: 00001100  ;write config
	;adat	: 00000001	; 1SHOT mode
	MOVLW 	0xac
	MOVWF 	KIMENO
	BSF 	RST							; engedélyezés
	CALL 	SEND						; elküldeni a parnacsot
	MOVLW 	b'00000001'	
	MOVWF 	KIMENO
	CALL 	SEND						; elküldeni az adatot
	CALL 	VARJ
	BCF 	RST							; tiltás


ELEJE
	CALL 	START_CONVERT
	CALL 	DELAY
	CALL 	READ_TEMPERATURE
;Most már a BEJOVO1 -ben van a hőmérséklet
	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 	B'10101010'
	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_
	BCF 	CLK
	NOP
	BCF 	DAT
	BTFSC 	KIMENO,0					; HA H AKKOR H-t küldjön
	BSF 	DAT
SEND_VEGE
	CALL 	DELAY
	BSF 	CLK
	RRF 	KIMENO,F
	DECFSZ 	COUNT,F
	GOTO 	SEND_	
	RETURN

RECEIVE
	MOVLW 	D'8'
	MOVWF 	COUNT
	CALL 	DATA_HIGH					; bemenetre kapcsolás
	CLRF 	BEJOVO_TEMP
RECEIVE_
	BCF 	CLK
	BCF 	STATUS,C
	BTFSC 	DAT
	BSF 	STATUS,C
	RRF 	BEJOVO_TEMP,F
	CALL 	DELAY
	BSF 	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
