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?
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
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
@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 :-)
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
"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
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
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
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!
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.