Nybörjarhjälp till pickit 2 sökes

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
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 »

Nu har jag börjat med lektion 3 och i den så ska man göra så att lysdioderna "roterar" och i den var lite nytt som jag inte förstod fullt ut.

Kan börja med att visa hur koden ser ut:

Kod: Markera allt

#include <p16F690.inc>
     __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

     cblock 0x20
Delay1              ; Assign an address to label Delay1
Delay2
Display             ; define a variable to hold the diplay
     endc
     
     org 0
Start:
     bsf       STATUS,RP0          ; select Register Page 1
     clrf      TRISC               ; make IO PortC all output
     bcf       STATUS,RP0          ; back to Register Page 0
     movlw     0x08
     movwf     Display
MainLoop:
     movf      Display,w           ; Copy the display to the LEDs
     movwf     PORTC
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       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
     end
Nu till problemet.
Det är den här kodraden som jag inte förstår helt:

Kod: Markera allt

    movlw     0x08
Förklaringen är "MOVLW Loads Wreg with a literal value" och jag kan inte hitta någon förklaring på "Wreg", vad betyder det?
Sedan så förstår jag inte vad "0x08" gör? Är det värdet?
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 »

> ...och jag kan inte hitta någon förklaring på "Wreg"

Wreg = W. Båda skrivsätten används.

> Sedan så förstår jag inte vad "0x08" gör? Är det värdet?

Ja.
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 »

Så det är såhär alltså?

Kod: Markera allt

     movlw     0x08                ;Skapar Wreg och ger den värdet 0x08
     movwf     Display             ;Flyttar Wreg till registret "Display" som man skapade tidigare i koden

     movf      Display,w           ;Flyttar registret till wreg
     movwf     PORTC               ;Flyttar Wreg till PORTC
Men hur vet man att man ska ge Wreg just värdet 0x08?
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 »

> ;Skapar Wreg och ger den värdet 0x08

Absolut inte "skapar" !

> ;Flyttar Wreg till registret "Display" som man skapade tidigare i koden.

Även här är "skapade" inte helt rätt. Registret finns/fanns alltid, du har bara
gett det ett namn ("Display").

> Flyttar registret till wreg

Nej. Flyttar *värdet* i registret till W.

> Flyttar Wreg till PORTC

Fortfarande är det *värdet* i W som flyttas, men det kanske var
det som du menade...

> Men hur vet man att man ska ge Wreg just värdet 0x08?

Tja, säg 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 vill bara tillägga att sådana där kommenterar (som bara säger samma
sak som instruktionen själv gör) brukar anses som lite onödiga.

T.ex "movwf PORTC" är ju exakt samma sak som ";Flyttar Wreg till PORTC"... :-)

Men jag förstår att det i detta fall bara var för att förtydliga exemplen lite,
vilket naturligtsvis är helt OK...
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 »

Men då undrar jag varför koden är så? Räcker det inte då med:

Kod: Markera allt

     movlw     0x08                ;Ger Wreg värdet 0x08

     movwf     PORTC               ;Flyttar Wregs värde till PORTC
För varför ska man skapa ett värde, flytta det till "display" sedan tillbaka till "Wreg" för att sedan flytta det till "PORTC" eller är det något jag missar?

Sedan så undrar jag: Finns det ingen förklaring till 0x08 alltså? Det ska bara stå 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 »

Eftersom (i alla fall) jag inte vet vad koden gör så går det
inte att avgöra vad h'08' står för. Det kan ju betyda vad som helst.

Om man bara vill sätta PORTB till h'08' så räcker det med:

Kod: Markera allt

     movlw     0x08
     movwf     PORTC
Om man även vill att registret/variablen "Display" ska få samma värde som PORTC :

Kod: Markera allt

     movlw     0x08
     movwf     Display
     movwf     PORTC
Det finns ingen anledning att "hämta tillbaka" värdet från Display en extra gång
så som ditt exempel gjorde. I alla fall om raderna ligger direkt efter varandra.

Om W används till något annat under ett tag så kan detta behövas :

Kod: Markera allt

     movlw     0x08
     movwf     Display
     ...
     ...
     movf      Display, W
     movwf     PORTC
Det kan ju hända att Display sätts på ett helt annat ställe
i koden än där PORTC sätts...
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 »

>Eftersom (i alla fall) jag inte vet vad koden gör.....
Jag skrev vad koden gör innan jag började fråga saker om koden (Nu har jag börjat med lektion 3 och i den så ska man göra så att lysdioderna "roterar")

Men när man gör såhär:

Kod: Markera allt

     movlw     0x08
     movwf     Display
     ...
     ...
     movf      Display, W
     movwf     PORTC
Finns då värdet kvar i "display" när man skickar tillbaka det till "Wreg"? För jag trodde att det skickades tillbaka till "Wreg" och då fanns inte det värdet kvar i "display".
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 »

> och då fanns inte det värdet kvar i "display".

Och *VAD* skulle det finnas där då ??

Notera att "move" i praktiken är en "copy"...

h'08' är väl för att tända upp den första lysdioden, antar jag.
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 »

Okej!
Men nu är det här nog förhoppningsvis det sista jag behöver hjälp med på den här lektionen:

Kod: Markera allt

     rrf       Display,f
Vad gör den här biten? flyttar den lysdioden åt höger 256gånger?
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 »

Description: The contents of register ‘f’ are rotated one bit to the
right through the Carry flag. If ‘d’ is ‘0’, the result is placed in the W register.
If ‘d’ is ‘1’, the result is placed back in register ‘f’.
Det står ju "one bit to the right" i beskrivningen ovan. Har du kollat
på RRF i databladet (sidan 224) ? Var fick du "256 gånger" från ?
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:
Var fick du "256 gånger" från ?
Trodde att f alltid var 256 för det var det i förra koden när man skulle få en lysdiod att blinka (delay,f biten)
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 en symbol som betyder "ett register". "f" har normalt inte värdet 256,
det är det register som "f" pekar på som kan vara något 8-bitars värde
mellan 0-255 (ett 8-bitars register kan alltså aldrig vara 256...).

"f" däremot kan t.ex vara h'06' om det är PORTB som avses.
Eller h'20' - h'7F' m det är ett GPR som avses. o.s.v.

Instruktionen är specad så här : "RRF f,d"
Där "f" alltså motsvarar "Display" i ditt exempel och "d" i sig kan
vara "f" eller "w" (men inte samma "f" som det första...)
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 »

Nu har jag lekt lite med min PIC programmerare men det enda jag vet är hur man tänder upp lampor på olika sätt.
Men innan jag kan gå vidare så måste jag veta vad alla portar/ben/kalla det vad du på PICen vill heter?
Finns det något blad någonstans så man kan se vad dom 20 benen heter? Två av dom är iallafall plus och minus.
Skulle vara väldigt tacksam om någon kunde hjälpa mig med detta.
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 »

Databladet för PIC:en innehåller den informationen och mycket annat. Det är ett absolut nödvändigt verktyg.
Skriv svar