	LIST P=12F629
	#INCLUDE <P12F629.INC>
	__CONFIG _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

	CBLOCK	0x20
	PWM_PHASE
	RED_PWM
	GREEN_PWM
	BLUE_PWM

	RED_GO
	GREEN_GO
	BLUE_GO
	
	DELAY_REG_SMT_L
	DELAY_REG_SMT_H

	COLOR_INDEX

	TEMP0


	ENDC

BANK0 MACRO
	BCF STATUS,RP0
	ENDM
BANK1 MACRO
	BSF STATUS,RP0
	ENDM


#DEFINE BLUE GPIO,2
#DEFINE GREEN GPIO,1
#DEFINE RED GPIO,0



	ORG 0
	LGOTO BOOT

RED_INDEX
	CALL RED_MOVE
	LGOTO RED_OK
RED_MOVE
   MOVFW COLOR_INDEX
   ADDWF PCL,F

    RETLW D'128'
    RETLW D'51'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'64'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'64'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'51'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'76'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'38'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'90'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'26'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'102'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'13'
    RETLW D'115'
    RETLW D'128'
    RETLW D'128'
    RETLW D'115'
    RETLW D'13'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'102'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'26'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'90'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'38'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'76'
    RETLW D'128'
BLUE_INDEX
	CALL BLUE_MOVE
	LGOTO BLUE_OK
BLUE_MOVE
   MOVFW COLOR_INDEX
   ADDWF PCL,F

    RETLW D'102'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'26'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'102'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'38'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'90'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'51'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'76'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'64'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'64'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'76'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'51'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'90'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'38'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'102'
    RETLW D'13'
    RETLW D'0'
    RETLW D'0'
    RETLW D'26'
    RETLW D'115'
    RETLW D'128'
    RETLW D'128'
    RETLW D'115'
    RETLW D'26'
    RETLW D'0'
    RETLW D'0'
GREEN_INDEX
	CALL GREEN_MOVE
	LGOTO GREEN_OK
GREEN_MOVE
   MOVFW COLOR_INDEX
   ADDWF PCL,F

    RETLW D'0'
    RETLW D'0'
    RETLW D'26'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'90'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'26'
    RETLW D'115'
    RETLW D'128'
    RETLW D'128'
    RETLW D'102'
    RETLW D'13'
    RETLW D'0'
    RETLW D'0'
    RETLW D'13'
    RETLW D'102'
    RETLW D'128'
    RETLW D'128'
    RETLW D'115'
    RETLW D'26'
    RETLW D'0'
    RETLW D'0'
    RETLW D'13'
    RETLW D'90'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'38'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'76'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'51'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'64'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'64'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'51'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'76'
    RETLW D'0'
    RETLW D'0'
    RETLW D'0'
    RETLW D'38'
    RETLW D'128'
    RETLW D'128'
    RETLW D'128'
    RETLW D'90'


BOOT
	movwf	OSCCAL ; 4MHZ ES GYÁRI BEÁLLíTÁS
	
	BANK0
	CLRF GPIO
	MOVLW 0x07
	MOVWF CMCON
	BANK1
	MOVLW B'11111000'
	MOVWF TRISIO
	MOVLW B'00001000'
	MOVWF OPTION_REG
	BANK0
	CLRF GPIO



	BCF INTCON,GIE


	CLRF PWM_PHASE
	CLRF RED_PWM
	CLRF GREEN_PWM
	CLRF BLUE_PWM
	CLRF RED_GO
	CLRF GREEN_GO
	CLRF BLUE_GO
	CLRF TEMP0
	CLRF COLOR_INDEX

	CALL NEW_COLOR
	CLRF TMR0



MAIN ; MINDEN 128. USEC BEN ELINDUL
	CALL COLOR_CHANGE
	CALL PWM_GEN

	BTFSS TMR0,7 	; HA ELÉRTE A 128 AT AKKOR ÚJRAKEZDI
					; EZ BIZTOSíTJA A SZINKRONT
	GOTO $-1 ; HA NEM AKKOR VÁR ÉS TOVÁBB TESZTEL
	CLRF TMR0
	
	GOTO MAIN


