Sida 3 av 3

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 10 januari 2011, 18:57:16
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

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 10 januari 2011, 19:08:54
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.

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 10 januari 2011, 19:18:20
av Stewal
Då får det bli två identiska rutiner förutom att de pekar till varsin buffer. :(

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 10 januari 2011, 20:40:58
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

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 10 januari 2011, 21:11:14
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

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 11 januari 2011, 00:22:14
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".

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 11 januari 2011, 00:30:54
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

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 11 januari 2011, 00:37:11
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...

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 11 januari 2011, 00:44:21
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

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 11 januari 2011, 00:48:15
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)... :-)

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 11 januari 2011, 00:52:19
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...

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 11 januari 2011, 18:19:03
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.

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 11 januari 2011, 18:28:57
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. :)

Re: Egen bygg display har uppdaterings problem (PIC)

Postat: 11 januari 2011, 21:14:46
av sodjan
Perfekt... :-)