;********************
;*  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

	ORG     0x00		
  	GOTO    START


	CONSTANT BASE = 0x20 	
;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

;Változóblokk
	CBLOCK BASE+d'1'
				COUNT 					;számláló
				KIMENO
				BEJOVO1
				BEJOVO2 
				BEJOVO_TEMP		
	
	ENDC
	;Változóblokk vége

;Include fájlok (a modulok)
	#include "E:\Mentett\forumra\modules\m_bank.asm"
	#include "E:\Mentett\forumra\modules\m_wait.asm"
			
	 

;---- 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'00000001'	
	MOVWF 	KIMENO
	CALL 	SEND						; elküldeni az adatot
	CALL 	VARJ
	BCF 	RST							; tiltás
	WAIT	D'200'

ELEJE
	CALL 	START_CONVERT
	WAIT 	D'255'
	WAIT 	D'255'
	WAIT 	D'255'
	WAIT 	D'255'	
	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 	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_
	BCF 	CLK
	NOP
	BCF 	DAT
	BTFSC 	KIMENO,0					; HA H AKKOR H-t küldjön
	BSF 	DAT
SEND_VEGE
	CALL 	VARJ2
	RRF 	KIMENO,F
	BSF 	CLK
	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 	VARJ2
	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

VARJ2
	WAIT 0x01
	RETURN
		
	END
