mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler Tabellen ( 8051)


Autor: Meiner Einer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Beim Lösen einer Abituraufgabe bin ich auf Probleme gestoßen. Folgende 
Aufgaben:

Im Parkhaus gibt es 88 freie Parkplätze. Ich sollte die beiden Anzeigen 
der freien Stellplätze mit Assembler programmieren. Die eine Tabelle ist 
für die Einer-Stellen, die andere für die Zehner-Stellen. Angesprochen 
werden die einzelnen "Zahlenteile" über eine Kodierung.

Mit den Tabellen kann ich die einzelnen Zahlen ansprechen. Die beiden 
Segmentanzeigen, werden jeweils über den Port 2.X angesprochen.

Rechts sieht man mein PAP zum Problem. Die Logik dahinter sollte 
stimmen. Jetzt muss ich noch den Assemblercode dazu schreiben.

Meine Fragen:

Wie kann ich meine Tabelle "ansprechen" ?
Kann ich einfach durch Dekrementieren in der Tabelle runterzählen?

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tag Meiner Einer,
poste bitte mal die komplette Aufgabe, damit jeder genau sehen kann, was 
man alles machen/benutzen darf (da man dieses Problem auf viele 
verschiedene Arten lösen kann).
Bis irgendwann,
MC

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast Dich vor Erhalt der Aufgabe noch keine Millisekunde mit MCs 
beschäftigt, stimmts ?

Machen wirds Dir keiner, Du mußt schon selber Assembler lernen.

Jeder Blinde mitm Krückstock sieht doch, das die Zahlen im packed BCD 
ausgegeben werden, bloß gemeinerweise die Bits gedreht (niederwertigstes 
= P2.7 usw.).

Könntest ja mal nach ner "Mirror Byte" Funktion googlen.


Intern rechnen MCs ja grundsätzlich binär.
Um nun packed BCD (4Bit Zehner, 4 Bit Einer) draus zu machen nimmt man 
ganz einfach die Division mit Rest "DIV" und "SWAP", "ORL" zum zusammen 
pappen.


Statt externer 7S-Dekoder kann man auch ne Tabelle benutzen. Dann reicht 
aber P2 nicht aus, sondern Du brauchst 14 Pins oder Multiplex (8 Pins).
Tabellen werden beim 8051 mit "MOVC" gelesen.
Das ist auch der übliche Weg. Denn wenn man schon nen MC benutzt, warum 
noch extern überflüssige ICs dranpappen ?


Peter

Autor: Meiner Einer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@MC

Ich hab eine Befehlsliste zu bekommen. Ich denk mal, da sind schon die 
wichtigsten dabei: Arithmetische Operationen, Logische Operationen, 
Datentransport und Sprungbefehle.

Ich hab den MC. Die Ports 2.4 bis 2.7 sind an einen 7 Segment-Dekoder 
geschalten, der wiederrum mit der Anzeige für die Zehner verbunden ist. 
Die Ports 2.0 bis 2.3 sind auch an einen 7 Segment-Dekoder geschalten, 
der für die Einer zuständig ist.


"Du hast Dich vor Erhalt der Aufgabe noch keine Millisekunde mit MCs
beschäftigt, stimmts ?"

Nein, stimmt nicht. Ich hab mich das letzte mal vor ca. einem Jahr mit 
MCs (zumindest etwas) beschäftigt. Da war ich zwar mies drin, aber ich 
hab nicht nichts gemacht. ^-^

"Machen wirds Dir keiner, Du mußt schon selber Assembler lernen."

Ich verlang auch von gar keinem, dass er mir den Code vortippt. Bringt 
mir ja nix, ich muss es bis in zwei Wochen Wochen selber können. Ich 
frag ja nur, wie ich auf die Tabelle zugreifen kann.

Es ist nicht so, dass ich gar nichts könnte. Die anderen Aufgaben kann 
ich auch lösen, nur die hier nicht, weil ich nicht weiß wie ich das mit 
der Tabelle handhaben soll.

