Download Icon

Staatliche Prüfung in Mikrocomputertechnik vom 15.06.2020 + Lösungsvorschlag 1.1

Keine Berechtigung zum Herunterladen
Danke für die vielen Antworten! Ja ich arbeite mich da nochmal rein.
Nun zu meiner anderen frage: Woher weiß ich wie ich die ROMs und RAMs an den Decoder anschließe?
Und wie komme ich am schnellsten da auf die Lösung?: RAM2 soll verbunden werden und die Anfangsadresse 8000H erhalten.
Ich bin im 5. Semester, fehlt mir da iwas das ich so wenig weiß? :D

MfG
Eddy
 
Erstmal um sicher zu gehen, dass ich auch das selbe Bild vor Augen habe wie du zu dem Ram2 Baustein, bearbeitet du die Musterklausur in Mikro?😁
 
Code:
            MUSTERPRÜFUNG
            
            org 0000H
            jmp HAUPT
            
HAUPT:        org 0100H
            mov R0,#00
            mov R1,#00
            mov R2,#00
            mov A,Port0
            
RECHNEN:
            clr c        // Lösche Carry Bit
            jc kleiner    // Wenn Port 0 kleiner als 07H -> R1 inkrementieren und LED an P1.0 einschalten + zurück ins Hauptprogramm
            jz gleich    // Wenn Port 0 gleich 07H -> R2 inkrementieren und LED an P1.3 einschalten + zurück ins Hauptprogramm
            jp mehr        // Wenn Port 0 größer 07H -> R3 inkrementieren und LED an P1.7 einschalten + zurück ins Hauptrprogramm
            
kleiner:    inc R0
            setb P1.0
            clr P1.3
            clr P1.7
            ret

gleich:        inc R1
            setb P1.3
            clr P1.0
            clr P1.7
            ret
        
mehr:        inc R2
            setb P1.7
            clr P1.0
            clr P1.3
            ret

Und Assembler ist bei mir nun auch schon 6 Jahre her^^ Stimmt das so ungefähr? Musterprüfung Aufgabe 2.2

Und Aufgabe 2.1 die PAPs:

IMG_20200708_203119.jpgIMG_20200708_203143.jpg
 
Nun zu meiner anderen frage: Woher weiß ich wie ich die ROMs und RAMs an den Decoder anschließe?
Und wie komme ich am schnellsten da auf die Lösung?: RAM2 soll verbunden werden und die Anfangsadresse 8000H erhalten.

Oben im Text steht ja die Anfangsadresse 8000H.Solche Vorgaben wirst du auch in der Prüfung haben.
Ich weiß nicht in wie weit du mit hexadezimalen und binären Zahlen vertraut bist aber ich versuche es mal zu erklären.
Insgesamt sind es 16 Bits(Adressleitungen)
Am besten teilt man sich diese durch 4, dann hat man 4 Nibble und somit eine bessere Übersicht. Entscheidend ist der Nibble ganz links für die Ansteuerung der Bausteine über den Decoder.
Ganz links, also A12 - A15. Mit diesen 4 Bits lässt sich von 0-F in hex oder von 0-15 in dez zählen.Wir bleiben jedoch bei hex.
Diese 4 Bits sollen eine 8 in hex für die Anfangsadresse darstellen .
Deswegen 1000 = 8.
Dort wo die 1 gesetzt werden musste, um die Anfangsadresse sicherzustellen, ist ja A15.Von A15 geht die Leitung auf den Decoder.Dort sind 3 Bits(0 1 und 2).Da wir ja mit A15 das Bit2 ansprechen und binär 100 = 4 ist, wissen wir jetzt das mit der Anfangsadresse 8000H der Ausgang 4 am Decoder angesprochen wird.Da Ram 2 einen negierten Eingang hat brauchen wir auch hier wieder kein Not Gatter(Negierung oder wie auch immer man dazu sagen mag) wie bei Rom1.

Auf deinen Code und Flussdiagramm schau ich morgen mal rüber.😀

Schöne Grüße
Baam
 
