		LIST P=16F628
		#include <P16F628.INC>
	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_OFF & _BODEN_OFF

teller		EQU		20h
teller2		EQU		21h
teller3		EQU		22h

			ORG		00h

			movlw	D'7' 		;Waarde 7 naar W
        	movwf	CMCON		;bovenstaande waarde schrijven naar het CMCON register (1Fh)
								;Comparators uitschakelen, alle pinnen beschikbaar als ingang (1) of uitgang (0) 

			BSF		STATUS, RP0	;bit 5 van STATUSregister (03h) setten om van bank 0 naar bank 1 te gaan
        	movlw	00h;		;binaire waarde 0000.0000 schrijven naar W
	        movwf	TRISA		;schrijf bovenstaande waarde naar TRISA	(85h)
	        movwf	TRISB		;schrijf bovenstaande waarde naar TRISB (86h)
			BCF		STATUS, RP0	;bit 5 van STATUSregister (03h) clearen om van bank 1 naar bank 0 te gaan

begin		MOVLW	5			;plaats waarde 5 in W
			MOVWF	teller3		;schrijf waarde naar teller3
begin2		DECFSZ	teller3, 1	;trek 1 af van teller3 en plaats resultaat in teller3
			GOTO	beginprog	;ga naar begin van het programma als teller3 nog geen 0 is
			GOTO	vervolg		;als teller3 0 is, naar 'vervolg' springen

beginprog	MOVLW	0x0F		;plaats 1111.0000 in W
			CALL	place_on	;spring naar 'place_on'

			MOVLW	00h			;plaats 0000.0000 in W
			CALL	place_off	;spring naar 'place_on'

	 		MOVLW	0x0F
			CALL	place_on
		
			MOVLW	00h
			CALL	place_off

	 		MOVLW	0x0F
			CALL	place_on
		
			MOVLW	00h
			CALL	place_off

        	MOVLW	0x0F0		;plaats 0000.1111 in W
			CALL	place_on	;spring naar 'place_on'

			MOVLW	00h			;plaats 0000.0000 in W
			CALL	place_off	;spring naar 'place_off'

	 		MOVLW	0x0F0
			CALL	place_on
		
			MOVLW	00h
			CALL	place_off

	 		MOVLW	0x0F0
			CALL	place_on
		
			MOVLW	00h
			CALL	place_off

			GOTO	begin2		;spring naar begin 2

vervolg		MOVLW	7			;plaats waarde 7 in W
			MOVWF	teller3		;schrijf waarde naar teller3
vervolgb	DECFSZ	teller3, 1	;trek 1 af van teller3 en plaats resultaat in teller3
			GOTO	snel		;ga naar vervolg (snel) van het programma als teller3 nog geen 0 is
			GOTO	wachttijd	;als teller3 0 is, naar 'wachttijd' springen

snel		MOVLW	0x0F		;plaats 1111.0000 in W
			CALL	place_onf	;spring naar 'place_onf'
	
			MOVLW	00h			;plaats 0000.0000 in W
			CALL	place_offf	;spring naar 'place_offf'

            MOVLW	0x0F0		;plaats 0000.1111 in W
			CALL	place_onf

			MOVLW	00h
			CALL	place_offf

			GOTO	vervolgb	;spring naar 'vervolgb'

wachttijd	CALL	delay0ff	;roep 'delayoff (wachttijd) aan
			GOTO	begin		;als 'delayoff' voltooid is, naar 'begin' springen

place_on	MOVWF	PORTB		;plaatst de waarde in W op PORTB (06h)
			CALL	delayaan	;roep wachtlus 'delayaan' aan
			RETLW	00h			;spring terug naar de plek waar deze routine aangeroepen werd, idem voor onderstaande instructies

place_off	MOVWF	PORTB
			CALL	delayuit
			RETLW	00h

place_onf	MOVWF	PORTB
			CALL	delayaan
			RETLW	00h

place_offf	MOVWF	PORTB
			CALL	delayuit2
			RETLW	00h

delayaan    MOVLW	0x028		;plaats (decimale!) waarde 40 in W
        	MOVWF	teller2		;schrijf waarde naar teller2
verder     	MOVWF	teller		;schrijf waarde naar teller
opnieuw 	DECFSZ	teller, 1	;trek 1 af van 'teller' en plaats resultaat in teller
        	GOTO	opnieuw		;spring naar 'opnieuw' <instructie wordt overgeslagen als teller 0 is
        	DECFSZ	teller2, 1	;trek 1 af van 'teller2' en plaats resultaat in teller2
        	GOTO	verder		;spring naar 'verder' <instructie wordt overgeslagen als teller2 0 is
			RETLW	00h			;spring terug naar de plek waar deze routine aangeroepen werd, en hervat het programma
								;idem voor onderstaande instructies

delayuit    MOVLW	0x0AF
        	MOVWF	teller2	
verder2	   	MOVWF	teller
opnieuw2    DECFSZ	teller, 1
        	GOTO	opnieuw2
        	DECFSZ	teller2, 1
        	GOTO	verder2
			RETLW	00h

delayuit2   MOVLW	0x0BE
        	MOVWF	teller2	
verder3    	MOVWF	teller
opnieuw3    DECFSZ	teller, 1
        	GOTO	opnieuw3
        	DECFSZ	teller2, 1
        	GOTO	verder3
			RETLW	00h

delay0ff    MOVLW	0x0FF
        	MOVWF	teller2	
verder4    	MOVWF	teller
opnieuw4    DECFSZ	teller, 1
        	GOTO	opnieuw4
        	DECFSZ	teller2, 1
        	GOTO	verder4
			RETLW	00h

			END
