- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 6 von 6

Thema: Interupthandler, Phänomen verstehe ich nicht...

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.08.2004
    Alter
    38
    Beiträge
    96

    Interupthandler, Phänomen verstehe ich nicht...

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich habe ein kleines Programm geschrieben, in welchem ich den Timer1-Interupt verwende. Ich lasse schlicht und einfach eine LED am PortD blinken(ca. 1Hz).

    Wenn ich den Anfang meines Programmes folgendermaßen ausführe, funktioniert das Programm nicht:
    Code:
    .include "m8def.inc"
    .def ver = r20
    .def ver1 = r21
    .def ver2 = r22
    .def zaehler= r19
    .def zaehler1=r23
    .org 0x0000
           rjmp main
    .org INT0addr                 ; External Interrupt0 Vector Address
           reti                  
    .org INT1addr                 ; External Interrupt1 Vector Address
           reti      
    .org OC2addr                  ; Output Compare2 Interrupt Vector Address
           reti                   
    .org OVF2addr                 ; Overflow2 Interrupt Vector Address
           reti                   
    .org ICP1addr                 ; Input Capture1 Interrupt Vector Address
           reti                   
    .org OC1Aaddr                 ; Output Compare1A Interrupt Vector Address
           reti                   
    .org OC1Baddr                 ; Output Compare1B Interrupt Vector Address
           reti                  
    .org OVF1addr                 ; Overflow1 Interrupt Vector Address
           rjmp timer0_overflow                   
    .org OVF0addr                 ; Overflow0 Interrupt Vector Address
           reti     
    .org SPIaddr                  ; SPI Interrupt Vector Address
           reti                   
    .org URXCaddr         ; USART Receive Complete Interrupt Vector Address
           reti                   
    .org UDREaddr      ; USART Data Register Empty Interrupt Vector Address
           reti                   
    .org UTXCaddr         ; USART Transmit Complete Interrupt Vector Address
           reti                   
    .org ADCCaddr                 ; ADC Interrupt Vector Address
           reti                   
    .org ERDYaddr                 ; EEPROM Interrupt Vector Address
           reti                   
    .org ACIaddr                  ; Analog Comparator Interrupt Vector Address
           reti                   
    .org TWIaddr                  ; Irq. vector address for Two-Wire Interface
           reti                   
    .org INT_VECTORS_SIZE
    main:
    Wenn ich den Anfang so schreibe....ohne viel drumherum, funktioniert die "Blinkfunktion" super:

    Code:
    .include "m8def.inc"
    .def ver = r20
    .def ver1 = r21
    .def ver2 = r22
    .def zaehler= r19
    .def zaehler1=r23
    .org 0x0000
           rjmp    main                  ; Reset Handler
    .org OVF1addr                 ; Overflow1 Interrupt Vector Address
           rjmp timer0_overflow      ; Timer Overflow Handler
    Ich verstehe absolut nicht woran das liegt. Hat jemand eine Idee? Vielen Dank schonmal


    Code-Tags verwenden ! (PicNick, Mod)

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Irgendein anderer ORG überschreibt dir deinen Vector.
    Am besten im m8def.inc mal die Offsets einzeln checken
    Oder im Debugger (compilation-listing) die Vec-Table kontrollieren.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    03.08.2004
    Alter
    38
    Beiträge
    96
    Hallo,
    ah ja, ich habe den Fehler gefunden. Danke.

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Komm, verrat's uns. Wir woll'n ja auch was lernen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    03.08.2004
    Alter
    38
    Beiträge
    96
    Hi,
    das Problem war, dass ich einen anderen Interupt (Output Compare1A) ausgelöst habe. Wenn ich jetzt eine vollständige Interupttabelle habe, springt er eben zu diesem Interupt, welches ich eigentlich nicht haben wollte.
    Hatte ich eine unvollständige Tabelle, dann ist der Code von 0x0006 nach 0x0008 weitergeloffen und hat dann doch noch meine instruktion rjmp interupthandler erreicht...

    Viele Grüße
    Raphael

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Tricky.

    Merci, vielmals.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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

Labornetzteil AliExpress