Simulation für den TPS-Mikrocontroller HTF46F47

Bevor man anfängt, mühselig ein noch nicht getestetes Programm über die Tasten am Controller einzugeben, kann man es auch hier zusammenstellen und gleich ausprobieren.

Der Befehlssatz

Ganz oben befindet sich der Befehlssatz. Nach dem Anklicken eines Befehls in den Auswahlfeldern erscheint der Code und der Befehl in den entsprechenden Feldern darunter. Rechts daneben wird dieser Befehl und seine Auswirkungen auf die Register und Ausgänge und die Reaktion auf die Eingänge erklärt.

Das Programmlisting

Den ausgewählten Befehl kann man nun ins Programmlisting darunter an jede beliebige Stelle ablegen, wobei ein vorheriger Befehl dort überschrieben wird. Gleichzeitig wird das Programm-Code-Feld auf der rechten Seite aktualisiert. Leere Befehlsfelder innerhalb eines Programms werden mit "00" aufgefüllt. Beim Anklicken eines Befehls im Programmlisting bei leeren Code- und Befehlfeldern wird seine Beschreibung rechts oben eingeblendet

Programm-Code-Feld

Beim Programmieren wird dieses Feld ständig aktualisiert. Will man ein Programm zur späteren Nachbearbeitung sichern, kopiert man einfach den Inhalt dieses Feldes und kopiert ihn in ein normales Textdokument. Von dort kann man es auch wieder zurückkopieren. Damit dieses Programm auch wieder im Listing erscheint muss nur noch der Button "Einlesen" angeklickt werden. Natürlich kann man hier auch Programm-Code von den Beispielen am Ende dieses Dokumentes kopieren.

Das Programmlisting disassembliert praktisch die Befehls-Codes, so dass man als Programmierer den Sinn der Befehle besser verstehen kann.

Abbild des Mikrocontrollers

In der Mitte der Seite sieht man den Mikrocontroller mit seinen Anschlüssen. Rote Anschlüsse sind Hi und schwarze Anschlüsse sind Low. Per Mausklick kann der jeweilige Status der Eingänge verändert werden.

Die analogen Eingänge bekommen einen Grauwert entsprechend ihrem Eingangswert, der zwischen 0 und f sein kann (16 Stufen). Diese Werte können per Mausklick auf + oder - inkrementiert bzw. dekrementiert werden.

Der PWM-Ausgang (PWM für Pulsweitenmodulation) bekommt abhängig von seinem Ausgangswert einen Grauwert. Er kann einen Wert zwischen 0 und f annehmen (16 Stufen). Die Ausgänge sind von außen nicht beeinflussbar und werden nur vom Mikrocontroller angesteuert.

Die Register A bis D lassen sich mit den weißen Tasten "+" und "-" inkrementieren und dekrementieren. Während des Laufes hat der Controller jedoch Vorrang, wenn er das jeweilige Register überschreibt.

Probelauf

Mit dem Button "Schrittweise weiter" kann man das Programm Befehl für Befehl durcharbeiten, und dabei auch die Registerinhalte und Ausgänge prüfen. Wenn dazu auch noch der Status der verschiedenen Eingänge verändert wird, kann man sehen, ob dann auch die bedingten Sprünge im Programm korrekt erfolgen.

Mit dem Button "RUN" kann man das Programm fast in Echtzeit laufen lassen, und dabei den Status der Eingänge ändern (wenn sie vom Programm abgefragt werden).

Der Button "Pause" hält das Programm an, mit "RUN" wird es fortgesetzt. Das angehaltene Programm kann jetzt auch mit "Schrittweise Weiter" ausgeführt werden.

Mit "Reset" wird das Programm angehalten, und der Programmzähler geht an den Anfang zurück. Gleichzeitig werden die Register und die Ausgänge auf 0 zurückgesetzt.

