Hallo zusammen Ich habe ein wenig mit der Theorie von Mikrocontroller beschäftigt. Könnt ihr es überprüfen, ob ich es verstanden habe? Vorgang über Eingabeport kommen die Signal rein, die Signale werden über den Datenbus direkt ins Rechenwerk weitergeleitet. Der CPU (Rechenwerk) wandelt die Signale in Nummer und sendet die Nummer an den Programmcounter. Der Programmcounter sucht anhand der Nummer (Adresse) den jeweiligen Befehl aus dem Programmspeicher (z.B. 3 = zwei Summanden zusammenrechen) und gibt es an den Befehlsinterpeter, der den Befehl entsprechend umwandelt. Dann schickt der Befehlsinterpreter den Befehl in den Rechenwerk, wo die Operationen durchgeführt wird. Die aktuelle Zahlenwerte der Operation werden in den Register (Akkumulator) gespeichert. Falls es zwischenergebnisse gibt, landen die in den Datenspeicher des Mikrocontroller. Die Zwischenergebnisse werden adressiert im Datenspeicher gelegt, die Nummer der jeweiligen Ergebnisse liegen im Programmcounter. *Adressbus:* Über diesen Bus laufen alle Adresse (Nummer). *Datenbus:* Alle Daten gehen über diesen Bus *Steuerbus:* Er steuert oder organisiert alle Büsse, ist quasi der Verkehrspolizist auf der Büsse. Stimm das etwa, wenn nicht würde ich auf Antworten und Kritik freuen :-). Gruss Pera
Was du beschreibst, ist das von Neumann'sche Rechnermodell. Das gilt auch für Microcontroller, eigentlich aber für fast alles, was heute Programme ausführen kann. http://de.wikipedia.org/wiki/Von-Neumann-Architektur
Pera Panchan schrieb: > Theorie von Mikrocontroller Die gibt es? ;-) Microcontroller sind einfach bloss Rechner wie andere auch. Die Abgrenzung ist formal ziemlich schwierig, weil manche Leute auch einen Quadcore mit Gigabytes an Speicher und Linux drauf noch als Microcontroller sehen, wenn damit nur irgendwelche automatischen Steuerungen erfolgen, während andere diesen Begriff auf vollintegrierte selbständige Chips beschränken. > über Eingabeport kommen die Signal rein, die Signale werden über den > Datenbus direkt ins Rechenwerk weitergeleitet. Der CPU (Rechenwerk) > wandelt die Signale in Nummer und sendet die Nummer an den > Programmcounter. > Der Programmcounter sucht anhand der Nummer (Adresse) > den jeweiligen Befehl aus dem Programmspeicher (z.B. 3 = zwei Summanden > zusammenrechen) und gibt es an den Befehlsinterpeter, der den Befehl > entsprechend umwandelt. Bis hierhin sind wird ungefähr beim Konzept von Interrupts. > Die Zwischenergebnisse werden > adressiert im Datenspeicher gelegt, die Nummer der jeweiligen Ergebnisse > liegen im Programmcounter. Aber das ist ziemlich schräg. Weshalb sollte der program counter irgendwas mit der Datenadressierung zu tun haben?
Hallo zusammen, ich habe mich ein wenig mit der Theorie hinter dem Mikrocontroller beschäftigt. Könntet ihr bitte überprüfen, ob ich das unten Zusammengefasste soweit richtig verstanden habe? Vorgang der Datenverarbeitung: Über einen Eingabeport kommen die Signale rein, werden über den Datenbus ins Rechenwerk weitergeleitet und in der CPU verarbeitet. Die CPU (Rechenwerk) wandelt die Signale in "Zahlen" und sendet diese an den Programmzähler (program counter). Dieser sucht nun anhand der aus dem Signal erhaltenen Zahl den jeweiligen Befehl aus dem Programmspeicher (z.B. 3 = zwei Summanden zusammenrechnen) und gibt diesen Befehl an den Befehlsinterpreter, der den Befehl entsprechend umwandelt. Dann schickt der Befehlsinterpreter den Befehl in das Rechenwerk, wo die Operationen durchgeführt werden. Die aktuellen Zahlenwerte der Operation werden in einem Register (Akkumulator) gespeichert. Falls es Zwischenergebnisse gibt, landen diese im Datenspeicher des Mikrocontrollers. Die Zwischenergebnisse werden adressiert im Datenspeicher abgelegt, die zugehörige Adresse der jeweiligen Ergebnisse liegen im Programmzähler. *Adressbus:* Über diesen Bus laufen alle Adressen. *Datenbus:* Alle Daten gehen über diesen Bus *Steuerbus:* Er steuert oder organisiert alle Busse; ist quasi der Verkehrspolizist auf dem Bus. Stimmt das etwa? Wenn nicht, würde ich mich über Antworten und Kritik freuen :-). Gruss Das geht sonst nicht!
@Geoarg A. Danke für den Link. Aber schlauer als vorher bin ich immer noch nicht :-(. @A.K. sry. habe ich wohl falsch beschrieben. Also der Programmcounter oder Befehlszähler besitzt die Tabelle mit der Adresse und dazugehörende Befehle/Ergebnisse. So meinte ich. Wenn er die Tabelle nicht hat, wie soll er wissen, welche Nummer er als nächstes ausführen soll? Die Tabelle sähe dann so aus: Dstenspeicher 334 = 234.34 367 = 10 .. Programmspeicher 3 = Multipliziere zwei Zahlen 10 = Subtrahiere 4 ... Oder liege ich da falsch?
Pera Panchan schrieb: > Wenn er die Tabelle nicht hat, wie soll er wissen, welche Nummer er als > nächstes ausführen soll? Was tut ein Zähler? Hochzählen beispielsweise. Auf den Befehl an der Adresse 10 folgt der Befehl an der Adresse 11. Es sei denn, der Befehl an 10 war ein ausgeführter Sprungbefehl nach beispielsweise Adresse 20.
Wenn Du tieferes Verständnis erlangen möchtest, könnte Dir vielleicht folgender Link (und ausreichend Zeit ;-)) helfen: http://www.nand2tetris.org/
Hi Jetzt sag nicht, du willst einen Controller nachbauen? Ansonsten versteh ich deine Probleme nicht. Klar, ein Controller hat einen Programmcounter. Der Adressiert Speicherzellen, wo binärcodierte Befehle hinterlegt sind. Er holt nun einen Befehl nach dem anderen, decodiert sie und führt sie aus. Dabei muss er natürlich auch schon mal auf Daten oder Pripherie zugreifen. In der Regel gibt es drei Busse: Datenbus, Adressbus und Steuerbus. So, wo ist jetzt dein Problem? Der Programmcounter adressiert den Speicher. Der Steuerbus sagt "Lesen". Die Daten werden auf den Datenbus gelegt. Der Programmcounter erhöht und der Befehl ausgeführt. Und das macht er, bis du ihm den Saft entziehst. Gruß oldmax
Lese und verstehe mal: http://de.wikipedia.org/wiki/Harvard-Architektur http://de.wikipedia.org/wiki/Von-Neumann-Architektur
> Die CPU (Rechenwerk) wandelt die Signale in "Zahlen"
Das ist übrigens falsch. Die Umwandlung von einem Signal in eine Zahl
findet in der Peripherie der CPU statt, z.B. in einer Soundkarte, die
dazu mit A/D Wandlern bestückt ist.
Die CPU unterscheidet prinzipiell nicht zwischen Zahlen und anderen
Daten. Alle mir bekannten CPU's verarbeiten Daten in numerischer Form -
auch Buchstaben.
A=65
B=66
C=67
usw.
Wenn die CPU den Wert 65 verarbeitet, weiß sie selbst nicht, ob es sich
dabei um einen Buchstaben, oder um die Zahl oder um etwas ganz anderes
(z.B. ein Stück Musik) handelt.
Nur spezialisierte Recheneinheiten, z.B. für Fließkomma-Arithmetik
wissen, mit was für eine Art von Daten sie arbeiten, weil sie eben dafür
spezialisiert sind.
Ich würde die Grundsätzliche Arbeitsweise einer CPU anders zusammenfassen: Die CPU enthält einen Programmzähler. Dessen Wert wird über den Adressbus an den Programmspeicher übertragen. Der Programmspeichert liefert daraufhin über den Adressbus einen Befehl, der von der CPU ausgeführt wird. Jede CPU hat einen Befehlssatz, wo bestimmten Zahlen bestimmte Operationen zugewiesen sind. Zum Beispiel: 0 = tu nichts 1 = Springe zu Adresse x 2 = Addiere x zum Register A 3 = Springe zu Adresse x, wenn die vorherige Addition 0 ergab 4 = Lade ein Byte von Port x in register A 5 = Gib ein Byte von Register A auf Port x aus Die Steuereinheit reagiert auf diese Befehle. Wenn es sich um eine Operation handelt (wie 2), überträgt sie den befehl zur ALU, welche die Operation durchführt. Ansonsten prüft sie Bedingungen, verändert den Programmzähler entsprechend oder sendet Signale an die Peripherie, damit Daten übertragen werden. Register dienen der temporären Ablage von Daten. In der Regel finden Operationen mit Registern statt. Zum Beispiel lädt man eine Zahl in ein Register, addiert dann einen Wert zum Register und speichert dann das Ergebnis irgendwo anders. Befehle für Ein/Ausgabe (oben 4 und 5) nutzen meistens den Adressbus und den Datenbus, sowie separate Steuerleitungen, um externe Peripherie anzusprechen. Bei Mikrocontrollern sind die I/O Schnittstellen jedoch oft zusammen mit der CPU in einem Chip integriert, so dass der Adress-Bus eventuell nicht verwendet wird. Im einfachsten Fall hat eine CPU nur drei Register: Akkumulator Programzähler Status Register Das Status Register gibt darüber Auskunft, wie eine vorherige Operation abgelaufen ist: z.B. ob sie Null ergeben hat oder ob ein Überlauf stattgefunden hat. Zahlreiche bedingte Operationen (zB. Springe, wennn ...) nutzen diese Flags.
Stefan schrieb: > Die CPU enthält einen Programmzähler. Dessen Wert wird über den > Adressbus an den Programmspeicher übertragen. Der Programmspeichert > liefert daraufhin über den Adressbus einen Befehl, der von der CPU > ausgeführt wird. Ziemlich falsch: Der PC zeigt auf die Adresse des Befehls der als nächstes decodiert werden wird. Dieser Wert wird an den Adressbus des Programmspeichers angelegt um den Befehlscode aus dem Programmspeicher zu lesen. Der Befehlscode wird über den Datenbus vom Programmspeicher bereitgestellt, nicht über den Adressbus. Weiter hab ichs mir nicht angeschaut, aber ehe man solche Fehler einbaut, sollte man einfach die Wikipedia Artikel lesen und versuchen zu verstehen.
Ja natürlich, war ein Tippfehler. Eine meinte den Datenbus.
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.