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
basz
Low cost Mantis CNC bouwebeschrijving zie www.basmolkenboer.nl
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
Henry S.
Moderator
Confucius says chà bù duo. Deze post is niet door ChatGPT gegenereerd. De 2019 CO labvoeding.