list p=16f887

	ERRORLEVEL 0, -302  ; suppress bank selection messages
#include <p16F887.inc>

	CBLOCK	0X21
	var1
	var2
	var3
	varj1
	varj2
	varj3
	COMMON
	COMMON2
	COMMON3
	MÓD
	MÓD_IDŐ
	TIME0
	TIME2
	SZAMOL0
	SZAMOL1
	SZAMOL2
	SZAMOL3
	SZAMOL4
	SZAMOL5
	SZAMOL6
	SZAMOL7
	SZAMOL8
	SZAMOL9
	SZAMOL00
	SZAMOL11
	SZAMOL22
	SZAMOL55
	SZAMOL66
	SZAMOL77
	ADATOM
	CÍMEM
	KOZTES
	ADAT
	W_SAVE
	STATUS_SAVE
	PCLATH_SAVE
	BAL_IDŐ_ADAT
	JOBB_IDŐ_ADAT
	ELTELT_BAL
	ELTELT_JOBB
	BEÁLLÍTOTT_BAL
	BEÁLLÍTOTT_JOBB
	WÖRK
	WÖRK2
	FIDE_LÉPÉS
	DATA_EE_ADDR
	DATA_EE_DATA
	EEPROM_SEGÉD
	LÉPÉS2
	LÉPÉS3
	LÉPÉS4
	LÉPÉS7
	LÉPÉS8
	LÉPÉS9
	ENDC
BANK0	macro			; Select register BANK 0
	bcf     STATUS,RP0
	bcf     STATUS,RP1
	endm
	
BANK1	macro			; Select register BANK 1
	bsf     STATUS,RP0
	bcf     STATUS,RP1
	endm

BANK2	macro			; Select register BANK 2
	bcf     STATUS,RP0
	bsf     STATUS,RP1
	endm

BANK3	macro			; Select register BANK 3
	bsf     STATUS,RP0
	bsf     STATUS,RP1
	endm
;#################################################################################
LAP0	macro			; Select LAP0
	BCF 	PCLATH,3 	;az 0. lap beállítása
  	BCF 	PCLATH,4 	;az 0. lap beállítása
	endm
LAP1	macro			; Select LAP1
	BSF 	PCLATH,3 	;az 1. lap beállítása
  	BCF 	PCLATH,4 	;az 1. lap beállítása
	endm
LAP2	macro			; Select LAP2
	BCF 	PCLATH,3 	;az 2. lap beállítása
  	BSF 	PCLATH,4 	;az 2. lap beállítása
	endm
LAP3	macro			; LAP3
	BSF 	PCLATH,3 	;az 3. lap beállítása
  	BSF 	PCLATH,4 	;az 3. lap beállítása
	endm
;#################################################################################
#DEFINE		DP6		PORTA,5	; 
#DEFINE		DP5		PORTA,4	; 
#DEFINE		BLANK_J	PORTA,3	; JOBB OLDALI BLANK
#DEFINE		RELE	PORTA,2	; RELÉ KIMENET
#DEFINE		JOBB	PORTA,1	; JOBB GOMB
#DEFINE		BAL		PORTA,0	; BAL  GOMB

#DEFINE		FEL		PORTB,7	; FEL  GOMB
#DEFINE		LE		PORTB,6	; LE   GOMB
#DEFINE		MOD		PORTB,5	; MÓD  GOMB
#DEFINE		SZUNET	PORTB,4	; SZÜNET KAPCSOLÓ
#DEFINE		JOBB_L	PORTB,3	; JOBB OLDALI LED
#DEFINE		BAL_L	PORTB,2	; BAL  OLDALI LED
#DEFINE		HANGSZ	PORTB,1	; HANGSZÓRÓ
#DEFINE		OPTO	PORTB,0	; NYITOTT OPTOKAPU

#DEFINE		DP4		PORTC,7	; 
#DEFINE		DP3		PORTC,6	; 
#DEFINE		DP2		PORTC,5	; 
#DEFINE		DP1		PORTC,2	; 
#DEFINE		DP0		PORTC,1	; 
#DEFINE		BLANK_B	PORTC,0	; BAL  OLDALI BLANK

#DEFINE		DP9		PORTE,2	; 
#DEFINE		DP8		PORTE,1	; 
#DEFINE		DP7		PORTE,0	; 
;#############################################################[ Megszakítások ]
	ORG		0				; Reset Vector, LAP 0
	GOTO	init
	ORG		4				; Interrupt Vector
							; Elmentjük a Work és Status regisztereket
	MOVWF	W_SAVE			; Először a Work regisztert
	SWAPF	STATUS,W		; Swap status to be saved into W
	MOVWF	STATUS_SAVE		; Swaps are used because they do not affect the status bits
	MOVFW	PCLATH			; 
	MOVWF	PCLATH_SAVE		; 
	CLRF	PCLATH
