PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seltsamkeit an Port D



Goblin
18.12.2005, 16: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?

linux_80
18.12.2005, 16:08
Hallo,
ja da haben wir einen schönen Fehler, :-)
nach dem Motto: der µC macht das was man ihm sagt, und nicht das was man meint. :-)

Du wolltest die Werte binär übergeben, doch sie sind als dezimal angegeben !

Goblin
18.12.2005, 16:10
Pantomime Antwort meinerseits:

KOPF---->TISCH
KOPF---->TISCH
KOPF---->TISCH
KOPF---->TISCH
KOPF---->TISCH
KOPF---->TISCH