sanduhr_doku.pdf (658 KB) - Homepage von Stefan Buchgeher
sanduhr_doku.pdf (658 KB) - Homepage von Stefan Buchgeher
sanduhr_doku.pdf (658 KB) - Homepage von Stefan Buchgeher
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Elektronische Sanduhr<br />
4.4.5. NAECHSTZUST (=LED-Zustandswechsel)<br />
Wie funktioniert nun ein Zustandswechsel? In den Registern POS1 bis POS32 stehen<br />
die Adressen der 32 Leuchtdioden, welche gerade leuchten. Es sind immer nur 32<br />
Leuchtdioden aktiv. Bei einem Zustandswechsel muss also eine Leuchtdiode dunkel<br />
werden, und dafür eine andere leuchten. Die Adresse, jener Leuchtdiode welche<br />
erlischt, wird in den Registern POS1 bis POS32 gesucht, und durch die Adresse der<br />
neuen Leuchtdiode ersetzt. Woher weis das Programm welche Leuchtdiode erlöschen<br />
soll, und welche anstelle dieser leuchten soll? Dazu gibt es zwei Tabellen. In der<br />
Tabelle TABWIRDERSETZT stehen die Adressen der Leuchtdioden, die bei jedem<br />
Zustandswechsel erlöschen und die Tabelle TABNEUELED beinhaltet die Adressen der<br />
Leuchtdioden die bei jedem Zustandswechsel neu hinzukommen. Ein Beispiel macht<br />
diesen Zusammenhang etwas deutlicher. Hier der Übergang <strong>von</strong> Zustand 109 auf 110:<br />
Zustand 109 Zustand 110<br />
TABWIRDERSETZT addwf PC,f<br />
nop<br />
retlw LED32<br />
retlw LED31<br />
retlw LED33<br />
retlw LED30<br />
usw.<br />
TABNEUELED addwf PC,f<br />
nop<br />
retlw LED34<br />
retlw LED33<br />
retlw LED35<br />
retlw LED33<br />
usw.<br />
Bild 3: Zustandswechsel<br />
Der genaue Ablauf wird wieder mit einem Flussdiagramm (auf der nächsten Seite)<br />
genauer beschrieben:<br />
Das Register SUCHZUST wird zunächst mit POS1 geladen, im Register AKTZUSTAND<br />
steht die aktuelle Zustandsnummer <strong>von</strong> 1 bis 112. Mit Hilfe des AKTZUSTAND-Register<br />
wird nun aus der Tabelle TABWIRDERSETZT die Adresse der zu ersetzenden<br />
Leuchtdiode geholt und im Register ZWISCH zwischengespeichert. Nun beginnt der<br />
Suchvorgang. Auch hier ist uns die indirekte Adressierung behilflich. Der Registerinhalt<br />
<strong>von</strong> SUCHZUST wird nun in das FSR-Register geladen. Im IND-Register steht nun die<br />
Adresse der entsprechenden (gerade aktiven) LED, diese wird mit der Adresse, welche<br />
im Register ZWISCH steht verglichen, indem diese beide <strong>von</strong>einander subtrahiert<br />
werden. Ist das Ergebnis der Subtraktion Null, so sind die Registerinhalte dieser beiden<br />
Register gleich. Ob das Ergebnis Null ist erkannt man daran, dass das Zero-Bit (Z)<br />
gesetzt ist. Mit Hilfe des Registers AKTZUSTAND wird nun aus der Tabelle<br />
TABNEUELED die Adresse der neuen LED geladen und in das IND-Register geladen.<br />
Im entsprechenden POSx-Register steht nun die Adresse der neuen aktiven LED. Ist<br />
das Ergebnis der Subtraktion jedoch nicht Null, so wird das Z(ero)-Bit vom Controller<br />
gelöscht. Das SUCHZUST-Register und das SUCHZAEHLER-Register werden um eins<br />
vermindert und ein erneuter Vergleichsvorgang beginnt.<br />
Seite 14