"Alles Löschen" entfernt das Programm aus dem Listing, jedoch bleibt es erst einmal im Programm-Code-Feld stehen. Dort könnte man einzelne Befehle von Hand löschen oder hinzufügen und mit Einlesen die geänderte Version wieder zurück ins Listing laden.

Klickt man auf "Alles Löschen" während des Ausführens eines Pogrammes, kann man schön beobachten, wie der Programmzähler reihum lauter gelöschte Speicherzellen abklappert als große Schleife (128 Bytes)

Beispiele

Wechselblinker

Dies ist das Standard-Beispiel. Es schaltet den Ausgang 0 und den Ausgang 3 abwechselnd ein mit jeweils einer Pause von e1ner halben Sekunde. Der Programm-Code zum Kopieren steht immer am Ende eines Beispiels:

11 28 18 28 34

Binärzähler

Dieses Programm benutzt das Register A zum Hochzählen. Bei jedem Durchlauf wird der Inhalt des Registers A auch zum PWM-Ausgang kopiert, so dass sich dort ein ansteigender Wert ergibt, der aber nach 16 Durchgängen immer wieder bei 0 anfängt. Jeder Durchlauf dauert 100ms.

71 54 59 26 34

AD-Wandler

Mit diesem kleinen Programm wird der erste Analogeingang abgefragt. Der Wert wird in Register A eingelesen und von dort auf den PWM-Ausgang weiter geleitet. Nach jedem Zyklus wird 100ms gewartet.

69 54 59 26 34

Zufallsgenerator

Dieses Programm wartet, bis man den ersten Programmiereingang auf Low setzt. Dann zählt Register A zyklisch durch, und sobald man den Programmiereingang wieder auf Hi setzt, hält das Programm an, und man bekommt einen "Zufallswert" angezeigt.

54 ce 71 33

Impulslängenmessung

Hier wird gemessen, wie lange der erste Programmiereingang auf Low gesetzt wurde...

22 cc 32 40 22 71 54 ce 34 39

Lauflicht hin und her...

Bei diesem Beispiel wird nicht ein Bitmuster nach dem anderen ausgegeben, sondern ein Bit in Register A durch Multiplikation mal 2 und Division durch 2 hin und her geschoben. Dies passiert in zwei Schleifen mit Schleifenzähler Register C.

42 51 43 52 41 54 28 75 a5 41 52 44 54 28 76 ac 90

Dämmerungsschalter mit Hysterese

Alle digitalen Ausgänge gehen bei einem analogen Eingangswert von 9 auf Hi, werden aber erst wieder Low, wenn der Eingangswert 5 erreicht wird.

10 45 51 69 c1 10 49 51 69 c2 1f 3a

LED-Dimmer

Bei ständigem Low am zweiten Programmiereingang wird der PWM-Ausgangswert immer höher, bis er f erreicht. Wird nur kurz ein Low angelegt, wird PWM inkrementiert, und bleibt auf diesem Wert stehen. Das gleiche gilt für die Abwärtsregelung mit dem ersten Programmiereingang.

80 59 27 52 4f 51 62 c2 9b cf 71 52 40 51 62 c1 90 ce 72 90

Zahlenschloss

Hier ein Beispiel mit einem Unterprogramm. Das Unterprogramm befindet sich an Adresse 20 und wertet die beiden Programmiereingänge aus. Mit dem Wert in Register A wird das Unterprogramm verlassen. Im Hauptprogramm, das das Unterprogramm drei Mal aufruft, wird dann dieser Wert überprüft. Es werden die Zahlen genau wie beim Programmieren eingegeben. Nur, wenn die Zahlenfolge "3, 5, 2" eingegeben wurde, geht der PWM-Ausgang auf f.

82 43 51 d0 c3 30 10 45 51 d0 c3 30 10 42 51 d0 c3 30 10 4f 59 30 00 00 00 00 00 00 00 00 00 00 cc 31 40 54 23 ce 32 cf e0 cc 33 71 23 cc 31 3c