Goblin
18.12.2005, 17:01
Hallo!
Atmega8, interner Takt, PortD. Hier nimmt unsere Geschichte ihren eigenartigen Verlauf. Die Mission schien einfach: Lasse LEDS an dem Port der Reihe nach leuchten (auch Lauflicht genannt), um die einzelnen Pins zu überprüfen. Unser Programmierer schrieb daraufhin folgendes (unsauberes) Programm:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Schleife:
Portd = 00000001
Wait 1
Portd = 00000010
Wait 1
Portd = 00000100
Wait 1
Portd = 00001000
Wait 1
Portd = 00010000
Wait 1
Portd = 00100000
Wait 1
Portd = 01000000
Wait 1
Portd = 10000000
Wait 1
goto Schleife
Es passierte jedoch erstaunliches. Das folgende Protokoll verdeutlicht noch einmal die dunklen Machenschaften von Port D:
Pin-Nr.:
76543210
LEDs:
00000001
00001010
01100100
11101000
00010000
10100000
01000000
10000000
Unser Programmierer war geschockt, gab jedoch nicht auf und dem ROTATE-Befehl eine Chance. Schließlich macht dieser dasselbe. Neuer Code, neues Glück:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Dim A As Byte
Schleife:
Let A = 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Goto Schleife
Siehe da: PORT D war bezwungen. Das Lauflicht funktionierte wie beabsichtigt. Der Programmierer fragt sich dennoch, warum der erste Versuch fehlschlug. Könnt ihr ihm helfen?
Atmega8, interner Takt, PortD. Hier nimmt unsere Geschichte ihren eigenartigen Verlauf. Die Mission schien einfach: Lasse LEDS an dem Port der Reihe nach leuchten (auch Lauflicht genannt), um die einzelnen Pins zu überprüfen. Unser Programmierer schrieb daraufhin folgendes (unsauberes) Programm:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Schleife:
Portd = 00000001
Wait 1
Portd = 00000010
Wait 1
Portd = 00000100
Wait 1
Portd = 00001000
Wait 1
Portd = 00010000
Wait 1
Portd = 00100000
Wait 1
Portd = 01000000
Wait 1
Portd = 10000000
Wait 1
goto Schleife
Es passierte jedoch erstaunliches. Das folgende Protokoll verdeutlicht noch einmal die dunklen Machenschaften von Port D:
Pin-Nr.:
76543210
LEDs:
00000001
00001010
01100100
11101000
00010000
10100000
01000000
10000000
Unser Programmierer war geschockt, gab jedoch nicht auf und dem ROTATE-Befehl eine Chance. Schließlich macht dieser dasselbe. Neuer Code, neues Glück:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Dim A As Byte
Schleife:
Let A = 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Portd = A
Rotate A , Left , 1
Wait 1
Goto Schleife
Siehe da: PORT D war bezwungen. Das Lauflicht funktionierte wie beabsichtigt. Der Programmierer fragt sich dennoch, warum der erste Versuch fehlschlug. Könnt ihr ihm helfen?