Datenfelder in Assembler (Keil) zu Atmel 2051

Gast #626462
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
Gast #626486
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.
#626489
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.
Gast #626490
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.
Gast #626501
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...
Gast #626519
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:
Gast #626573
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren