Ja, du har rätt, du bara uttrycker dig lite konstigt/annorlunda...
En pinne med de analoga funktionerna *påslaget* (viket ju var alla pinnarna
utom en, RA5, eller hur), kommer att sättas till "1" i den instruktionen som sätter
just *den* pinnen, men till "0" när du sätter alla andra pinnar på samma port.
T.ex om vi antar att hela PORTA är "0" från början :
bsf PORTA,0 ; PORTA = "00000001"
bsf PORTA,1 ; PORTA = "00000010"
bsf PORTA,2 ; PORTA = "00000100"
bsf PORTA,4 ; PORTA = "00001000"
bsf PORTA,5 ; PORTA = "00010000"
Vid nästa loop blir det :
bsf PORTA,0 ; PORTA = "00010001"
bsf PORTA,1 ; PORTA = "00010010"
bsf PORTA,2 ; PORTA = "00010100"
bsf PORTA,4 ; PORTA = "00011000"
bsf PORTA,5 ; PORTA = "00010000"
Notera att RA5 behåller sin "1" eftersom den inte har några analoga funktioner
och alltså läses som just "1" av BSF instruktionen. Därför lyste lysdioden
på RA5 normalt.
Om du hade läst databladet ordentligt och slagit av de analoga funktioner hade det blivit :
bsf PORTA,0 ; PORTA = "00000001"
bsf PORTA,1 ; PORTA = "00000011"
bsf PORTA,2 ; PORTA = "00000111"
bsf PORTA,4 ; PORTA = "00001111"
bsf PORTA,5 ; PORTA = "00011111"
Och det var väl det du ville ha, eller ur ?
Sen, sluta omedelbart med det där "får ström" och "ger ström", du gör
det bara svårare för sig själv att förstå med sådana där konstigheter.
> endast när processorn läser just den kodraden,
"Läser* låter lite konstigt. "Utför" eller "exekverar" är vanligare. I nödfall "kör".
Men det var nog det du menade...
Några andra kommenterarer kring din kod...
Jag vet inte, men det verkar inte som du har gjort speciellt mycket för
att felsöka ? Du har gjort det svårare än nödvändigt för dig genom att skriva
en kod som gör för mycket på en gång. Du skulle kunna ha satt enbart en pinne
åt gången t.ex. Det är också onödigt att loopa tillbaka till starten och köra om
allt hela tiden. Om du inte hade gjort det så hade du märkt att alla pinnar utom RA5
hade varit "0" (helt "släckt"). Du lurades du att tro att de lyste svagt istället, vilket
de alltså inte gjorde, de lyste helt normalt men blinkande.
Så vad du borde ha gjort var att felsaka bättre genom att ändra din kod (skära ner)
tills du hade hittat felet. Det tillsammans med mindre slarv vid läsningen av
databladet hade hjälpt mycket. Det är inte för skojs skull som Microchip har lagt ner
massor av tid på att skriva datablad...
Slutligen så hade det gått mycket snabbare att få rätsida på detta om du hade
haft med beskrivning av felet och *koden* som gav felet lite tidigare.
Det är även väldigt viktigt att faktiskt läsa vad andra skriver i tråden och inte bara
snöa in på sina egna inlägg. Redan den 21-aug skrev E85 :
> Det verkar som att du inte har stängt av dom analoga ingångarna.
> Kolla upp ANSEL- och ANSELH-registren i databladet.
Vilket ju visade sig vara precis det som var problemet. Hade du gjort som
E85 skrev så hade detta varit löst för över en vecka sedan. Eftersom du inte
kommenterade det vidare så kan *vi* bara anta att du faktiskt gjorde det.
Man kan summera det hela med att genom slarv och att stressa fram något
så får man problem...
