est Bewegung durch eine 3D-Landschaft mit ... - David Zaadstra
est Bewegung durch eine 3D-Landschaft mit ... - David Zaadstra
est Bewegung durch eine 3D-Landschaft mit ... - David Zaadstra
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Projektarbeit 2002, BKIK 2/1<br />
<strong>David</strong> <strong>Zaadstra</strong>, Alexander Fuchs<br />
<strong>Bewegung</strong> <strong>durch</strong> <strong>eine</strong> <strong>3D</strong>-<strong>Landschaft</strong> <strong>mit</strong> Fernbedienung<br />
Elektronikschule Tettnang<br />
5.2 Das Assemblerprogramm<br />
Das Assemblerprogramm ist in 80535-Assembler geschrieben und umfasst, Kommentare<br />
eingeschlossen, etwa 600 Zeilen selbst entwickelten Code.<br />
Die Aufgabe dieses Assemblerprogramms ist es, die Signalfolge, welche von der Diode SFH<br />
5110 auf Port 1.1 des Mikrocontrollers eingespeist wird, zu interpretieren, zu vergleichen und<br />
zu erkennen. Anschließend soll die Nummer des erkannten Signals per V24 an den COM -<br />
Port des PCs gesendet werden.<br />
Das Programm b<strong>est</strong>eht aus<br />
- Hauptprogramm<br />
- Interrupt-Programm<br />
sowie aus den Makros<br />
- WAIT_HIGH<br />
- SAVE<br />
- POSTPROCESSDATA<br />
- benutzt: ENCODE<br />
- COMPARE<br />
- benutzt: COMPAREONE<br />
- SENDAKKU<br />
die per .inc-Datei in das Hauptprogramm inkludiert werden. Entwickelt wurde das Programm<br />
unter der Entwicklungsumgebung µVision der Firma Keil.<br />
5.2.1 Funktion<br />
Um, wie unter Punkt 5 bemerkt, das auf Port 1.1 eingespeiste Signal dekodieren zu können<br />
muss der Mikrocontroller also im Signalverlauf das Header-Signal und die 2<br />
unterschiedlichen Bitzeiten messen, speichern, in Bits umwandeln, vergleichen und erkennen<br />
können. Da hier ein äußerst knappes Timing eingehalten werden muss, werden während des<br />
Signalverlaufs ausschließlich die Impulslängen <strong>durch</strong> den Timer 0 im Interrupt-Modus in<br />
0,1ms – Schritten gemessen, in die Register R0 und R1 addiert und anschließend <strong>durch</strong> das<br />
Makro „SAVE“ in den externen Speicher gespeichert. Die Impulslänge <strong>eine</strong>s Low-Impulses<br />
wird dabei immer in R0, die Länge <strong>eine</strong>s High-Impulses in R1 aufaddiert.<br />
Um immer erst genau bei Beginn <strong>eine</strong>s Signals die Messung zu starten, setzt das Makro<br />
„WAIT_HIGH“ <strong>eine</strong>n ca. 10ms langen High-Impuls voraus, welcher nur zwischen dem<br />
- 16 -