mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Brauche Hilfe bei SRAM-Programmierung


Autor: Permanentmagnet (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: jornbyte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Permanentmagnet (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Kannst du mehr von deinem Programm posten, dann könnte man eher was
sagen.

Gruß Florian

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiermal so:

ldi r26,low(0x0060)
ldi r27,high(0x0060)

Autor: Permanentmagnet (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.