 LIST P=12F675
 #INCLUDE "P12F675.INC"

	__CONFIG _CPD_OFF&_CP_OFF&_BODEN_OFF&_MCLRE_OFF&_PWRTE_OFF&_WDT_OFF&_INTRC_OSC_NOCLKOUT
	;_XT_OSC  

	CBLOCK	0x20			
	VAR	
	VAR2
	TEMP
	TEMP2
	TIMER_INT
	TIMER_ZASZLO
	KAPCSOLO_COUNT
	MINTA_VALTOZO
	ENDC

	#DEFINE LED1 GPIO,0	
	#DEFINE LED2 GPIO,1	
	#DEFINE LED3 GPIO,4
	#DEFINE LED4 GPIO,5

	#DEFINE T0_FLAG TIMER_ZASZLO,0

	ORG	0
	GOTO START
	
 	ORG 0x04            	; Interrupt vektor kötelező helye a 04
	BCF INTCON,GIE			; megszakítás tiltása!	
	GOTO FOMEGSZAKITAS

START 
	CLRF MINTA_VALTOZO
	CLRF KAPCSOLO_COUNT
	BCF T0_FLAG
	MOVLW .245
	MOVWF TIMER_INT
	CLRF TEMP2
	CLRF TEMP

	MOVLW .128
	MOVWF OSCCAL
	BCF STATUS,RP0 		;Bank 0
	CLRF GPIO 			;Init GPIO
	MOVLW b'00000000' 
	MOVWF CMCON 		;digital IO
	BSF STATUS,RP0 		;Bank 1
	CLRF ANSEL			;Digital I/O
	MOVLW b'00001100'	;Set I/O
	MOVWF TRISIO 

START_INT	
	BSF STATUS,RP0 		;Bank 1	
	MOVLW b'11000101'
	MOVWF OPTION_REG
	BSF OPTION_REG,INTEDG	;Interrupt Edge Select bit):
							;1 = Interrupt on rising edge of GP2/INT pin
							;0 = Interrupt on falling edge of GP2/INT pin

	CLRF WPU			; Clear weak pull-up register
	CLRF IOC			; Clear Interrupt-on-change register
	MOVLW b'00010000'   ; set INTE (GP2/INT External Interrupt Enable bit)
	MOVWF INTCON        
	BSF INTCON,T0IE		; TMR0 Overflow Interrupt Enable bit
	BSF INTCON,GIE		; globális megszakítás engedélyezés
	SLEEP				; elküldjük aludni a PIC-et, hogy keveset fogyasszon :)
						; a GPIO2 fogja felébreszteni a PIC-et a SLEEP-ből
	
	BCF STATUS,RP0		;Bank 0
ENDLESS_LOOP
	BSF INTCON,GIE			; megszakítás engedélyezése!
	BCF STATUS,RP0
	MOVLW b'00000111'
	ANDWF KAPCSOLO_COUNT,F	;maszkoljuk, hogy ne csorduljon túl

 	MOVF KAPCSOLO_COUNT,W 	;W = ADAT
  	ADDWF PCL,F 			;közvetett programmemória-címzés
  	GOTO ENDLESS_LOOP		;itt folytatódik, ha KAPCSOLO_COUNT = 0
  	GOTO MINTA_1			;itt folytatódik, ha KAPCSOLO_COUNT = 1
  	GOTO MINTA_2 			;itt folytatódik, ha KAPCSOLO_COUNT = 2
  	GOTO MINTA_3			;itt folytatódik, ha KAPCSOLO_COUNT = 3
	GOTO MINTA_4			;itt folytatódik, ha KAPCSOLO_COUNT = 4
 	GOTO START		    	;itt folytatódik, ha KAPCSOLO_COUNT = 5
	MOVLW .1
	MOVWF KAPCSOLO_COUNT	;ha 6 vagy 7 a változó, akkor 1-et rakunk bele

MINTA_1
	BTFSS T0_FLAG			; túlcsordult-e a számláló
	GOTO ENDLESS_LOOP
	
	COMF MINTA_VALTOZO,F	;komplemens képződik (kvázi BTG az összes bitre... :) )
	BTFSC MINTA_VALTOZO,0
	GOTO MINTA_1_EGY
	BCF STATUS,RP0			;Bank 0
	MOVLW b'11001100'
	ANDWF GPIO,F			;maszkoljuk a LED-eket

	MOVLW .245
	MOVWF TIMER_INT
	BCF T0_FLAG				;töröljük a flaget
	GOTO ENDLESS_LOOP
