 LIST P=16F877
 #INCLUDE "P16F877.INC"
 __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF
	CBLOCK	0x20			;A 0x20 egy szabad memória rész kezdő címe
	T1
	AD
	TB1
	T1CS
	T1D
	T2D
	T3D
	T1F
	T2F
	T3F
	TB1TIZ
	TB1EGY
	TSETTIZ
	TSETEGY
	STAT
	CELSIUS
	T1MIN2
	T1CSMIN2
	TF
	TFMIN2
	LCDSTATUS
	T1CONV
	T1CSCONV
	CELSIUSCONV
	AddrR
	AddrW
	cmd
	ENDC

	ORG	0

;----------------------------------------------------------------------------------------------
START
     	MOVLW 	B'01000001' 	;Fosc/8, A/D enabled, Sample Channel 0
	MOVWF 	ADCON0 	;Fosc/8, A/D enabled, Sample Channel 0
	BSF	STATUS,RP0			;BANK1-be átlépünk
	MOVLW	B'00001111'			
	MOVWF	ADCON1	
	MOVLW	B'00011111'		;Betöltjük az akksiba a TRISA-ba irandót
	MOVWF	TRISA			;Beállítjuk a PORTA-t bemenetre (beírjuk a TRISA-ba)
	MOVLW	B'00000000'		;Betöltjük az akksiba a TRISD-be valót
	MOVWF	TRISD
	MOVLW	B'00011000'		;Betöltjük az akksiba a TRISD-be valót
	MOVWF	TRISC			;Beletöltjük (mind kimenet a nulla miatt)
	MOVLW	B'00111100'
	MOVWF	TRISB
	MOVLW	B'00000011'
	MOVWF	TRISE
	BCF	STATUS,RP0			;BANK0-ba visszalépünk    
	CLRF	STAT
	CLRF	PORTD
	CLRF	PORTC
	CLRF	TSETEGY
	CLRF	TSETTIZ
	CLRF	TB1EGY	
	CLRF	TB1TIZ
	MOVLW	D'5'
	MOVWF	TF
	MOVLW	D'3'
	MOVWF	TFMIN2
	MOVLW	D'20'
	MOVWF	T1
	MOVLW	D'10'
	MOVWF	T1CS
;----------------------------------------------------------------------------------------------
	BTFSC	PORTA,5
	GOTO	KIJELZO
SLAVE
	BSF		STATUS,RP0		;BANK1-be átlépünk
	BSF		TRISB,6
	BCF		STATUS,5		;a 0. adatmemória lap kiválasztása
	BSF		STAT,6

;----------------------------------------------------------------------------------------------
KIJELZO
	CLRF	PORTD
	CLRF	PORTC
	MOVLW	B'00001100'			;KIJELZŐ BE
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD
	
	MOVLW	B'00111000'			;5X7 KARAKTER
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD

	MOVLW	B'00000010'			;KURZUR ALAPHELYZETBE
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD

	MOVLW	B'00000001'			;KIJELZŐ TÖRLÉS
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD



LCD
	CLRF	TB1EGY
	CLRF	TB1TIZ
	CLRF	CELSIUS
	CLRF	PORTD
	BCF	PORTC,2
	CALL	DELAY
	MOVLW	B'00000010'			;KURZUR ALAPHELYZETBE
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD	
	BSF		PORTC,2			; ÁTVÁLTÁS BEVITELRE
	CALL	DELAYD
	CALL DELAY
	MOVLW	0X54			;SZÖVEG BEVITEL 
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD

	MOVLW	0X69			;SZÖVEG BEVITEL
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD

	MOVLW	0X6E			;SZÖVEG BEVITEL
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD

	MOVLW	0X3A		;SZÖVEG BEVITEL
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD

	CALL	readtemp
	CALL	CELSIUSTOBCD
	CALL	BCDTOLCD

	MOVFW	TB1TIZ			;SZÖVEG BEVITEL
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD

	MOVFW	TB1EGY			;SZÖVEG BEVITEL
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD

	MOVLW	0XDF			;SZÖVEG BEVITEL
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD
	
	MOVLW	0X43			;SZÖVEG BEVITEL K
	MOVWF	PORTD
	CALL 	DISPLAY
	CLRF	PORTD
	GOTO		LCD

;----------------------------------------------------------------------------------------------

CELSIUSTOBCD
	MOVFW	CELSIUS
	MOVWF	CELSIUSCONV
T2 	movlw 	0x0A 	;-10 kölcsönig ismételve
  	subwf 	CELSIUSCONV,0 	 
  	btfss 	STATUS,0 	 
  	goto 	T15 	 
  	movwf 	CELSIUSCONV	 
  	incf 	TB1TIZ,1 	 
  	goto 	T2 	 
T15 	
	movf 	CELSIUSCONV,0 	
  	movwf 	TB1EGY	
	RETURN
;----------------------------------------------------------------------------------------------

BCDTOLCD

	MOVFW	TB1EGY
	ADDLW	B'00110000'
	MOVWF	TB1EGY
	MOVFW	TB1TIZ
	ADDLW	B'00110000'
	MOVWF	TB1TIZ
	RETURN
;----------------------------------------------------------------------------------------------
DISPLAY
	BSF	PORTC,0
	CALL	DELAY
	BCF	PORTC,0
	RETURN
;----------------------------------------------------------------------------------------------

