-
        

Ergebnis 1 bis 5 von 5

Thema: Timer Interrupt

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.11.2005
    Beiträge
    6

    Timer Interrupt

    Anzeige

    Hallo
    Ich habe ein Testprogramm geschrieben für einen Attiny2313.Leider bekomme ich im Simulator vom AVR Studio nicht hin das ein Interrupt im Label Timer ausgelöst wird um dann nach Licht_80s zu springen.
    Kann mir jemanden sagen was ich falsch gemacht habe.Danke
    ttiny



    PS: kann man eigentlich Anhänge irgenwie hier einstellen,bin neu hier
    machs erst mal so


    .nolist
    .include <tn2313def.inc>
    .list
    .cseg
    .def zahl=r18
    .def temp=r16
    .def sregsave=r19
    .def tmp=r21
    .org 0x000


    rjmp RESET
    rjmp RESET
    rjmp RESET
    rjmp RESET
    rjmp RESET
    rjmp RESET
    rjmp RESET
    rjmp Licht_80s
    rjmp RESET
    rjmp RESET
    rjmp RESET
    rjmp RESET
    rjmp RESET
    rjmp RESET
    reset:

    ldi zahl,1 ;legt die anzahl der umläufe fest
    ldi temp,128 ;gibt die interrupts frei
    out SREG,temp
    ldi temp, low(ramend) ;stackpointer initialisiert
    out spl, temp
    ldi temp,0b11111111 ; portb ist ausgang
    out ddrb,temp
    ldi temp,0b00000000
    out ddrd,temp ;portd ist eingang
    ldi Temp, 2 ;hier wird der timer interupt freigegeben
    out TIMSK, Temp
    sei
    ldi temp,5
    out TCCR0,temp ; mit 1024 geteilte frequenz

    timer: ldi tmp , 255
    out TCNT0, tmp ;timer zählt bis 255
    ldi temp,0
    cp zahl,temp
    breq licht_aus
    rjmp timer



    licht_aus:
    ldi temp,0b11111111
    out portb,temp
    rjmp ende


    Licht_80s:

    in sregsave ,SREG
    push sregsave
    dec zahl
    pop sregsave
    out SREG,sregsave
    reti


    ende:

    rjmp ende

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Code:
    timer: ldi tmp , 255
    out TCNT0, tmp ;timer zählt bis 255
    ldi temp,0
    cp zahl,temp
    breq licht_aus
    rjmp timer
    Dein Interrupt kommt nie zum tragen, weil Du den Timer immer wieder mit 255 neu belegst.

    besser wäre sowas:
    Code:
    timer: ldi tmp , 255
    out TCNT0, tmp ;timer zählt bis 255
    timer1:
    ldi temp,0
    cp zahl,temp
    breq licht_aus
    rjmp timer1
    außerdem
    Code:
    timer: ldi tmp , 255
    out TCNT0, tmp ;timer zählt bis 255
    stimmt das auch nicht der timer zählt genau einen Takt bis der Überlauf stattfindet, warum, darfst Du Dir selber gedanken machen...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    21.11.2005
    Beiträge
    6
    Hi
    Verstehe ich nicht.Der Timer müsste doch von 0-255 zählen und dann ein interrupt verursachen und in licht_80s springen.oder habe ich das falsch verstanden

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    wie izaseba schon sagte, wenn Du in der Schleife den Timer immer mit 255 lädst, kommt er nicht zum zählen.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    21.11.2005
    Beiträge
    6
    hallo
    weiss jetzt was ihr meint.habe auch sonst noch eineiges geändert.
    danke für die hilfe
    ttiny

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •