Egen bygg display har uppdaterings problem (PIC)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av Stewal »

Har nu testat koden i MPLAB SIM och kommit fram till att det inte fungerar att skriva som nedan för då hamnar FSR i ett annat register än det som BUFFER_2 pekar på.

Kod: Markera allt

  MOVLW     Buffer_2 
  MOVWF     FSR           ; pekar på 0x44 start address
  BANKISEL  Buffer_2  


  MOVLW     FSR + 7      
  MOVWF     FSR           ; Pekar på 0x11
Skulle peka på address 0x51 om det hade fungerat.
Skriver man som nedan pekar FSR på 0x04 som start address medans Buffer_2 har 0x44

Kod: Markera allt

  MOVLW  FSR 
  MOVWF  FSR       ; pekar på 0x04
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av vfr »

MOVLW FSR + 7

Det ser ut som att du vill åstadkomma en indexerad adressering genom FSR. Det går inte. Det finns ingen sådan adressmode. Du måste lägga till 7 till innehållet i FSR och sedan skriva eller läsa indirekt genom INDF. Eller ladda FSR med adress 51 från början. Tyvärr finns inget smidigt sätt att göra indexerad adressering. Man måste hela tiden hålla på att uppdatera FSR. Antingen med driekta adresser eller med inc och dec.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av Stewal »

Då får det bli två identiska rutiner förutom att de pekar till varsin buffer. :(
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4743
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av Swech »

Kod: Markera allt

      Movlw    Buffer_1          ; kopiera värdet Buffer_1 till w
      movwf    FSR               ; Spara w i pekaren till Buffer_1;
      bankisel Buffer_1          ; Se till att IRP pekar rätt.
index_6                          ; Index pekare =36  ?
      decfsz   Ind_check, f      ; Subtrahera Ind_check med 1,
                                 ; ...om Ind_check blir 0 hoppa över nästa.     
      goto     B1_index_7        ; Nej, gå till Index_7

**      incf      INDF, f           ; Addera buffer+0 med 1  **  är inte säker på vad du vill öka
**   buffer+0  eller buffer+7    är det buffer+0 så skall den vara här

      movlw   7                  ;w:=7
      addwf   FSR,f             ;fsr=buffer+7
      movf     INDF, w         ; Kopiera buffer+7 till w
      movwf  digit_2           ; Spara w i Digit_2

**      incf      INDF, f           ; Addera buffer+7 med 1  **  är inte säker på vad du vill öka
**   buffer+0  eller buffer+7   är det buffer+7 skall den vara här
Swech
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av Stewal »

Problemet är att FSR pekar mot ett annat register än det som satts innan t.ex. Buffer_1
Men jag kan testa att köra med följande:

Kod: Markera allt

      movlw    7                  ; w:=7
      addwf    FSR,f              ; fsr=buffer+7
      movf     INDF, w            ; Kopiera buffer+7 till w
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av sodjan »

> ...och kommit fram till att det inte fungerar...

Ja men va f...
Det förklarade jag ju ett långt inlägg ett par inlägg innan !
Trodde du inte på mig ? :-)

Detta bör dock fungera

Kod: Markera allt

  MOVLW     Buffer_2
  MOVWF     FSR           ; pekar på 0x44 start address
  BANKISEL  Buffer_2 

  MOVF      FSR, w        ; Hämta *värdet* i FSR till w, d.v.s just nu starten av Buffer_2
  ADDLW     7             ; Lägg till 7 till W
  MOVWF     FSR           ; Ska nu peka på 0x44 + 7
I ditt exempel la du till 7 till *adressen* till FSR !

Men som jag sa tidigare, man kan inte på ett smidigt sätt komma åt
olika platser i bufferten "random". Bättre att kopiera den aktuella bufferten
till en arbetsarea, eller att skapa direkta symboler som pekar på "Buffer_2 + 7".
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4743
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av Swech »

"Problemet är att FSR pekar mot ett annat register än det som satts innan t.ex. Buffer_1"

FSR pekar ju på din buffer 1 eller 2...
lägger du till 7 så pekar FSR på buffer 1+7 eller 2 + 7

Ser inte problemet

Swech
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av sodjan »

Problemet var att det inte går att göra "MOVLW FSR+7".
D.v.s move *litteral* to W. MPASM kommer att beräkna "FSR+7"
och göra om det till en konstant, FSR är en symbol som har värdet
lika med *adressen* till FSR (inte FSR's innehåll!), och sedan läggs
7 till detta och man hamnar på ett helt annat register 7 positioner
efter FSR i memory mappen.

Se mitt exempel. Man måste läsa *värdet* från register FSR...
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4743
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av Swech »

Det var inte till dig Sodjan... jag är med 100% på hur FSR funkar.
Att FSR+7 inte funkar är väl klarlagt nu.


Swech
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av sodjan »

Jo, men det du kommenterade var just kod där man försökte
göra så som jag beskrev (med MOVLW). Det är det som är
"problemet" (som du alltså tydligen inte kan se)... :-)
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av sodjan »

Notera ett även den kod som nämndes

Kod: Markera allt

      movlw    7                  ; w:=7
      addwf    FSR,f              ; fsr=buffer+7
      movf     INDF, w            ; Kopiera buffer+7 till w
också bör fungera och är en instruktion kortare än den jag visade.

Men, som sagt, det var inte den koden som denna text syftade på:

"Problemet är att FSR pekar mot ett annat register än det som satts innan t.ex. Buffer_1"

utan det syftade på den felaktiga koden med MOVLW...
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av Stewal »

Nu är jag me på vad som händer när man skriver.

Kod: Markera allt

  MOVLW     FSR + 7      
  MOVWF     FSR           ; Pekar på 0x11
Med den här koden fungera det utmärkt.

Kod: Markera allt

      movlw    7                  ; w:=7
      addwf    FSR,f              ; fsr=buffer+7
      movf     INDF, w            ; Kopiera buffer+7 till w
Han inte prova den koden igår då jag hade skrivit så mycket kod som jag granskade i MPLAB SIM att man var helt fyrkantig och inte såg vad var problemet.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av Stewal »

I övrigt kan jag berätta att felet med tiondel kvarstår trots dubbla buffrar.

Så nu har jag löst det genom att inte visa tiondelen utan bara sekunder under rullande tid och vid måltid vissa tiondelen och hundradelen.
Då fungerar det utmärkt.

Att visa tiondelen under rullande tid är inte nödvändigt, då bara 3 till 4 st. siffror hinner visas per sekund av tiondelen.

Får tacka för all hjälp återigen. :)
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Egen bygg display har uppdaterings problem (PIC)

Inlägg av sodjan »

Perfekt... :-)
Skriv svar