DELAY						;Delay labelje
	MOVLW	d'1'			
	MOVWF	T1F				;T1-be bekerül a 200
DELF
	MOVLW	d'5'
	MOVWF	T2F				;T2-be bekerül a 255
DEL1F
	MOVLW	d'10'
	MOVWF	T3F				;T3-ba bekerült a 10
DEL2F
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ	T3F,f			;Csökkenti a T3-at, addíg, amig nem nulla
	GOTO	DEL2F			; mindig visszaugruk a DEL2-re, vagyis a sok NOP-ra
	DECFSZ	T2F,f			;Ha már nulla, akkor ugyanez eljátszódik a T2-vel
	GOTO	DEL1F
	DECFSZ	T1F,f			;Majd a T1-el is
	GOTO	DELF
	RETURN	
;----------------------------------------------------------------------------------------------	
DELAYD						;Delay labelje
	MOVLW	d'10'	
	MOVWF	T1D				;T1-be bekerül a 200
DELD
	MOVLW	d'50'
	MOVWF	T2D				;T2-be bekerül a 255
DEL1D
	MOVLW	d'200'
	MOVWF	T3D				;T3-ba bekerült a 10
DEL2D
	DECFSZ	T3D,f			;Csökkenti a T3-at, addíg, amig nem nulla
	GOTO	DEL2D		; mindig visszaugruk a DEL2-re, vagyis a sok NOP-ra
	DECFSZ	T2D,f			;Ha már nulla, akkor ugyanez eljátszódik a T2-vel
	GOTO	DEL1D
	DECFSZ	T1D,f			;Majd a T1-el is
	GOTO	DELD
	RETURN
;--------------------------------------------------------------------

;============================================================
IdleI2C			;SZUBRUTIN
	BSF			STATUS,RP0
IDE
	MOVFW		SSPCON2
	ANDLW   	0x1F
	MOVWF		SSPCON2

	MOVF 		SSPCON2,1
	BTFSC 		STATUS,2
	GOTO  		$+2
	GOTO  		IDE

IDE1
	BCF		STATUS,2
	MOVFW		SSPSTAT
	ANDLW   	0x04
	SUBLW	B'10000000'
	BTFSS		STATUS,2
	GOTO  		$+2
	GOTO  		IDE1

RETURN
;-------------------------------------
StartI2C		;SZUBRUTIN

	BSF			STATUS,RP0
	BSF			SSPCON2,SEN
RETURN
;-------------------------------------
StopI2C			;SZUBRUTIN

	BSF			STATUS,RP0
	BSF			SSPCON2,PEN
RETURN
;-------------------------------------
WriteI2C		;SZUBRUTIN//A MEGHÍVÁS ELŐTT W-BE 
				;KELL RAKNI A KÜLDENDŐ ADATOT

	BCF			STATUS,RP0
	MOVWF		SSPBUF		
	BTFSC		SSPCON,WCOL
	RETURN		

	BSF			STATUS,RP0
IDE3
	BSF		SSPSTAT,BF
	BCF		STATUS,RP0
	BCF		PIR1,SSPIF
	BSF		STATUS,RP0
	BTFSC		SSPSTAT,BF
	GOTO		IDE3

	CALL 		IdleI2C	

RETURN
;--------------------------------------	
ReadI2C			;SZUBRUTIN//MEGHÍVÁS UTÁN A W-BE KERÜL 
				;AZ OLVASOTT ADAT
	
	BSF			STATUS,RP0
	BSF			SSPCON2,RCEN
IDE4
	BTFSC		SSPSTAT,BF
	GOTO		$+2
	GOTO		IDE4
	BCF			STATUS,RP0
	MOVF		SSPBUF,0

RETURN
;----------------------------------------
readtemp		;SZUBRUTIN

	;I2C init
	BSF			STATUS,RP0
	MOVLW		B'00011000'
	MOVWF		TRISC	;input (SDA)input (SCL)
	MOVLW		0x80		
	MOVWF		SSPSTAT ;Disable SMBus & Slew Rate Control 	
	BCF			STATUS,RP0

	MOVLW		0x28			
	MOVWF		SSPCON 	;Enable MSSP Master	//0b00101000 bit5=1: MSSP engedelyezese
					  	; utolso 4 bit (SSPM3:0) 1000-nak kellene lennie I2C Master modhoz
  	BSF			STATUS,RP0
	MOVLW		D'9'  	
	MOVWF		SSPADD  ;Should be D'99' for 100kHz ha 10MHz, 
					  	;szamitasaim szerint D'99' a kivant 10kHz-hez, ha a kristaly 4MHz-es
	MOVLW		0x00   	
	MOVWF		SSPCON2 ;Clear MSSP Conrol Bits
	BCF			STATUS,RP0	
	;utasitas kuldese a homerseklet kiolvasasara
	CALL		IdleI2C
	BCF			STATUS,RP0
	CALL		StartI2C

IDE5
	BTFSC		SSPCON2,SEN	
	GOTO		IDE5

	MOVLW		B'10010000' ;AddrW
	CALL		WriteI2C	

	MOVLW		0X0			;CMD
	CALL		WriteI2C

	CALL		StartI2C
IDE6
	BTFSC		SSPCON2,SEN
	GOTO		IDE6

	MOVLW		B'10010001'	;AddrR
	CALL		WriteI2C
	CALL		ReadI2C
	MOVWF		CELSIUS
	call			StopI2C


RETURN



	END