02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Avr-Asm-Tutorial S. 43<br />

te zeitweise ablegen kann, seien es Rücksprungadressen beim Aufruf von Unterprogrammen, bei<br />

<strong>de</strong>r Unterbrechung <strong>de</strong>s Programmablaufes mittels Interrupt o<strong>de</strong>r irgendwelche Zwischenwerte, die<br />

man später wie<strong>de</strong>r braucht und für die ein extra Register zu scha<strong>de</strong> ist.<br />

8.4 Wie verwen<strong>de</strong>t man SRAM?<br />

Schreiben und Lesen von Speicherzellen<br />

Um einen Wert in eine Speicherstelle im SRAM abzulegen, muss man seine Adresse festlegen. Das<br />

verwendbare SRAM reicht von Adresse 0x0060 bis zum jeweiligen En<strong>de</strong> <strong>de</strong>s SRAM-Speichers<br />

(beim AT90S8515 ist das ohne externes SRAM z.B. 0x025F). Mit <strong>de</strong>r Instruktion<br />

STS 0x0060, R1<br />

wird <strong>de</strong>r Inhalt <strong>de</strong>s Registers R1 in die Speicherzelle im SRAM kopiert. Mit<br />

LDS R1, 0x0060<br />

wird vom SRAM in das Register kopiert. Das ist <strong>de</strong>r direkte Weg mit einer festen Adresse, die vom<br />

Programmierer festgelegt wird.<br />

Um das Hantieren mit festen Adressen und <strong>de</strong>ren möglicherweisen späteren Verän<strong>de</strong>rung bei fortgeschrittener<br />

Programmierkunst sowie das Merken <strong>de</strong>r Adresse zu erleichtern empfiehlt <strong>de</strong>r erfahrene<br />

Programmierer wie<strong>de</strong>r die Namensvergabe, wie im folgen<strong>de</strong>n Beispiel:<br />

.EQU MeineLieblingsSpeicherzelle = 0x0060<br />

STS MeineLieblingsSpeicherzelle, R1<br />

Aber auch das ist noch nicht allgemein genug. Mit<br />

.EQU MeineLieblingsSpeicherzelle = SRAM_START<br />

.EQU MeineZweiteLieblingsSpeicherzelle = SRAM_START + 1<br />

ist die in <strong>de</strong>r Inclu<strong>de</strong>-Datei eingetragene Adresse <strong>de</strong>r SRAM-Speicherzellen noch allgemeingültiger<br />

angegeben.<br />

Zugegeben, kürzer ist das alles nicht, aber viel leichter zu merken.<br />

Organisation als Datensegment<br />

Bei etwas komplexeren Datenstrukturen empfiehlt sich das Anlegen in einem Datensegment. Eine<br />

solche Struktur sieht dann z. B. so aus:<br />

.DSEG ; das ist <strong>de</strong>r Beginn <strong>de</strong>s Datensegments, die folgen<strong>de</strong>n Einträge organisieren SRAM<br />

.ORG SRAM_START ; an <strong>de</strong>n Beginn <strong>de</strong>s SRAM legen.<br />

;<br />

EinByte: ; ein Label als Symbol für die Adresse einer Speicherzelle<br />

.BYTE 1 ; ein Byte dafuer reservieren<br />

;<br />

ZweiBytes: ; ein Label als Symbol für die Adresse zweier aufeinan<strong>de</strong>r folgen<strong>de</strong>r Speicherzellen<br />

.BYTE 2 ; zwei Bytes reservieren<br />

;<br />

.EQU Pufferlaenge = 32 ; <strong>de</strong>finiert die Laenge eines Datenpuffers<br />

Buffer_Start: ; ein Label fuer <strong>de</strong>n Anfang <strong>de</strong>s Datenpuffers<br />

.BYTE Pufferlaenge ; die folgen<strong>de</strong>n 32 Speicherzellen als Datenpuffer reservieren

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!