BESTURINGSTECHNIEK
; Eindopdracht - Interrupt - ledjes van links naar rechts laten knipperen en wanneer er op het knopje (SW1) word gedrukt,
; alle vier de ledjes 4x tegelijk laten knipperen en vervolgens doorgaan met waar die mee bezig was.

#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

cblock 0x20
Display
Counter
endc
; Flag Definitions

cblock 0x70 ; put these up in unbanked RAM
W_Save
STATUS_Save
endc

org 0 ;start processor
goto Start
nop ; wacht (1)
nop ; wacht (2)
nop ; wacht (3)
ISR
movwf W_Save ; org 4
movf STATUS,w
movwf STATUS_Save

btfsc INTCON,T0IF
goto ServiceTimer0
goto ExitISR

ServiceTimer0

bcf INTCON,T0IF ; clear the interrupt flag. (must be done in software)
movf Counter,w
btfss STATUS, Z ; Test of de counter 0 is
goto Zerostate

movlw 0x0F
xorwf PORTC,f ; Bitjes van PortC geflipt
decf Counter
goto ExitISR

ExitISR

movf STATUS_Save,w
movwf STATUS
swapf W_Save,f
swapf W_Save,w
retfie

Start

bsf STATUS,RP0 ; select Register Page 1
movlw 0xFF
movwf TRISA ; Make PortA all input
clrf TRISC ; Make PortC all output

movlw B'10000001' ;
movwf OPTION_REG ; configure
; bcf STATUS,RP0 ; back to Register Page 0

bcf STATUS,RP0 ; address Register Page 2
bsf STATUS,RP1
movlw 0 ;
movwf ANSEL
bcf STATUS,RP0 ; address Register Page 0
bcf STATUS,RP1

movlw B'10100000' ;
movwf INTCON

clrf Counter

MainLoop

btfsc PORTA,3 ; is the switch pressed (0)
goto Zerostate ; nee
movlw 4 ; ja, Counter=4
movwf Counter ;
movf Display,w ; Copy the display to the LEDs
movwf PORTC
goto MainLoop

Zerostate

movlw 0x0F
movwf Display

movf Display,w
movwf PORTC

bcf STATUS,C ; ensure the carry bit is clear
rrf Display,f
btfsc STATUS,C ; Did the bit rotate into the carry?
bsf Display,3 ; yes, put it into bit 3.
goto MainLoop

return

end

Weet iemand wat er verkeerd gaat, want de ledjes branden alle tegelijk bij mij

de subroutine "zerostate" kan je neit uitkomen volgens mij. En loop je code zelf eens goed na. Aan het tweetalige commentaar gezien heb je het grotendeels ergens gejat. Begin dan weer eens met je beginbestand en pas het vandaaruit weer aan naar jou wensen

Bedankt voor je reactie

Kheb de codes met het engelse commentaar "gejat" uit de voorbeelden die zijn meegeleverd op de cdrom.
Maar om uit die zerostate te komen heb ik een call gemaakt met een return (ipv goto MainLoop)

nog steeds hetzelfde probleem

Lees de datasheet nog eens door m.b.t. interrupts en timer0. Er missen de nodige instelingen.