Oben im Text steht ja die Anfangsadresse 8000H.Solche Vorgaben wirst du auch in der Prüfung haben.
Ich weiß nicht in wie weit du mit hexadezimalen und binären Zahlen vertraut bist aber ich versuche es mal zu erklären.
Insgesamt sind es 16 Bits(Adressleitungen)
Am besten teilt man sich diese durch 4, dann hat man 4 Nibble und somit eine bessere Übersicht. Entscheidend ist der Nibble ganz links für die Ansteuerung der Bausteine über den Decoder.
Ganz links, also A12 - A15. Mit diesen 4 Bits lässt sich von 0-F in hex oder von 0-15 in dez zählen.Wir bleiben jedoch bei hex.
Diese 4 Bits sollen eine 8 in hex für die Anfangsadresse darstellen .
Deswegen 1000 = 8.
Dort wo die 1 gesetzt werden musste, um die Anfangsadresse sicherzustellen, ist ja A15.Von A15 geht die Leitung auf den Decoder.Dort sind 3 Bits(0 1 und 2).Da wir ja mit A15 das Bit2 ansprechen und binär 100 = 4 ist, wissen wir jetzt das mit der Anfangsadresse 8000H der Ausgang 4 am Decoder angesprochen wird.Da Ram 2 einen negierten Eingang hat brauchen wir auch hier wieder kein Not Gatter(Negierung oder wie auch immer man dazu sagen mag) wie bei Rom1.

Auf deinen Code und Flussdiagramm schau ich morgen mal rüber.😀

Schöne Grüße
Baam
Hey super vielen Dank! Hab mir im Formelhelft einfach eine Tabelle gemacht mit allen Zuständen für ein 3 zu 8 Decoder (3 Eingänge und 8 Ausgänge).
Ich saß mal ein wenig dran und hab herum probiert bis ich was raus hatte und so langsam kapiere ich es wieder. War damals eigentlich mein Lieblingsthema aber nach so langer Zeit und dem was noch so passiert ist vergisst man mal sachen^^

MfG und Gute Nacht :) :sleep:
 
Ja leider verblassen nicht häufig benutzte Zusammenhänge.Glaube da ist keiner von befreit.Aber das "wieder reinkommen" ins Thema ist trotzdem einfacher als am Anfang, wo man das erste Mal damit in Kontakt kam.

Zu deinem Code für HAUPT:
1.Das Label HAUPT muss eine Zeile tiefer.
2.Im Hauptprogramm hast du eine Schleife beim Flussdiagramm berücksichtigt, im Code jedoch nicht.
3.Das Unterprogramm RECHNEN wird auch nicht aufgerufen.
3.es heißt mov A,P0
4.Hinter die 00 kommt ein h oder d, könnte sonst Probleme geben beim übersetzen

für RECHNEN:
1.Die nicht benötigten Bits an P0 sollten maskiert werden mit 0FH
2.Nach dem Label RECHNEN steht nichts.
3.Es wird nichts verglichen, weil der Befehl subb nicht verwendet wird.
4.clr c wird vor dem Befehl subb verwendet.
5.Wo hast du den Befehl jp her, sagt mir nichts!?
Wenn du vorher jc und jz ausgewertet hast, dann brauchst du für "größer als" nicht springen, sondern einfach das weiter schreiben was passieren soll bei "größer als" und am Ende ret.
6. Am Ende eines Programms gehört der Befehl end.
7.Da man weiß, dass an den nicht benutzten Bits von P1, bis auf die LED ebend, die Pins auf Masse sind, kann man auch wie in der Klausur das ganze Byte beschreiben.
So wie du es mit setb und clr gelöst hast, ist aber auch nicht falsch.
 
Frage, wo hast du die MUSTERKLAUSUR her, ich hab keine bin ebenfalls 5. Semester.
Habe vom Daa keine bekommen.
Hab die von meinem Studienkollegen der im 6. ist. Ich musste das 5e wegen Krankheit aussetzen und er kann mir die Sachen besorgen^^
Ich weiß aber nicht ob ich sowas hier posten darf, nicht das es ärger gibt.

Ja leider verblassen nicht häufig benutzte Zusammenhänge.Glaube da ist keiner von befreit.Aber das "wieder reinkommen" ins Thema ist trotzdem einfacher als am Anfang, wo man das erste Mal damit in Kontakt kam.

Zu deinem Code für HAUPT:
1.Das Label HAUPT muss eine Zeile tiefer.
2.Im Hauptprogramm hast du eine Schleife beim Flussdiagramm berücksichtigt, im Code jedoch nicht.
3.Das Unterprogramm RECHNEN wird auch nicht aufgerufen.
3.es heißt mov A,P0
4.Hinter die 00 kommt ein h oder d, könnte sonst Probleme geben beim übersetzen

