www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer mega 8


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Tomtom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- Entweder NOP Scleife oder
- eleganter hardware timer benutzen

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs...danke nochmal....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.