Hi Ich möchte eine Datentabelle für ein AVR programm programmiren. Aus dieser Tabelle soll er dann werte auslesen. Wie geht das. Die Tabelle ist die im anhang. MFG Jörn
Erst mal musst du alle ".byte" in ".db" umwandeln, und dann solltest du dich über den Befehl "lpm" informieren, z.B. hier: http://www.mikrocontroller.net/tutorial/memory.htm
print: lpm tst R0 breq print_end mov r16, r0 rcall sendbyte adiw ZL, 1 rjmp print text: .db 84, 101, 115, 116, 0 .db 8, 10, 11, 16, 5, 0 Wenn ich das richtig verstanden habe, steht der wert 84 nach dem ersten durchlauf in r16. Doch wie komme ich in die nächste Datenzeile?? MFG Jörn
spielt keine Rolle, in welcher Zeile die .db stehen, solange du Z incrementierst, wird das nächste Byte gelesen. Willst du direkt ein andere Zeile anspringen, solltest du lieber symbolische Marken einfügen und dann mit Hilfe dieser Z laden.
ich will von der Zeile 1 in die 2. Zeile springen, das muss doch möglcih sein oder? Also angenommen in der variable x steht der wert 1 dann liest das prog. die erste zeile aus, steht in der der variable aber 2 dann nimmt das prog. die zweite zeile. Zeile1: .db 84, 101, 115, 116, 0 Zeile2: .db 8, 10, 11, 16, 5, 0
Schreib doch einfach mal wozu das ganze gut ist, dann kann man dir besser helfen.
Wenn das nicht nur 2 Zeilen sein sollen, dann nimmst Du eine 2. Tabelle, in der erstmal alle Byte-Adressen drinstehen: Adressen: .dw 2*zeile1, 2*zeile2 ;usw. Zeile1: .db 84, 101, 115, 116, 0 Zeile2: .db 8, 10, 11, 16, 5, 0 Zuerst lädst Du Z mit 2*Adressen und addierst den Index 2* dazu (da 2 Byte je Adresse). Dann holst du die beiden Bytes, lädst diese nach Z und somit zeigt Z auf die gewünschte Zeile. Peter
Hallo, Da ihr schon mal dabei seid, jemandem beizubringen, wie man eine Tabelle in den Ram speichert und diese bei bedarf ausliest, möchte ich mich gleich mal mit hinten anstellen. Ich habe nämlich ähnliches (oder sogar selbiges?) vor: Möchte jedem gelesenen AD-Wert (256 Werte@8Bit) eine gewisse Zahl zuordnen. Soll für eine Temperatur- ausgabe werden. Beispiel: AD-Wert ist "154" , es soll eine "024" zugerodnet werden, welche ich dann irgendwo hin als Temperatur ausgebe. Von LPM habe ich mal flüchtig gehört. Das scheint das richtige zu sein. Wie arbeite ich aber damit ? Und wie kriege ich die Wertetabelle in den Ram ?
Hallo Ja so was ähnliches wie Andi_K habe ich auch vor, nur das der ASCII wert also von 0-?? einen bestimmten Datensatz bestehend aus je 8 zeichen zugeordnet werden soll. Bsp: Asciicode = 3 .de 6, 5, 98, 50, 66, 66 .de 4, 3, 58, 59, 20, 44 * .de 5, 8, 55, 88, 44, 55 * diese Zeile soll nun wert für wert ausgelesen werden und jeder wert per spi an ein display (Nokia 3310 gesendet werden. MFG Jörn
Hallo Jörn, also ich würde den Z-Pointer einfach "asciicode"-mal um 6 erhöhen. Also so in der Art: ldi ZH, HIGH(text<<1) ldi ZL, LOW(text<<1) tst asciicode breq loopend loop: adiw ZL, 0x06 dec asciicode brne loop loopend: Dann sollte der Z-Pointer auf die von dir gewünschte "Zeile" zeigen. Thomas
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.