Hallo zusammen Eine eigentlich einfache Aufgabe die ich mir gestellt habe (Mikrokontroller-Neuling) lässt mich ins Leere laufen: Ich möchte den Eingangspegel des PINB6 lesen (PullUp enabled) und den Wert anschliessend an PINB7 ausgeben. Das angehängte Programm ist nur in AVR-Studio simuliert und noch nicht in Wirklichkeit. Die Simulation zeigt jedoch, dass bereits beim ersten Durchlauf das Programm beendet wird, obwohl es das eigentlich erst auf Tastendruck sollte. Was habe ich übersehen, bzw. wer kann mir sagen wo ich die nötigen Infos finde? Gruss Justus
loop: sbic PINB, 6 ;"skip if bit cleared", nächsten Befehl überspringen, ;wenn Bit 0 im IO-Register PINB =0 (Taste gedrückt, da ;Taster gegen Gnd) rjmp loop ;Sprung zu "loop:" -> Endlosschleife cbi PORTB, 7 ;Bit 7 im IO-Register PORTB auf 0 setzen -> LED an ende: rjmp ende ;Endlosschleife ** nur beim ersten tastendruck wird die schleife loop aufgerufen wenn der tastendruck abgehandelt ist gehts weiter beim label ende wo die taste nicht mehr abgefragt wird. du solltest die endlosschleife (label ende) auch um die tastenabfrage machen dann klappt es!
Danke für den Tipp. Jetzt klappts. Nun die Folgefrage: PINB6 ist als Eingang konfiguriert. Der Pull-Up Widerstand enabled. Warum ist der Pin dann bei der Simulation nicht als high markiert? Wird der Pull-Up nicht simuliert? Justus
Schau mal bei den I/0-Anzeigen deines Studios unter PORTB. Wenn du die Pull-Ups einschaltest, dann schaltest du PORTB auf HIGH. Allerdings sind die Signale die der Controller einließt ja PINB. Das heißt, der Simulator weiß zwar, dass die Pull-Ups an sind, aber er meint, dass du momentan alle Tasten drückst. Um dies richtig zu simulieren brauchst du ja bloß alle Felder von PINB auf HIGH setzen indem du sie anklickst, dass enstpricht dem loslassen der Tasten. Andy P.S.: Du könntest ja mal versuchen, ob sich beim Ausführen was ändert, wenn du dem Simulator mitteilst, dass die Tasten zu beginn losgelassen sind, indem du folgendes hinzufügst: LDI Temp, 0xFF OUT PINB, Temp
Der Witz am Simulator sollte ja sein, dass er die Wirklichkeit auf dem Rechner nachbildet. Wenn ich für solche "trivialen" Sachen den Simulator überlisten muss, dann Gute Nacht für die komplexeren. Aber trotzdem vielen Dank für den Hinweis.
Hallo Justus, sei doch nicht so streng mit dem Computer, ich finde den Simulator echt toll. Ich würde das auch nicht überlisten nenne, wenn der Computer als Standart Low-Werte annimmt und du ihm nun einfach sagst, dass es doch zu beginn High-Werte sein sollen. Wenn der Simulator jedesmal die Werte von PORTB änderen würde falls du die Pull-Ups an- oder ausschaltest, hättest du warscheinlich spätestens bei Dingen wie Tastautreinlesen ein Problem. Von daher ist das schon gut, wie das der Simulator macht. Andy
Ich werd wohl damit leben müssen ... ;-) Ich hab bis jetzt noch keine Möglichkeit gefunden, meine Timer0 Interrupt-Routine zu simulieren (zum Glück lief sie auf der Hardware ohne Probleme), da der Timerüberlauf nicht dazu geführt hat, das die Routine angesprungen wird. Kann der Simulator das? Justus
Hallo Justus Ich habe vor kurzem auch mit dem Timer0 programmiert und ihn im Simulator versucht zu simulieren. Es ist kein Problem und springt auch in die Routine allerdings wird das sehr sehr lange dauern. Du musst mal zu dem Timer0-Register im Simulator schauen und dann einfach den Wert manuel auf 244 setzten, dann läuft er ziemlich bald über und du kannst die Sache gut simulieren. Das heißt du sagst dem Studio einfach, dass es ein "bischen" Zeit überspringen soll. Andy
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.