Nybörjarhjälp till pickit 2 sökes

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9068
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av AndersG »

Det står iofs ordagrant i texten du citerade... Men, registren i en PIC kallas ofta för "file registers", därav f som förkortning. d står för destination.

En PIC har ett antal register vilka alla kan flyttas med en MOVE. Destinationen kan vara arbetsregistret (WREG w) eller registret självt. Nu låter det kanske snurrigt att ta innehållet i ett register och flytta till sig själv, men gör man det ändas inte registret, däremot uppdateras flaggorna, tex Z så man kan kolla om värdet var noll.

MOVF 10,0 - Kopierar innehållet i register 10 till WREG
MOVF 10,1 - Kopierar innehållet i register 10 till register 10
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av Crille93 »

AndersG skrev:Det står iofs ordagrant i texten du citerade... Men, registren i en PIC kallas ofta för "file registers", därav f som förkortning. d står för destination.

En PIC har ett antal register vilka alla kan flyttas med en MOVE. Destinationen kan vara arbetsregistret (WREG w) eller registret självt. Nu låter det kanske snurrigt att ta innehållet i ett register och flytta till sig själv, men gör man det ändas inte registret, däremot uppdateras flaggorna, tex Z så man kan kolla om värdet var noll.

MOVF 10,0 - Kopierar innehållet i register 10 till WREG
MOVF 10,1 - Kopierar innehållet i register 10 till register 10
Så den här koden:

Kod: Markera allt

decfsz    Delay1,f  
Gör så att registret "Delay 1" blir till 0/tas bort och när det händer så hoppar den över nästa instruktion?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9068
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av AndersG »

Ja, någonstans hade du definierat ett symboliskt (meningsfullt) namn på ett register.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

> För att dessa förklaringar förstod jag ingenting av.
> "W EQU H'0000'"

OK, vilken del är det som är oklar ? "W" ? "EQU" ? Eller "H'0000'" ?
Du måste vara mycket mer konkret så att det framgår vad som är oklart.
Det vore även intressant att veta om du har läst i dokumentationen om "EQU".
("4.28 equ - DEFINE AN ASSEMBLER CONSTANT", sidan 71 i MPASM manualen...)
Om något är oklart *där* så fråga gärna om det. Men om det var helt klart efter
att ha läst det, så, tja... :-)

Sen citerade du 15 rader från databladet och säger att du inte fattade något av det.
Det tror jag inte ett smack på. Det finns massor av vanliga ord i texten som "are",
"affected", "useful" o.s.v som du säkert förstog, eller hur ?
Samma sak här, du måste vara mycket mer konkret kring vad som är oklart. Man kan
säga att det inte går att beskriva det mycket annorlunda än vad det gör i den texten.

> Så den här koden:
> "decfsz Delay1,f"
> Gör så att registret "Delay 1" blir till 0/tas bort?

Det *kan* bli 0, ja. Men det kan lika gärna (och sannolikt oftast) bli något
helt annat. Och hur menar du med att ett register "tas bort" ??
Om du vill att att register ska bli just 0, så använd "CLRF" istället.
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av Crille93 »

Sodjan: Såklart jag förstod några enstaka ord men jag förstod inte förklaringen.
Sen med "tas bort" så menar jag att just "delay1" tas bort från registret (det blir nollställt).

AndersG: Okej!

Men nu undrar jag en sak till, och hoppas på att efter detta så ska jag nog kunna den här lektionen iallafall.
Efter den här första "OndelayLoop" så blir ju både delay1 och delay2 0 i registren så jag förstår inte hur "OffDelayLoop" biten fungerar.

Kod: Markera allt

OndelayLoop:
     decfsz    Delay1,f            ; Waste time.  
     goto      OndelayLoop         ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
     decfsz    Delay2,f            ; The outer loop takes and additional 3 instructions per lap * 256 loops
     goto      OndelayLoop         ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec.
                                   ; call it a two-tenths of a second.
      
     bcf       PORTC,3             ; Turn off LED C0
OffDelayLoop:
     decfsz    Delay1,f            ; same delay as above
     goto      OffDelayLoop
     decfsz    Delay2,f
     goto      OffDelayLoop
     goto      MainLoop            ; Do it again...
     end
Senast redigerad av Crille93 12 maj 2009, 11:44:31, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

> Sen med "tas bort" så menar jag att just "delay1" tas bort från registret...

delay1 *ÄR* registret. Det är exakt samma sak. "delay1" är bara ett
namn (en "symbol") på registret. Det ena kan inte "tas bort" från det andra.

> ...(det blir nollställt)

