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:
Es passierte jedoch erstaunliches. Das folgende Protokoll verdeutlicht noch einmal die dunklen Machenschaften von Port D:Code:$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
Unser Programmierer war geschockt, gab jedoch nicht auf und dem ROTATE-Befehl eine Chance. Schließlich macht dieser dasselbe. Neuer Code, neues Glück:Code:Pin-Nr.: 76543210 LEDs: 00000001 00001010 01100100 11101000 00010000 10100000 01000000 10000000
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?Code:$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







Zitieren

Lesezeichen