;	BTFSC	INTCON,RBIF		; 4:7-EN TÖRTÉNT A MEGSZAKÍTÁS?
;	GOTO	RB47			; KEZELD LE

	BTFSC	INTCON,T0IF		; TIMER0 OKOZTA A MEGSZAKÍTÁST?
	GOTO	TIMER0			; KEZELD LE
	
;	BTFSC	PIR1,TMR2IF		; TIMER2 OKOZTA A MEGSZAKÍTÁST?
;	GOTO	TIMER2			; KEZELD LE
	
	
	
	GOTO	RET
;################################################################## [RB4:7 MEGSZAKÍTÁSOK]
;RB47
;	BCF		INTCON,RBIF		; Töröljük az RBIF flag bitet (Jelezzük, kezeltük a megszakítást RB4:7)
;
;	BTFSC	FEL				; FEL OKOZTA?
;	GOTO	FEL47			;
;	BTFSC	LE				; LE OKOZTA?
;	GOTO	LE47			;
;	BTFSC	MOD				; MÓD OKOZTA?
;	GOTO	MOD47			;
;	BTFSC	SZUNET			; SZÜNET OKOZTA?
;	GOTO	SZUNET47		;
;	
;FEL47
;	BTFSC	FEL
;	CALL	BIP
;	GOTO	RET
;LE47
;	BTFSC	LE
;	CALL	BIP
;	GOTO	RET
;MOD47
;	BTFSC	MOD
;	CALL	BIP
;	GOTO	RET
;SZUNET47
;	BTFSC	SZUNET
;	CALL	BIP
;	GOTO	RET
;################################################################## [TIMER0 MEGSZAKÍTÁS]
TIMER0
	BCF		INTCON,T0IF		; Töröljük az T0IF flag bitet (Jelezzük, kezeltük a megszakítást timer0)

	BTFSC	COMMON2,7
	GOTO	BAL_T0	
	BTFSC	COMMON2,6
	GOTO	JOBB_T0
	
	GOTO	RET
JOBB_T0
	INCF	TIME0,1			; NÖVELJÜK TIME0-ÁT. A FÁJLBA KERÜL AZ ÚJ EREDMÉNY
	MOVF	TIME0,0			; LEMÁSOLJUK w-BE
	ADDLW	d'231'			; 231
	BTFSC	STATUS,0		; TÚLCSORDULT-E?
	GOTO	CSORDULT1		; IGEN? ÁLLÍTSD BE
	GOTO	RET				; NEM
CSORDULT1
	BSF		COMMON,0		; BIT BEÁLLÍTÁSA
	CLRF	TIME0			; KÖZTES BIT TÖRLÉSE
	GOTO	RET				; VISSZATÉRÉS A MEGSZAKÍTÁSBÓL
BAL_T0
	INCF	TIME2,1			; NÖVELJÜK TIME0-ÁT. A FÁJLBA KERÜL AZ ÚJ EREDMÉNY
	MOVF	TIME2,0			; LEMÁSOLJUK w-BE
	ADDLW	d'231'			; 231
	BTFSC	STATUS,0		; TÚLCSORDULT-E?
	GOTO	CSORDULT2		; IGEN? ÁLLÍTSD BE
	GOTO	RET				; NEM
CSORDULT2
	BSF		COMMON,5		; BIT BEÁLLÍTÁSA
	CLRF	TIME2			; KÖZTES BIT TÖRLÉSE
	GOTO	RET				; VISSZATÉRÉS A MEGSZAKÍTÁSBÓL
;################################################################## [TIMER0 MEGSZAKÍTÁS]
;TIMER2
;	BCF		PIR1,TMR2IF		; Töröljük az T2IF flag bitet (Jelezzük, kezeltük a megszakítást timer0)
;
;	BTFSS	COMMON2,6
;	GOTO	RET
;	INCF	TIME2,1			; NÖVELJÜK TIME0-ÁT. A FÁJLBA KERÜL AZ ÚJ EREDMÉNY
;	MOVF	TIME2,0			; LEMÁSOLJUK w-BE
;	ADDLW	d'244'			; 
;	BTFSC	STATUS,0		; TÚLCSORDULT-E?
;	GOTO	CSORDULT2		; IGEN? ÁLLÍTSD BE
;	GOTO	RET				; NEM
;CSORDULT2
;	BSF		COMMON,5		; BIT BEÁLLÍTÁSA
;	CLRF	TIME2			; KÖZTES BIT TÖRLÉSE
;	GOTO	RET				; VISSZATÉRÉS A MEGSZAKÍTÁSBÓL

