Hallo, Hab mich in letzter Zeit so langsam in Mikrocontroller eingearbeitet. Jetzt bräuchte ich eine Funktion die das Programm einfach mal in etwa grob 0,2 Sekunden warten lässt bis der nächste Befehl abgearbeitet wird. In Software Programmierungen hab ichs schon öfter gesehen bsp wait 200ms, bascom war das, glaub ich...aber nicht sicher. Wie bekomme ich so etwas in assembler hin. Im Tutorial hab ich eine Lösung gefunden um LEDs blinken zu lassen. Kann man das ohne die Schleife machen oder überhaupft ohne Interupt oder ist mit dem Timer immer ein Interupt verbunden ? Vielen Dank im Voraus.... Viele Grüße Christian
Worin bestand denn Deine "Einarbeitung" bisher? :-) Eine Programmverzögerung kann man z.B. erreichen, inden man (ggf. verschachtelte) Schleifen programmiert, oder einen Timer startet und permament abfragt, ob der Zielwert schon erreicht ist oder beim Überlauf einen Interrupt auslösen läßt. Dabei ist es egal, Du Deinen Mega8 mit C, Basocm oder Assember dazu bringst. Wenn es Dir also nur auf die ungefähre Verzögerung ankommt, brauchst Du nicht unbedingt einen Timer.
Schon mal danke für die Antworten...hab mal einen ersten Versuch gestartet aufbauend auf dem Entwurf aus dem YVR Tutorial...allerdings wird die Funktion immer nur genau einaml ausgeführt...z.B. wenn ich Versuche mit einem Taster das Programm abrufe. Hab den Code des "Einmal" Timers mal eingefügt. Vielleicht sieht jemand den Fehler. Wäre sehr dankbar...und ja...bin Anfänger...;)... Beste Grüße .include "m8def.inc" .def temp = r16 .def leds = r17 .org 0x0000 rjmp main .org OVF0addr rjmp timer0_overflow main: ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ldi temp, 0xFF out DDRD,temp ldi leds, 0xFF ldi temp, 0b00000100 out TCCR0, temp ldi temp, 0b00000001 out TIMSK, temp sei loop: sbrc r18, 0 !hier ist der Ausbruch aus der !Schleife, indem in dem Interupt (paar Zeilen weiter unten) ein Bit eines Registers geändert wird... rjmp continue rjmp loop timer0_overflow: ; out PORTD,leds com leds ldi temp, 0b00000000 out TCCR0, temp out TCNT0, temp ldi r18, 0b00000001 reti continue: rjmp continue
Nachtrag: Ich meinte die Funktion wird nur einmal ausgeführt...danach reagiert die Schaltung nicht mehr auf den Taster...irgendwo hängt sichs auf...in AVR Studio lässt sichs aber schön simulieren...
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.