"Jeder Blinde mitm Krückstock sieht doch, das die Zahlen im packed BCD
ausgegeben werden, bloß gemeinerweise die Bits gedreht (niederwertigstes
= P2.7 usw.)."

Das die Bits gedreht wurden, dafür bin ich verantwortlich, hab mir bei 
der Zuordnung nichts gedacht. Fehler von mir -.-

"Könntest ja mal nach ner "Mirror Byte" Funktion googlen."

Ist wohl nicht nötig. (s.o.)

"Intern rechnen MCs ja grundsätzlich binär.
Um nun packed BCD (4Bit Zehner, 4 Bit Einer) draus zu machen nimmt man
ganz einfach die Division mit Rest "DIV" und "SWAP", "ORL" zum zusammen
pappen."

SWAP = Nibbles im Akku vertauschen -> Die ersten 4 Bits und die letzten 
4 Bits untereinander tauschen? (Meine Vermutung, da Google erfolglos 
blieb)



"Statt externer 7S-Dekoder kann man auch ne Tabelle benutzen. Dann 
reicht
aber P2 nicht aus, sondern Du brauchst 14 Pins oder Multiplex (8 Pins).
Tabellen werden beim 8051 mit "MOVC" gelesen.
Das ist auch der übliche Weg. Denn wenn man schon nen MC benutzt, warum
noch extern überflüssige ICs dranpappen ?"

Zwischen dem MC und den Anzeigen sind die beiden 7S-Dekoder geschalten, 
also muss ich wohl die beiden "Pakete" zusammenmkleistern.

Verständnisfrage: Wenn ich die Bits von P2.0 bis 2.7 in den Akku lade, 
werden die Bits dann in der selben Adresse (zB 22h) geladen, oder 
jeweils in  eine einzelne (zb: 2.0 in 22h, 2.1 in 23h..usw) ?


Vielen Dank euch beiden! Ich hoffe ihr habt etwas Verständnis für mein 
geringes Wissen :-)

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tag Meiner Einer
Also benötigst du eigentlich nur eine Liste der 8051-Befehle mit 
vielleicht ein paar Erläuterungen?
Kleine Frage nebenbei: Woher weiß der µC eigentlich, wie viele Autos im 
Parkhaus drin sind?
Und noch ne Frage: Du hast erwähnt, dass das hier für eine Abi-Aufgabe 
ist. Auf was für eine Schule gehst du denn? Hat die als Fachrichtung µCs 
oder so?
Bis irgendwann,
MC

Autor: Meiner Einer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Tag Meiner Einer
Also benötigst du eigentlich nur eine Liste der 8051-Befehle mit
vielleicht ein paar Erläuterungen?"

Die Liste habe ich dazu, mit einer Menge Befehlen, nur verstehe ich 
nicht ganz wie die Daten in bestimmen Situationen (siehe 
Verständnisfrage oben) übertragen werden.

"Kleine Frage nebenbei: Woher weiß der µC eigentlich, wie viele Autos im
Parkhaus drin sind?"


Sobald ein Auto die Lichtschranke passiert, wird ein Interrupt am Port 
3.2 ausgelöst. Dann wird da entsprechend im µ-Controller hochgezählt.

"Und noch ne Frage: Du hast erwähnt, dass das hier für eine Abi-Aufgabe
ist. Auf was für eine Schule gehst du denn?"

Ich geh auf das Berufliche-Schulzentrum in Bietigheim-Bissingen. Auf der 
Schule gibts mehrere Schularten (BVJ, Wirtschaftsschule, irgendwelche 
Kaufmänn. Schulen, TG und WG). Ich geh auf das TGI = 
Informationstechnische Gymnasium.

"Hat die als Fachrichtung µCs
oder so?"