RET
	SWAPF	STATUS_SAVE,W		; Visszatöltjük a Work és Status regisztereket
	MOVWF	STATUS
	MOVFW	PCLATH_SAVE		; 
	MOVWF	PCLATH
	MOVFW	W_SAVE
	RETFIE					; Visszajövünk az interruptból 
	GOTO	init
		
;	ORG     5
;#############################################################[ BEÁLLÍTÁSOK ]
init
	CLRWDT					;Clear WDT and prescaler
	BANKSEL	OPTION_REG		;
	MOVLW	b'11010000'		; Mask TMR0 select and
	ANDWF	OPTION_REG,W	; prescaler bits
	IORLW	b'00000110'		; Set prescale to 1:128 (másodpercenként 50 megszakítás
	MOVWF	OPTION_REG		; 									3 276 800Hz-en)

	BANKSEL	PORTA			; 
	CLRF	PORTA			; Init PORTA
	BANKSEL	ANSEL			; 
	CLRF	ANSEL			; digital I/O
	BCF		STATUS,RP1		; Bank 1
	BANKSEL	TRISA			; 
	MOVLW	b'000011'		; Set RA<1:0> as inputs; JOBB, BAL NYOMÓGOMBOK
	MOVWF	TRISA			; and set RA<5:4,1:0> as outputs

	BANKSEL	PORTB			; 
	CLRF	PORTB			; Init PORTA
	BANKSEL	ANSELH			; 
	CLRF	ANSELH			; digital I/O
	

	BANKSEL	TRISB			;
	MOVLW	b'11110001'		; FEL, LE, MÓD, SZÜNET, J LED, B LED, HANGSZ., NYITOTT OPTOCSATOLÓ
	MOVWF	TRISB			;

	BANKSEL	TRISC			; TIZEDESPONTOK
	MOVLW	b'00011000'		;
	MOVWF	TRISC			; KIMENETEK

	BANKSEL	TRISD			; KIVÁLASZT ÉS ADAT
	CLRF	TRISD			; KIMENETEK

	BANKSEL	PORTE			; 
	CLRF	PORTE			; 
	BANKSEL	ANSEL			;
	CLRF	ANSEL			; digital I/O
	BCF		STATUS,RP1		; Bank 1
	BANKSEL	TRISE			; TIZEDESPONTOK
	CLRF	TRISE			; KIMENETEK

	BANKSEL	PORTA
	CLRF	PORTA
	CLRF	PORTB
	CLRF	PORTC
	CLRF	PORTD
	CLRF	PORTE
;	MOVLW	b'11111111'
;	MOVWF	T2CON

	CLRF	var1
	CLRF	var2
	CLRF	var3
	CLRF	varj1
	CLRF	varj2
	CLRF	varj3
	CLRF	COMMON
	CLRF	COMMON2
	MOVLW	b'00001000'
	MOVWF	COMMON3
	CLRF	TIME0
	CLRF	TIME2
	MOVLW	d'1'
	MOVWF	MÓD
	MOVLW	d'3'
	MOVWF	MÓD_IDŐ
	CLRF	SZAMOL0
	CLRF	SZAMOL1
	CLRF	SZAMOL2
	CLRF	SZAMOL3
	CLRF	SZAMOL4
	CLRF	SZAMOL5
	CLRF	SZAMOL6
	CLRF	SZAMOL7
	CLRF	SZAMOL8
	CLRF	SZAMOL9
	CLRF	SZAMOL00
	CLRF	SZAMOL11
	CLRF	SZAMOL22
	CLRF	SZAMOL55
	CLRF	SZAMOL66
	CLRF	SZAMOL77
	CLRF	ADATOM
	CLRF	CÍMEM
	CLRF	KOZTES
	CLRF	ADAT
	CLRF	W_SAVE
	CLRF	STATUS_SAVE
	CLRF	BAL_IDŐ_ADAT
	CLRF	JOBB_IDŐ_ADAT
	CLRF	ELTELT_BAL
	CLRF	ELTELT_JOBB
	MOVLW	d'0'
	MOVWF	BEÁLLÍTOTT_BAL
	MOVLW	d'0'
	MOVWF	BEÁLLÍTOTT_JOBB
	CLRF	DATA_EE_ADDR
	CLRF	DATA_EE_DATA
	CLRF	EEPROM_SEGÉD
	
	CLRF	LÉPÉS2
	CLRF	LÉPÉS3
	CLRF	LÉPÉS4
	CLRF	LÉPÉS7
	CLRF	LÉPÉS8
	CLRF	LÉPÉS9


	BANK0
	MOVLW	B'00101000'		
	MOVWF	SSPCON			;I2C MASTER MODE BEKAPCSOLVA
	BANK1
	MOVLW	B'00101000'
	MOVWF	SSPCON2			;I2C ALAPHELYZET	
	BSF		SSPSTAT,SMP		;SLEW RATE CONTROL DISABLED
	BCF		SSPSTAT,CKE		;DISABLE SMBUS SPECIFIC INPUTS
	MOVLW	B'00011111'
	MOVWF	SSPADD			;SEBESSÉG BEÁLLÍTÁS

