Forum: Mikrocontroller und Digitale Elektronik Tabellengröße


von Ernie (Gast)


Lesenswert?

Hallo Zusammen,

ich muß zur Ansteuerung eines intelligenten LED Displays einige Bytes
in einer Tabelle ablegen. Wenn ich aber in einer Tabelle mehr als 255
Bytes ablege, so zeigt der Zeiger nach dem 255 Byte auf irgendeine
andere Stelle.

Meine Frage ist nun, ob die Größe einer Tabelle beschränkt ist, oder ob
ich einen Fehler im Programmcode habe.

Zur kurzen Erläuterung : Ich setze den Zeiger an ein bestimmte Stelle
(Buffer) und dann werden 5 Bytes gelesen und ausgegeben.

Write:
    ldi  Reihe,$00

    ldi     ZL,LOW(ASCII_Tab1*2)
    ldi     ZH,HIGH(ASCII_Tab1*2)

    mov  Temp,Buffer
    add  ZL,Temp
    clr  Temp
    adc  ZH,Temp

Write_Loop:

    lpm
    mov  SPI_Byte,r0
    rcall  Putchar

    adiw    ZL,1
    inc  Reihe
    mov  Temp,Reihe
    cpi  Reihe,$05
    brne  Write_Loop
    ret

die Tabelle sieht ungefähr so aus :

.cseg

ASCII_Tab1:

  .db $00,$00,$00,$00,$00,$00  ;
; !
  .db $04,$24,$44,$60,$84,$00  ;
; "
  .db $0A,$2A,$40,$60,$80,$00  ;
; #
  .db $0A,$3F,$4A,$7F,$8A,$00  ;
; $
  .db $0F,$34,$4E,$65,$9E,$00  ;
; %
  .db $19,$3A,$44,$6B,$93,$00  ;
; &
  .db $08,$34,$4D,$72,$8D,$00  ;
; '
  .db $04,$24,$40,$60,$80,$00  ;

usw.

von mmerten (Gast)


Lesenswert?

Wenn du nur eine 8 Bit-Offset (Buffer) nutzt, können auch nur 8 Bit
Start-Offset addiert werden.
oder du mußt Buffer mit der Anzahl pro Eintrag multiplizieren.

von Ernie (Gast)


Lesenswert?

Vielen Dank, ich Depp hatte vorher den Buffer immer mit 6 multipliziert
und nicht bedacht, daß der ja überläuft :o)

Jetzt multipliziere ich den 16 Bit Zeiger und nun funzt es :o)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.