für RECHNEN:
1.Die nicht benötigten Bits an P0 sollten maskiert werden mit 0FH
2.Nach dem Label RECHNEN steht nichts.
3.Es wird nichts verglichen, weil der Befehl subb nicht verwendet wird.
4.clr c wird vor dem Befehl subb verwendet.
5.Wo hast du den Befehl jp her, sagt mir nichts!?
Wenn du vorher jc und jz ausgewertet hast, dann brauchst du für "größer als" nicht springen, sondern einfach das weiter schreiben was passieren soll bei "größer als" und am Ende ret.
6. Am Ende eines Programms gehört der Befehl end.
7.Da man weiß, dass an den nicht benutzten Bits von P1, bis auf die LED ebend, die Pins auf Masse sind, kann man auch wie in der Klausur das ganze Byte beschreiben.
So wie du es mit setb und clr gelöst hast, ist aber auch nicht falsch.

Auweia da ist noch viel dran zu machen^^ Vielen Dank ich werd mich da nochmal dran setzen müssen..

Liebe Grüße
Eddy
 
Hey,

Habe Heute wegen dem Anschluss an RAM1&RAM2 nachgefragt und seine Vermutung war:

Das warscheinlich einen Fehler in der Rekonstruktion ist und bei RAM1 und RAM2 jeweils 1Kx4bit Stand 🤷‍♂️

Er meinte das wenn mein beide gleichzeitig übe CE ansteuert, müssten ??x4bit da stehen denn:
wenn zwei Baustene mit ??x4bit angeschlossen werden (also wie bei der Aufgabe um LM) der eine Baustein das höhere byte und der andere Baustein das niedrige Byte bearbeitet.

In unserem Fall wären das dann insgesamt 1Kx4bit + 1Kx4bit = 1K x 8bit also A0-A9
Wobei das der eine RAM: (XX00H) bearbeitet und der andere RAM: (00XXH) bearbeitet.
Würde dann ja auch zu der Aufgabe im LM passen?
Wie Welcher RAM genau welche Bit´s hab ich jetzt nicht nachgefragt, ist aber glaube ich egal 😅

Gruß
 
Zuletzt bearbeitet:
Hallo,

Ah okay.
Hatte mich zwar immer wieder gewundert wozu zwei Bausteine die parallel laufen und so gesehen die gleichen Daten speichern sollen aber aus deinem geschriebenen ergibt sich für mich jetzt ein anderer Blickwinkel.Es werden nicht die Bytes der Adressen anders gehandhabt, sondern die Nibble des Datenwortes.

Dem Lernmodul zufolge kann man ja doch schon sagen, dass ich die Anzahl der Adressleitungen und - bereiche für Ram1&2 richtig berechnet habe, oder?(Anzahl der Adressleitungen ändert sich nicht und dementsprechend in der Tabelle auch nichts)
Was jedoch falsch ist, ist die Angabe mit der Wortbreite auf den Bausteinen, weil ich bisher nicht die Bedeutung gesehen habe, die sich für mich jetzt durch dein Geschriebenes ergeben hat!

Angenommen auf den Datenleitungen liegt ein 8Bit breites Datenwort.(Ist ja auch eine 8 Bit CPU im 8051).Dieses Datenwort soll jetzt gespeichert werden und weil 2 Bausteine (Ram 1&2) angesprochen werden, diese jedoch nur ein Datenwort von 4Bits speichern können, entscheidet der Controller diese 8 Bits in jeweils 4Bits zu teilen.Daraus ergibt sich ,dass das Low Nibble(rechte 4 Bits des Datenwortes ) in den einen Baustein und das High Nibble(linke 4 Bits des Datenwortes) in den anderen Baustein unter der einen gleichen Adresse in beiden Bausteinen abgelegt werden und deswegen sich auch keine Änderung in der Anzahl der Adressleitungen ergibt.

Hätte der 8051 jetzt eine 16Bit CPU, dann würde das mit meinen Angaben vermutlich auch passen, weil es sich genauso wie oben beschrieben, nur ebend mit den linken und rechten 8 Bits verhalten würde.Da es in unserem Fall nicht so ist, hat der Dozent schon die richtige Vermutung gehabt.
Nur so könnte ich mir das alles jetzt erklären.🤔

Top, dass du da nochmal nachgehakt hast Pinky.

Schöne Grüße
 
Ja genau wie du geschrieben hast sehe ich das jetzt auch :thumbsup:

Deine Rechnung war absolut richtig würde ich sagen... zwar nicht zu 100% aus den selben Gründen aber das intressiert ja keinen 😄

