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


von Eckel (Gast)


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

von Thomas (Gast)


Lesenswert?

1
mov DPTR, #TabelleAnfang
2
mov a, #00d
3
movc a, @a+dptr
4
5
6
TabelleAnfang:
7
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.

von icke (Gast)


Lesenswert?


von Stephan H. (stephan-)


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.

von Thomas (Gast)


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.

von Stephan H. (stephan-)


Lesenswert?

so isses.

von Eckel (Gast)


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...

von icke (Gast)


Lesenswert?

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

von Eckel (Gast)


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:

von Eckel (Gast)


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*

von Eckel (Gast)


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...

von Thomas (Gast)


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?

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
Noch kein Account? Hier anmelden.