-
        

Ergebnis 1 bis 2 von 2

Thema: Problem mit Interrupt beim Timer/Counter0

  1. #1
    Benutzer Stammmitglied Avatar von Tob
    Registriert seit
    11.01.2005
    Beiträge
    58

    Problem mit Interrupt beim Timer/Counter0

    Anzeige

    Hallo zusammen,

    Ich hab mich in der letzten Tagen mit dem Ansprechen der Timer/Counter im Atmega 32 beschäftigt.

    Dazu wollte ich zum Ausprobieren mithilfe des Timer/Counter0 den PortA in kurzen Abständen,
    nach jedem Zählerüberlauf An- und Auschalten.

    Hierzu habe ich den folgenden Programmcode von microcontroller.net verwendet
    und lediglich die Includedatei für meinen AVR geändert und den Ausgabeport auf "PORTA" umgeschrieben:

    Code:
    .INCLUDE "C:\Programme\Atmel\AVR Studio\Appnotes\m32def.inc"
     
    .def temp = r16
    .def leds = r17
     
    .org 0x0000
            rjmp    main                  ; Reset Handler
    .org OVF0addr
            rjmp    timer0_overflow       ; Timer Overflow Handler
     
    main:
            ldi     temp, LOW(RAMEND)     ; Stackpointer initialisieren
            out     SPL, temp
            ldi     temp, HIGH(RAMEND)
            out     SPH, temp
    	
            ldi     temp, 0xFF            ; Port B auf Ausgang
            out     DDRA, temp
     
            ldi     leds, 0xFF
     
            ldi     temp, 0b00000001      ; CS00 setzen: Teiler 1
            out     TCCR0, temp
     
            ldi     temp, 0b00000001      ; TOIE0: Interrupt bei Timer Overflow
            out     TIMSK, temp
     
            sei
     
    loop:   rjmp    loop
     
    timer0_overflow:                      ; Timer 0 Overflow Handler
            out     PORTA, leds
            com     leds
            reti
    Mein Problem ist nun, dass das Programm, nachdem es durch den Overflow Interrupt
    das Unterprogramm "timer0_overflow:" ausgeführt hat,
    auf die Adresse 0x0000 Springt und die Programmzeilen nach "main:" immer wieder ausführt.

    Normalerweise müsste das Programm doch wieder in die Endlosschleife
    bei "loop:" Zurückspingen, oder?

    Wäre nett wenn ihr mir helfen könntet, thx shon mal im Vorraus!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.10.2004
    Ort
    Baoding
    Alter
    37
    Beiträge
    687
    Das Programm funktioniert einwandfrei. Prüfe mal mit ALT+O ob im Simulator bei Device auch der Mega32 drinn steht.


    MfG

Berechtigungen

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