Jag sitter och experimenterar lite med mitt Pickit2 och skulle behöva hjälp med att förstå följande kod. Jag har försökt att göra ett program som tänder en lysdiod på demokortet när man håller inne knappen.
Den första koden jag skrev fungerade inte som jag ville men efter att jag ändrade om lite så funkade det men jag fattar inte varför..
Kod: Markera allt
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
org 0
Start:
bsf STATUS,RP0 ; select Register Page 1
movlw 0xFF
movwf TRISA ; Make PortA all input
clrf TRISC ; Make PortC all output
bcf STATUS,RP0 ; address Register Page 2
bsf STATUS,RP1
movlw 0xF7 ; PortA3 pin is digital
movwf ANSEL
bcf STATUS,RP0 ; address Register Page 0
bcf STATUS,RP1
bcf PORTC,0
loop: ;Denna loopen är till för att kolla om knappen blir nertryckt
btfsc PORTA,3 ;Här tycker jag att det borde stå "btfss PORTA,3" men då blir det motsatt effekt och man släcker dioden
goto loop
bsf PORTC,0 ;Ska tända dioden om knappen blir tryckt på
end
Om man börjar med loopen så tycker jag att det borde vara "btfss PORTA,3" istället för "btfsc PORTA,3".
Det är ju meningen att den ska kolla om PORTA,3 är "set" och isåfall "skippa" nästa rad (goto loop-raden). Men jag måste skriva tvärtom för att få det att funka, varför det?
Sedan så förstår jag inte varför programmet loopar om sig om och om igen. Jag förväntade mig att det bara skulle fungera en gång. Jag väntade mig att programmet skulle vänta på att knappen blev intryckt och då tända lysdioden och sen ta slut men programmet släcker lysdioden när man släpper knappen igen och det förstår jag inte riktigt varför?

Skulle vara jättetacksam om någon tog sig tid att hjälpa en stackars nybörjare

/zood