;----------------------PWM TASK -----------------------------
PWM_GEN ;
	INCF PWM_PHASE,F
	BTFSS PWM_PHASE,6 ; 0-127 IG ENGEDI FELETTE RESETEL
	GOTO PWM_GEN_2
PWM_RESET
	CLRF PWM_PHASE
	CLRF GPIO ; MINDEN LEDET KIKAPCSOL
PWM_GEN_2
        
	movfw RED_PWM 
	subwf PWM_PHASE,w
	BCF RED
	btfss STATUS,C
	BSF RED ; TRUE

	movfw GREEN_PWM 
	subwf PWM_PHASE,w
	BCF GREEN
	btfss STATUS,C
	BSF GREEN ; TRUE

	movfw BLUE_PWM 
	subwf PWM_PHASE,w
	BCF BLUE
	btfss STATUS,C
	BSF BLUE ; TRUE

	RETLW 0





;----------------------PWM TASK END-----------------------------



COLOR_CHANGE

	; MINDEN XX. MÁSODPERCBEN ELINDíTJA A COLOR_CHANGE_SMOOTH OT
			; IGY MAX XXSEC IG TART EGY TELJES SZíNVÁLTÁS
	; MINDEN XX. MÁSODPERCBEN A NEW_COLOR T


	;MINDEN 2048. COLOR_CHANGE NÉL INDíTJA A ..SMOOTH OT ÉS MINDEN 32. SMOOTH NÁL INDíTJA A NEW_COLORT
	INCF DELAY_REG_SMT_L,F 		;alsó bájt növelése 1-el
	BTFSC STATUS, Z 	;Ha a zero bit 1, akkor…
	INCF DELAY_REG_SMT_H,F 	;felső bájt növelése 1-el
	
	BTFSS DELAY_REG_SMT_H,1 ; KELL E FUTTATNI A COLOR_SMOOTH OT
	RETLW 0 
	
	CLRF DELAY_REG_SMT_H
	CLRF DELAY_REG_SMT_L
	


COLOR_CHANGE_SMOOTH 
; FINOMAN ELTOLJA A R/G/B_GO FELÉ A R/G/B_PWM ET
; 26 UTASíTÁS ALATT FUT LE (+ A 2 MEGHíVÁS)
;A 26 BAN BENNE VAN A FULL VISSZATÉRÉS IS

;RED
	movf RED_PWM,w	; HA REDPWM NAGYOBB MINT RED_GO AKKOR CSÖKKENTI
	subwf RED_GO,w   
	btfsS STATUS,C
	DECF RED_PWM,F

	movf RED_GO,w      ; HA REDPWM KISSEBB MINT RED_GO AKKOR NÖVELI
	subwf RED_PWM,w     
	btfsS STATUS,C   
	INCF RED_PWM,F

;GREEN

	movf GREEN_PWM,w
	subwf GREEN_GO,w   
	btfss STATUS,C
	DECF GREEN_PWM,F

	movf GREEN_GO,w
	subwf GREEN_PWM,w     
	btfss STATUS,C   
	INCF GREEN_PWM,F 
;BLUE

	movf BLUE_PWM,w
	subwf BLUE_GO,w   
	btfsS STATUS,C
	DECF BLUE_PWM,F

	movf BLUE_GO,w
	subwf BLUE_PWM,w     
	btfsS STATUS,C   
	INCF BLUE_PWM,F



	INCF TEMP0,F
	MOVF TEMP0,F
	BTFSS STATUS,Z
	RETLW 0
	CLRF TEMP0
NEW_COLOR

	LGOTO RED_INDEX
RED_OK
	MOVWF RED_GO


	LGOTO BLUE_INDEX
BLUE_OK
	MOVWF BLUE_GO


	LGOTO GREEN_INDEX
GREEN_OK
	MOVWF GREEN_GO

	INCF COLOR_INDEX,F
	BTFSS COLOR_INDEX,6 ; HA 64 VAGY NAGYOBB AKKOR RESETEL 0 RA
	RETLW 0
	CLRF COLOR_INDEX
	RETLW 0



	END