LIST P=16F628 #include __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'