Nybörjarhjälp till pickit 2 sökes
Re: Nybörjarhjälp till pickit 2 sökes
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
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
Re: Nybörjarhjälp till pickit 2 sökes
Så den här koden: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
Kod: Markera allt
decfsz Delay1,f
Re: Nybörjarhjälp till pickit 2 sökes
Ja, någonstans hade du definierat ett symboliskt (meningsfullt) namn på ett register.
Re: Nybörjarhjälp till pickit 2 sökes
> 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.
> "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.
Re: Nybörjarhjälp till pickit 2 sökes
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.
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.
Re: Nybörjarhjälp till pickit 2 sökes
> 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...
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...

Re: Nybörjarhjälp till pickit 2 sökes
Hehe.... Förstod faktiskt inte vad du menade
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.

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.
Re: Nybörjarhjälp till pickit 2 sökes
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.
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.
Re: Nybörjarhjälp till pickit 2 sökes
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.
Ä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.
Re: Nybörjarhjälp till pickit 2 sökes
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?vfr skrev:så slår "variabeln" (minnesplatsen) runt från 0 till FF om man fortsätter räkna ner från 0.
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.
Re: Nybörjarhjälp till pickit 2 sökes
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 !

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 !
Re: Nybörjarhjälp till pickit 2 sökes
Så håller det på så tills Delay2 tar slut (efter 256gånger)?sodjan skrev:Alltså, för varje gång som Delay2 räknar ner med 1 så
räknar Delay1 ner 256 gå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?
Re: Nybörjarhjälp till pickit 2 sökes
> 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å...
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å...
Re: Nybörjarhjälp till pickit 2 sökes
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 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å...