MINTA_1_EGY
	BCF STATUS,RP0			;Bank 0
	MOVLW b'00110011'
	IORWF GPIO,F			;maszkoljuk a LED-eket

	MOVLW .245
	MOVWF TIMER_INT
	BCF T0_FLAG				;töröljük a flaget
	GOTO ENDLESS_LOOP
;--------ITT VAN VÉGE A MINTA_1-nek!!!!!!!!!!-------


MINTA_2
	BTFSS T0_FLAG			; túlcsordult-e a számláló
	GOTO ENDLESS_LOOP
	
	COMF MINTA_VALTOZO,F	;komplemens képződik (kvázi BTG az összes bitre... :) )
	BTFSC MINTA_VALTOZO,0
	GOTO MINTA_2_EGY
	BCF STATUS,RP0			;Bank 0
	MOVLW b'11001100'
	ANDWF GPIO,F	 		;maszkoljuk a LED-eket

	MOVLW .250
	MOVWF TIMER_INT
	BCF T0_FLAG				;töröljük a flaget
	GOTO ENDLESS_LOOP
MINTA_2_EGY
	BCF STATUS,RP0			;Bank 0
	MOVLW b'00110011'
	IORWF GPIO,F			;maszkoljuk a LED-eket

	MOVLW .250
	MOVWF TIMER_INT
	BCF T0_FLAG				;töröljük a flaget
	GOTO ENDLESS_LOOP
;--------ITT VAN VÉGE A MINTA_2-nek!!!!!!!!!!-------


MINTA_3
	BCF STATUS,RP0
	MOVLW b'00110011'
	IORWF GPIO,F			;maszkoljuk a LED-eket
	GOTO ENDLESS_LOOP
;--------ITT VAN VÉGE A MINTA_3-nak!!!!!!!!!!-------



MINTA_4
	BTFSS T0_FLAG			; túlcsordult-e a számláló
	GOTO ENDLESS_LOOP
	
	COMF MINTA_VALTOZO,F	;komplemens képződik (kvázi BTG az összes bitre... :) )
	BTFSC MINTA_VALTOZO,0
	GOTO MINTA_4_EGY
	BCF STATUS,RP0			;Bank 0
	MOVLW b'00100010'
	XORWF GPIO,F			;maszkoljuk a LED-eket

	MOVLW .245
	MOVWF TIMER_INT
	BCF T0_FLAG				;töröljük a flaget
	GOTO ENDLESS_LOOP
MINTA_4_EGY
	BCF STATUS,RP0			;Bank 0
	MOVLW b'00010001'
	XORWF GPIO,F			;maszkoljuk a LED-eket

	MOVLW .245
	MOVWF TIMER_INT
	BCF T0_FLAG				;töröljük a flaget
	GOTO ENDLESS_LOOP
;--------ITT VAN VÉGE A MINTA_4-nek!!!!!!!!!!-------
	


KIKAPCS
	CLRF GPIO
	BSF INTCON,GIE			; megszakítás engedélyezése!
	SLEEP					;StandBy
	NOP
	MOVLW .1
	MOVWF KAPCSOLO_COUNT
	GOTO KIKAPCS


;--------------------------
FOMEGSZAKITAS
	BTFSC INTCON,INTF		; GP2/INT External Interrupt Flag bit	
	GOTO MEGSZAKITAS		; ha nem a TIMER0 váltotta ki a megszakítást akkor ugrunk a labelra
	BCF INTCON,T0IF			; töröljük a TIMER0 megszakítás jelző bitet
	INCFSZ TIMER_INT,F
	RETFIE
	BSF T0_FLAG
	RETFIE

				
MEGSZAKITAS					;kapcsoló általi megszakítás
	BCF INTCON,INTF			;töröljük a flaget

	CALL S_DELAY			;pergésmentesítés miatt

	INCF KAPCSOLO_COUNT,F	;növeljük a változót, ha történt kapcsoló lenyomás
	BCF INTCON,INTF			;töröljük a flaget
	RETFIE 
;------------



S_DELAY	
	MOVLW d'30'
	MOVWF VAR
DEL3
	MOVLW d'200'
	MOVWF VAR2
DEL4
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ VAR2,f
	GOTO DEL4
	DECFSZ VAR,f
	GOTO DEL3
	RETURN	



	END