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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.