Daten aus Flash lesen

Gast #61774
Hallo,
ich versuche ein programm zu schreiben, dass beliebige bitfolgen aus
dem flash liest und diese dann einfach ausgibt.
dazu habe  ich mir das tutorial auf dieser seite durchgelesen und ein
programm danach geschrieben, aber es funzt zum verrecken nicht.
zwischendurch werden irgendwelche bitfolgen ausgegeben, aber nicht das
was ich haben will.
das ganze soll mal ein lichtspiel werden, die anordnung der leds kann
man in der angehängten datei sehen.
eigentlich dürfte es ja kein prob sein, die daten abwechselnd auf port
b bzw c auszugeben. (bei nem AT90S4433)
es soll jetzt so sein, dass ich ein paar bytes in den flash schreibe,
die dann in einer endlosschleife ausgegeben werden, therotisch kein
ding, aber praktisch.... g
wenn sich jetzt vielleicht mal jemand das prog anschauen könnte und mir
sagen könnte wo da die fehler sind, wär das schon sehr praktisch!
ich danke jetzt schonmal für jeden hinweis!
gruß
martin
Angehängte Dateien:
Gast
du testest zwar auf ein Ende-Zeichen (0), aber das kommt in der
Datentabelle gar nicht vor. Also läuft es immer munter weiter, wenn der
flash-Bereich zu Ende ist, gehts wieder auf Adresse 0 mit dem
Programmcode als Daten weiter. Unprogrammierte Zellen haben den Wert
0xff, insofern ist deine Datentabelle nicht terminiert. Schreib ganz
hinten noch ein .db 0 ran, dann sollte es funktionieren.
Gast
danke!
jetzt tut's zumindest besser als vorher, aber eigentlich müsste die
prozedur einen eintrag nach dem andren abarbeiten, tut sie aber nicht,
sonder er gibt kurz 0xff aus, und nach nem bestimmten abstand wieder.
wie kann das sein?
Gast
.db 0bxxxxxxxx
.db 0byyyyyyyy

macht im Speicher 11111111 xxxxxxxx 11111111 yyyyyyyy
Der Speicher ist doch 16-bittig!

also besser

.dw 0byyyyyyyyxxxxxxxx
Gast
ok, angenommen wir haben ein programmabschnitt

   daten:
     .db 0byyyyyyyyxxxxxxxx

wenn ich jetzt sage

   ldi ZL, LOW(daten*2)
   ldi ZH, HIGH(daten*2)
   lpm

was ist dann in r0 ?

und wenn ich jetzt sage

   adiw ZL,1
   lpm

was kommt dann?

kanns sein, dass erst ein byte aus der adresse gelesen wird (xxxxxxxx),
und dann nach "adiw ZL,1" das andere (yyyyyyyy) ?
aber in welcher reihenfolge?
Gast
ja, an der ganzen Sache mit den 16bit ist was dran, lange nichts mehr in
Assembler gemacht :-)
Aber so wirds was:

.db 0b11110110, 0b11110110
.db 0b11101101, 0b11101101
.db 0b11011011, 0b11011011

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.