;	BANK1
;	MOVLW	b'00001010'
;	MOVWF	PIE1
;	MOVLW	b'11110000'
;	MOVWF	IOCB			; RB4:7-HEZ KELL, HOGY MELYIK GOMBRA LEGYEN ENGEDÉLYEZVE AZ I.

	BANK0
	BSF		INTCON,T0IE		; 5 Engedélyezzük az interruptot az INT0-ra
	BSF		INTCON,PEIE		; 6 PEIE: Peripheral Interrupt Enable bit
;	BSF		INTCON,RBIE		; 3 Engedélyezzük az interruptot az RB4:7-re
	BSF		INTCON,GIE		; 7 General Interrupt Enable bitet 1-re állítva 
;	
;#############################################################[ PROGRAM KEZDETE ]



	MOVLW	b'00000000'
	MOVWF	COMMON3

	LAP1
	CALL	EEPROMBA		; EEPROMBA MENTI A PILLANATNYI ÁLLÁST
	LAP0

SEMMI	NOP
	GOTO	SEMMI

;######################################################################################
;######################################################################################
;######################################################################################
;######################################################################################
;######################################################################################
	ORG		0x0800	; LAP1
;###################################################################[EEPROMBA VALÓ]######
;###################################################################[EEPROMBA VALÓ]######
EEPROMBA
	MOVF	SZAMOL0,W			; EEPROM DATA
	MOVWF	DATA_EE_DATA
	MOVLW	0X00				; EEPROM HEXA ADDRESS
	CALL	EEPROM_WRITE

	MOVF	SZAMOL1,W			; EEPROM DATA
	MOVWF	DATA_EE_DATA
	MOVLW	0X01				; EEPROM HEXA ADDRESS
	CALL	EEPROM_WRITE

	

	RETURN
	
;###################################################################[EEPROM ÍRÁS]######
;###################################################################[EEPROM ÍRÁS]######
EEPROM_WRITE
	BANKSEL	EEADR			; DATASHEETBŐL
;	MOVF	DATA_EE_ADDR,W	; 
	MOVWF	EEADR			; Data Memory Address to write
	BANK0
	MOVF	DATA_EE_DATA,W	; 
	BANKSEL	EEDAT
	MOVWF	EEDAT			; Data Memory Value to write
	BANKSEL	EECON1			; 
	BCF		EECON1, EEPGD	; Point to DATA memory
	BSF		EECON1, WREN	; Enable writes
	BCF		INTCON, GIE		; Disable INTs.
	BTFSC	INTCON, GIE		; SEE AN576
	GOTO	$-2
	MOVLW	0X55				; 
	MOVWF	EECON2			; Write 55h
	MOVLW	0XAA			; 
	MOVWF	EECON2			; Write AAh
	BSF		EECON1, WR		; Set WR bit to begin write
	BSF		INTCON, GIE		; Enable INTs.
;	SLEEP					; Wait for interrupt to signal write complete
	BCF		EECON1, WREN	; Disable writes
;	BANK0					; BANK0
EEPROM_VERIFY
	BANKSEL	EEDAT			; 
	MOVF	EEDAT, W		; EEDAT not changed from previous write
	BANKSEL	EECON1			; 
	BSF		EECON1, RD		; YES, Read the value written
	BANKSEL	EEDAT			; 
	XORWF	EEDAT, W		;  
	BTFSS	STATUS, Z		; Is data the same
	GOTO	WRITE_ERR		; No, handle error
							; Yes, continue
	BANK0
	BCF		COMMON3,4		; ERROR TÖRLÉSE
	RETURN					; VISSZATÉRÉS
WRITE_ERR
	BTFSC	COMMON3,4		; ELŐTTE ELRONTOTTA AZ ÍRÁST?
	GOTO	EEPROM_FAIL		; 2. RONTÁS -> FAIL
	BSF		COMMON3,4		; 1X HIBÁZHAT
	GOTO	EEPROM_WRITE
EEPROM_FAIL
	BANK0
	BCF		DP0
	BCF		DP2
	BCF		DP4
	BCF		DP5
	BCF		DP7
	BCF		DP9
	BSF		BAL_L
	BSF		JOBB_L
QWQ
	NOP
	GOTO	QWQ
;######################################################################################

	END
