Servus Leute ich kriegs einfach nicht hin, mit dem X bzw. X+ automatisiert das SRAM zu beschreiben. AVR: 90S8515 ohne ext. SRAM SRAM Adresse beginnt bei 0x0060 Hier die Aufgabe: sobald eine Taste gedückt wurde (das funktioniert), soll folgendes geschehen: Register R20 soll in erstes SRAM Byte gespeichert werden (0x0060) Register R21 soll in nächstes SRAM Byte gespeichert werden (0x0061) Ende Sobald die Taste wieder gedrückt wurde (Entprellt hab ich schon): Register R20 soll in nächstes SRAM Byte gespeichert werden (0x0062) Register R21 soll in nächstes SRAM Byte gespeichert werden (0x0063) Ende usw. Habs versucht mit init: clr r27 ; Clear X high byte ldi r26,0x0060 ; Set X low byte to 0x0060 main: (als Unterprogramm) st X+, R20 st X+, R21 Nur wenn ich dann mal einen Wert z.B. 0x0063 anzeigen lasse, ist da was falsches drin.
ldi r26,0x0060 ; Set X low byte to 0x0060 sollte so sein ldi r26,0x60 ; Set X low byte to 0x0060 mit st X+, bla machste nach dem schreiben ein increment, prüfe das mal beim ld (lds).
gibts da eine Webseite wo ein Beispiel näher beschrieben ist? Bis jetzt hab ich nur das benutzt: http://www.avr-asm-tutorial.net/avr_de/beginner/sram.html
Hi Kannst du mehr von deinem Programm posten, dann könnte man eher was sagen. Gruß Florian
ok danke, bringt mich schon nen stuck weiter wie kann ich denn abfragen ob das Ende des SRAMs erreicht wurde? Mein Code ist dieser: loop: ld temp, X+ ; Bytes aus SRAM cpi r26, 0x025F ; Ende SRAM ? brne ungleich ret ungleich: ; ..weiter auslesen und per UART senden... ... rjmp loop
Hi, bis ans Ende des S-Rams würde ich nie gehen, weil du dann Probleme mit den Rcall Befehlen hast. Am Ende des S-Rams wird ja der Stack abgelegt. Du könntest eventuell hergehen, und den Stack auf den Programmanfang legen. z.B.: ldi spl,low(0x0070) ldi sph,high(0x0070) Somit wäre der Stack am Anfang des S-Rams. und im Programm würde es dann so ausschauen: loop: ld temp, X+ ; Bytes aus SRAM cpi xl,low(ramend) ; Ende SRAM xl? brne ungleich cpi xh,high(ramend) ;Ende SRAM xh? brne ungleich ret ungleich: ; ..weiter auslesen und per UART senden... ... rjmp loop Du kannst nicht immer nur das lowbyte des Pointers abfragen, da das S-RAM vermutlich größer als 256 bytes ist. Dadurch gibt es ein low und ein highbyte. 0x0112 wäre dann in r27 "10" und in r26 "12". Ich hoffe, du verstehst mich. Gruß Florian
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.