"nollställt" är bara ett värde som vilket annat värde som helst.
På samma sätt som "hundraställt" eller "ettställt" eller vilket annat
värde som helst. Det är absolut inget speciallt med just "noll" (förrutom
att visa bitar i STATUS kan påverkas). "Nollställt" betyder inte att
något försvinner eller "tas bort"...

När det gäller koden, kör den i MPSIM och kolla vad som händer
med värderna i de olika registren. Eller kör med papper och penna
för hand och stega igenom koden. Kärnfrågan är vad som händer när
men gör DECFSZ på ett register som redan är "noll", eller hur ? Det
blir h'FF', simple as that... :-)
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av Crille93 »

Hehe.... Förstod faktiskt inte vad du menade :roll:

Sen så kan jag inte hitta något "MPSIM". och det där med att jag ska göra med penna och papper var ju bara en dum idé för jag förstår ju inte hur det fungerar i huvudet så då kan det ju inte fungera bättre om jag skriver ner det.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

Jag hade ett långt inlägg färdigskrivet, men beslutade att kasta det, det
var skrivet i affekt och inte helt "rumsrent" i alla delar...

Du har gett dig fan på att inte förstå och jag lägger ner här nu.

Om det skulle dyka upp någon mer konkret fråga i tråden så får
vi se då...

Lycka till.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av vfr »

MPSIM finns i MPLAB.

Är det själva 'decfsz'-instruktionen som är problemet nu, eller?

Precis som sodjan skriver, så slår "variabeln" (minnesplatsen) runt från 0 till FF om man fortsätter räkna ner från 0.
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av Crille93 »

vfr skrev:så slår "variabeln" (minnesplatsen) runt från 0 till FF om man fortsätter räkna ner från 0.
Okej. Men jag förstår inte ändå för om den slår runt till FF så bör ju koden fortsätta att fungera på "OndelayLoop", förstår du vad jag menar?

För den kör ju "delay1" och loopar den tills den blir 0, sen går den till "delay2" och loopar den tills den blir 0, sen så slocknar lampan och då ska helt plötsligt delay1 och delay2 vara FF.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

Se där ja, en lite rak och skapligt tydlig fråga... :-)

När man gör DECFSZ så räknar den alltså för varje gång
'02' => '01' => '00' => 'FF' => 'FE' o.s.v.

> För den kör ju "delay1" och loopar den tills den blir 0,...

Ja.

> ...sen går den till "delay2" och loopar den tills den blir 0,...

NEJ ! Den minskar Delay2 med *1* !
Sedan ligger den och räknar ner Delay1 igen...

Alltså, för varje gång som Delay2 räknar ner med 1 så
räknar Delay1 ner 256 gånger !
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av Crille93 »

sodjan skrev:Alltså, för varje gång som Delay2 räknar ner med 1 så
räknar Delay1 ner 256 gånger !
Så håller det på så tills Delay2 tar slut (efter 256gånger)?
Men vad är det som händer efter det. För vad jag fattar så har ju redan Delay1 och Delay2 tagit slut sen när man kommer till "OffDelayLoop" biten i koden?
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

> Så håller det på så tills Delay2 tar slut (efter 256gånger)?

Ja, och efter 256*256 gånger för Delay1, alltså.

Då börjar det hela om igen. Både Delay1 och Delay2 kommer att vara '00'
när koden fortsätter över till "OffDelayLoop", och de kommer båda att
börja om från början igen (alltså från 'FF'). Och exakt samma sak gäller
nästa gång koden kommer tillbaka till "OnDelayLoop", så klart, det är
ju ingen skillnad, i princip.

Notera att DECFSZ kollar om värdet är '00' *EFTER* att ha räknat ner
registret ! Inte före...

Som sagt, att "simulera" det hela med papper och penna är ingen
dum ide alls... :-)

> För vad jag fattar så har ju redan Delay1 och Delay2 tagit slut

Sluta nu! De tar aldrig "slut". De kan bli noll ('00'), men det betyder
inte att de har "tagit slut", bara att värdet är just noll, just då...
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av Crille93 »

sodjan skrev:Sluta nu! De tar aldrig "slut". De kan bli noll ('00'), men det betyder
inte att de har "tagit slut", bara att värdet är just noll, just då...
Så sedan när Delay1 och Delay2 är 00 och den kommer till "OffDelayLoop" så plockar "DECFSZ" bort 1 från Delay1 och då är Delay1 F igen och samma med Delay2 när den kommer dit?
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

Exakt! :-)

'00' - 1 = 'FF'
Skriv svar