	list      p=16F628A            
	#include <p16F628A.inc> 
	 ERRORLEVEL	0,	-302	   
	__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & 				_LVP_OFF &_BODEN_OFF  &_MCLRE_ON
	cblock	0x20
	redH,redH_Slave,redSl,redH2
	greenH,greenH_Slave,greenSl,greenH2
	blueH,blueH_Slave,blueSl,blueH2
	slow,slow1,slow2
	sw
	vektor
	reload
	udR,udB,udG	
	w_save,status_save
	endc

#define		green		PORTB,6
#define		blue			PORTB,5
#define		red			PORTB,4

#define		duty			CCPR1L
#define		tflag			INTCON,T0IF
#define		tena			INTCON,T0IE
#define		gie			INTCON,GIE
#define		zero			STATUS,Z
#define		carry		STATUS,C
#define		dc			STATUS,DC	
#define		status		STATUS

#define		redsw		PORTB,0
#define		greensw		PORTB,1
#define		bluesw		PORTB,2

#define		rbena		INTCON,RBIE
#define		rbflag		INTCON,RBIF

	org	0
	goto		start
	org	4
	bcf		tflag

; SAVE-----------------------
	movwf	w_save	
	movf	status,w		
	movwf	status_save
;------------------------------
;-----------MANUAL--SWITH'S------------------------
manual
;-------------------------RED---------------------
	btfsc		redSl,0
	goto		wait
	btfss		redsw
	incf		udR,f
	
wait
	btfss		redsw		
	bsf		redSl,0
	btfsc		redsw	
	bcf		redSl,0
	
	movlw	0xff
	subwf	redH_Slave,w
	btfsc		zero
	goto		up_R	

	btfsc		udR,0
	goto		up_R
	btfss		redsw
	incf		redH_Slave,f		
up_R
	movlw	1h
	subwf	redH_Slave,w
	btfsc		zero
	bsf		sw,0
	btfss		zero	
	bcf		sw,0
	btfsc		zero
	goto		_blue
	btfss		udR,0
	goto		_blue
	btfss		redsw
	decf		redH_Slave,f
_blue

	bcf		zero
;-------------------------BLUE---------------------
	btfsc		blueSl,0
	goto		wait1
	btfss		bluesw
	incf		udB,f
	
wait1
	btfss		bluesw		
	bsf		blueSl,0
	btfsc		bluesw	
	bcf		blueSl,0
	
	movlw	0xff
	subwf	blueH_Slave,w
	btfsc		zero
	goto		up_B	

	btfsc		udB,0
	goto		up_B
	btfss		bluesw
	incf		blueH_Slave,f		
up_B
	movlw	1h
	subwf	blueH_Slave,w
	btfsc		zero
	bsf		sw,1
	btfss		zero	
	bcf		sw,1
	btfsc		zero
	goto		_green
	btfss		udB,0
	goto		_green
	btfss		bluesw
	decf		blueH_Slave,f

_green
	bcf		zero
;-------------------------GREEN---------------------
	btfsc		greenSl,0
	goto		wait2
	btfss		greensw
	incf		udG,f
	
wait2
	btfss		greensw		
	bsf		greenSl,0
	btfsc		greensw	
	bcf		greenSl,0
	
	movlw	0xff
	subwf	greenH_Slave,w
	btfsc		zero
	goto		up_G	

	btfsc		udG,0
	goto		up_G
	btfss		greensw
	incf		greenH_Slave,f		
up_G
	movlw	1h
	subwf	greenH_Slave,w
	btfsc		zero
	bsf		sw,2
	btfss		zero	
	bcf		sw,2
	btfsc		zero
	goto		_end	
	btfss		udG,0
	goto		_end
	btfss		greensw
	decf		greenH_Slave,f

_end	

	clrf		TMR0

;LOAD------------------------

	    movf    status_save,w             
        movwf   status
        swapf   w_save,f
        swapf   w_save,w
;--------------------------------
	retfie

		
start
	clrf		TRISB	
	movlw	.7
	movwf	CMCON
	bsf 		STATUS,RP0	
  	movlw	b'00000111'
	movwf	TRISB
	movlw	b'00000101'			
	movwf	OPTION_REG 
  	bcf 		STATUS,RP0
		
;---------------------------------------------
	bsf		tena					; TMR0 ENGEDÉYLEZÉS
	bsf		gie					;GLOBÁLIS ENGEDÉLYEZÉS

	clrf		slow
	clrf		slow1
	clrf		sw
	clrf		vektor
	
	movlw	.1
	movwf	redH_Slave	
	movwf	blueH_Slave
	movwf	greenH_Slave

;-----------	PROGRAM--LOOP	---------------------
;---------------------------RED-------------------------
d1
	btfss		sw,0
	bsf		red
	decfsz	redH,f
	goto		d1

	comf	redH,f
d0
	bcf		red
	decfsz	redH,f
	goto		d0

	movf	redH_Slave,w
	movwf	redH
;---------------------------BLUE-------------------------
d1b
	btfss		sw,1
	bsf		blue
	decfsz	blueH,f
	goto		d1b

	comf	blueH,f
d0b
	bcf		blue
	decfsz	blueH,f
	goto		d0b


	movf	blueH_Slave,w
	movwf	blueH
;---------------------------GREEN------------------------
d1g
	btfss		sw,2
	bsf		green
	decfsz	greenH,f
	goto		d1g

	comf	greenH,f
d0g
	bcf		green
	decfsz	greenH,f
	goto		d0g


	movf	greenH_Slave,w
	movwf	greenH
	goto		d1


	

	end	
 
	