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
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.
> 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.
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.
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...
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:
das letzte hat sich erledigt, mir is soeben eingefallen das ich r0 schon mal verwende, habs korrigiert und jetz funktionierts... vielen dank jungs*g*
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.