Das sieht so aus: Du hast neben Mathe, Englisch und Deutsch als weiteres 
Hauptfach IT (Informationstechnik). Da lernt man in der 11. Klasse 
erstmal die Grundlagen. Also viel mit Binärzahlen hantieren (rechnen, 
vergleiche). Dann kommt es langsam zu Schaltungen und Flip Flops. Das 
wurde bei uns auch dann in die Praxis umgewandelt, so haben wir auf 
Digital-Boards viele Schaltungen gesteckt.

Dann haben wir noch als Nebenfach CT (Computertechnik). Begonnen haben 
wir da mit etwas excel Programmierung. Danach fingen wir mit Java an. 
Aber das unterscheidet sich von Schule zu Schule. Wir machen Java, die 
anderen C++ o.ä.

In 12 haben wir dann in IT uns mit der Architektur eines modernen PCs 
genauer auseinandergesetzt, was uns schliesslich zur µ-C Programmierung 
führte. Außerdem haben wir unsere Java Kenntnisse auf "Objekt 
orientiertes Programmieren" erweiter, dabei lernten wir UML. Also 
Klassendiagramme&Algorithmen&Sequenzdiagramme...etc.. erstellen. Dann 
haben wir noch kurz Datenbanken angeschnitten. SQL Abfragen und 
Entity-Relationship Modelle erstellen waren da die Themen.

In der 13. Klasse behandeln wir die Netzwerktechnik sehr detailliert. 
Das geht soweit, dass man sich selber Netze erstellt, Netze teilt, 
Routing-Tabellen erstellt und sich die Frames in den jeweiligen 
OSI-Schichten anschaut.

Gerade eben erfahren wir was über Betriebssysteme: Wie arbeitet die CPU? 
Was sind Deadlocks und wie erkennt man sie? Zum Beispiel rechnet man die 
durchschnittliche Verarbeitungszeit aus, wenn man als CPU-Funktion den 
"Round Robin" oder "First-Come, First-Serve" benutzt.

Das letzte Thema sind Festplatten. Man startet bei FAT32 und behandelt 
das ganz genau und geht über zu NTFS. Da muss man zum Beispiel Data-Runs 
erstellen oder irgendwelche memory Pages ausrechnen.

Falls du noch Fragen hast, dann adde mich in ICQ: 16742260



Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meiner Einer wrote:

> Es ist nicht so, dass ich gar nichts könnte. Die anderen Aufgaben kann
> ich auch lösen, nur die hier nicht, weil ich nicht weiß wie ich das mit
> der Tabelle handhaben soll.


Ich wüßte auch nicht, was da ne Tabelle soll.

Wie gesagt, z.B. die Umwandlung in 7-Segment wäre ne Sache für ne 
Tabelle.

Aber das machen ja Deine externen Dekoder, also hat der MC damit 
überhaupt nichts am Hut.


Peter

Autor: MC (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Tag Meiner Einer,
deine Schule hört sich ja richtig interessant an. Ich bin auf einer 
ähnlichen Schule, nur mit der Fachrichtung Elektrotechnik/Elektronik.
Um deine Verständnisfrage zu klären:
Erst einmal kannst du nicht die Bits von p2.0 bis 2.7 einzeln in den 
Akku laden, sondern du kannst den Port2 in den Akku laden.
Das heißt, wenn z.B. Port2=0A0h und Akku=0E0h ist, dann bedeutet
"mov a,p2", dass 0E0h=0A0h.
Ich hoffe, dass damit deine Frage beantwortet ist.
Im Anhang findest du eine Übersicht aller 8051-Befehle. Vielleicht kann 
die dir noch helfen.
Bis irgendwann,
MC

Autor: Meiner Einer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankeschön euch beiden!

@MC

Die Befehlsliste ist zumindest detaillierter als meine. Bei mir stehen
einfach nur alle Befehle untereinander und rechts daneben ein kurzer
Satz dazu.

Ja, die Frage ist beantwortet. Vielen Dank!

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.