Hätte mich auch gewundert wenn zwei RAM immer Parallel das gleiche abarbeiten. Da man ja in der Praxis schon begrenzt ist wenn das Programm größer wird und man jeden Speicherplatz braucht.

e der 8051 jetzt eine 16Bit CPU, dann würde das mit meinen Angaben vermutlich auch passen, weil es sich genauso wie oben beschrieben, nur ebend mit den linken und rechten 8 Bits verhalten würde

Ja vermutlich schon....:unsure:
Dann würde man immer 2 Bausteine gleichschalten oder direkt 16bit bausteine benutzen

Kein Problem vllt. muss ich es am Sonntag direkt anwenden ☺
 
Hätte mich auch gewundert wenn zwei RAM immer Parallel das gleiche abarbeiten. Da man ja in der Praxis schon begrenzt ist wenn das Programm größer wird und man jeden Speicherplatz braucht.
Vollkommen richtig!

Dann würde man immer 2 Bausteine gleichschalten oder direkt 16bit bausteine benutzen

Ich sehe, wir surfen jetzt auf der selben Welle.Genau so meine ich das😄👍
Schön das man nach den Staatlichen diesen Zusammenhang jetzt auch noch für sich klären konnte.
Kein Problem vllt. muss ich es am Sonntag direkt anwenden ☺
Dann mal gutes Gelingen am Sonntag👍
 
Guten Tag,

habe eine Fage: hätte man nicht den Inhalt von Port a direkt im Register BC laden können und dann
Inhalt von C in R0 laden
Inhalt von B in R1 laden

Ohne maskieren und Nibbeltausch????
vielen Dank
 
Hallo Hakom,
Ich nehme an mit Port a meinst du P0 und mit Register BC meinst du die zwei Register b und c.
Wenn ich dich richtig verstanden habe, dann möchtest du P0 einmal in das Register C und einmal ins Register B schreiben.
Dann hast du das Problem, dass in beiden Register immer das Selbe steht und der 8051 zwischen Soll- und Istwert nicht unterscheiden wird.

Bei der Aufgabe 3 ist es so, dass Ist- und Sollwert an einem Port liegen.
Mit dem maskieren stellst du sicher, dass zwischen den beiden Werten unterschieden wird.
Mit dem Nibbletausch machst du die Werte gleichwertig, um diese anschließend mit dem subb Befehl zu vergleichen.
Schau dir dazu meine Kommentare im Program an und versuche es nachzuvollziehen.Sollte das nicht klappen mach dich vertraut mit den Begriffen/Themen:
Byte,High Nibble und Low Nibble,Wertigkeiten der Bits eines Bytes

Hoffe ich konnte dich richtig verstehen und du findest für dich was brauchbares aus diesem Beitrag.

Schöne Grüße
Baam
 
Hallo Zusammen,

ich hätte noch ein Paar offene Fragen zur Aufgabe 4. Vielleicht wisst Ihr ja was genau der Hintergedanke dazu ist.
Im Programmteil Trenn:
mov B, P0 // Bit P0 wird in B geschrieben
mov A, B // B wird in Akkumulator geschrieben
anl A, #0FH // laut Formelsammlung wird da A mit dem Datenspeicher mit Und verknüpft aber was heißt das für den Programmablauf ? Nur wenn beide bits 1 sind gehts weiter mit dem Programmablauf ?
Mov R0,A // Das verknüpfte Ergebnis wird in Register 0 koppiert
Mov A,B // jetzt wird B in A geladen
Swap A // der Swap befehl tauscht ja das Low nibble und das high nibble wenn ich den Befehl richtig verstanden habe. Aber es ist ja nur ein Bit drinnen was wird dann getauscht ?

Kurze Frage zum Schluss. Mit dem befehl mov TCON, #40H wird der Timer gestartet oder ?

Vielen Dank für Eure Hilfe.

Übrigens erstklassige Probeprüfung Baam :thumbsup:

Gruß

Joking
 
Zuletzt bearbeitet:
Ich glaube ich habe es Verstanden.
Die Funktion die mit dem anl gemacht wird heißt maskieren. Dadurch werden nur die Bits bearbeitet die mit high verknüpft sind.
Sprich: Wenn A zB. 1011.0110 ist werden nur die Bits XXXX.0110 verarbeitet.
Korrigiert mich wenn ich falsch liegen sollte. So Wurde es zumindest in der Prüfung von 2009 gehandhabt.
Damit erklärt sich auch der Swap Befehl.


Schönen Montag noch 🖐
 
Top