www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Datenfelder in Assembler (Keil) zu Atmel 2051


Autor: Eckel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo bin neu hier und interressiere mich seit einiger zeit für die 
atmel familie insbesondere den 2051...
hab mich auch schon auf mehreren seiten schlau gemacht sprich, erik 
buchmann und z.B. auf 8052.com
mein problem ist nun das ich es immernoch nich verstanden habe wie man 
eine bestimmte variable des datenfeldes "anspringt" bzw. liest, kann mir 
da evtl. jemand helfen, wär echt nett komm nämlich nich weiter...

MfG Eckel

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mov DPTR, #TabelleAnfang
mov a, #00d
movc a, @a+dptr


TabelleAnfang:
DB Datenbyte, Datenbyte, Datenbyte, ...


Damit greifst du auf das erste Element der Tabelle zu. Lädst du den accu 
mit 2, kriegst du das dritte Element usw.

Syntax kann in anderen Programmen bisschen anders aussehen.

Autor: icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> eine bestimmte variable des datenfeldes "anspringt" bzw. liest,

Datenfelder werden mit Pointern bearbeitet.
Variablen werden eben einfach nur benutzt.

Beispiel.: Mov Variable,#=Ah

Die Variable "Variable" hat die Wertigkeit 0Ah

Bei Feldern arbeitet man mit Tabellen.

zB.:

DB  Tabelle: 01h,04h,C0h,A1h

Dann wird der Datenpointer DPTR mit dem Anfang der Tabelle geladen.

Mov  DPTR,#Tabelle
Wenn Du jetzt den 3. Wert haben wills, dann
Mov A,#3
Movc a,@a+dptr

Danach ist im Akku C0h.

kurz und knapp. Ansonsten kann ich "Mikrocontroller Kochbuch" empfehlen.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wird also die Anfangsadresse der Tabelle in den Datenpointer DPTR 
geladen und dann der Akku-Wert draufaddiert. Damit ist der Akkuwert 
quasi der Index der Tabelle und der die Adresse im DPTR die Adresse des 
Tabellenelements. Dann holt man sich mit dem movc-Befehl das adressierte 
Element.

Nach den Befehlen steht eine Kopie des adressierten Tabellenelementes im 
Akku.

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so isses.

Autor: Eckel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt gut, hab nur das Problem das ich bei meiner 8x8 led matrix nach 
jedem reset ne andere anzeige hab obwohl die bits im Datenfeld ja gleich 
bleiben...

Übrigens danke für die Hilfe echt super von euch...

Autor: icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vor
Movc a,@a+dptr
den Accu gelöscht (Mov A,#0)?

Autor: Eckel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich den akku mit 0 beschreibe dann is meine gelesene variable ja 
immer gleich, ich will aber nun mehrere nacheinander in die 
verschiedenen digits des max 7219 schieben aber das funktioniert dann 
schon nich mehr...
sieht bei mir dann so aus,

mov DPTR,#Datenfeld
mov r0,#1
start:
mov a,r0
movc a,@A+DPTR
mov MAX_DATEN,a
mov MAX_ADRESSE,r0
call MAX_DISP_OUT
inc r0
cjne r0,#9,start

jmp weiter

Datenfeld:
db 0,128,64,32,16,8,4,2,1

weiter:

Autor: Eckel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das letzte hat sich erledigt, mir is soeben eingefallen das ich r0 schon 
mal verwende, habs korrigiert und jetz funktionierts...
vielen dank jungs*g*

Autor: Eckel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
besteht die möglichkeit in den datenfeldern auch Buchstaben einzufügen 
welche dann direkt ausgegeben werden können??? hab ich nämlich bei woe 
gesehen, kann es mir aber nich vorstellen...

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, was verstehst du unter Buchstaben?

Du kannst im Assembler jedenfalls Tabellen aus Bytes aufbauen. Und du 
kannst mit dem ASCII-Code Buchstaben in 8-Bit-Werte, also Bytes, 
darstellen.

Direkt ausgeben... Wo denn? LCD? PC?

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.