Forum: Mikrocontroller und Digitale Elektronik Interrupts beim ATmega16


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Karlheinz Druschel (Gast)


Lesenswert?

Hi Leuts,

ich habe hier ein paar Zeilen Code für den ATmega 16.
Nur leider wird anscheinend absolut kein Interrupt ausgeloest.
Weiss einer woran das liegen könnte ?

Ach ja, Fuses: BOOTRST = 1, BOOTSZ = 00


.include "m16def.inc"

.def temp1    = r22

; Interrupttabelle
jmp Init    ; Reset
reti      ; External Interrupt Request 0
reti      ; External Interrupt Request 1
reti      ; Timer/Counter2 Compare Match
reti      ; Timer/Counter2 Overflow
reti      ; Timer/Counter1 Capture Event
reti      ; Timer/Counter1 Compare Match A
reti      ; Timer/Counter1 Compare Match B
reti      ; Timer/Counter1 Overflow
rjmp Timer0    ; Timer/Counter0 Overflow
reti      ; Serial Transfer Complete
reti      ; USART, Rx Complete
reti      ; USART Data Register Empty
reti      ; USART, Tx Complete
reti      ; ADC Conversion Complete
reti      ; EEPROM Ready
reti      ; Analog Comparator
reti      ; Two-wire Serial Interface
reti      ; External Interrupt Request 2
rjmp Timer0    ; Timer/Counter0 Compare Match
reti      ; Store Program Memory Ready

Init:

  ; Stack initialisieren
  ldi temp1, high (RAMEND)
  out SPH, temp1
  ldi temp1, low (RAMEND)
  out SPL, temp1


  ; Port A ist Ausgang
  ldi temp1, 0xFF
  out DDRA, temp1
  ldi temp1, 0xFF
  out PORTA, temp1

  ; Comparewert fuer Timer0 laden
  ldi temp1, 36
  out OCR0, temp1

  ; Timer 0 Compare  und Overflow aktivieren
  ldi temp1, 0b00000011
  out TIMSK, temp1

  ; Vorteiler Timer 0 = 1024
  ldi temp1, 0b00000101
  out TCCR0, temp1

  ; Interrupts freigeben
  sei

  rjmp Main


Main:

  rjmp Main


Timer0:

  ; Zaehler zuruecksetzen
  ldi temp1, 0
  out TCNT0, temp1

  ldi temp1, 0x00
  out PORTA, temp1

  reti

von Frank Linde (Gast)


Lesenswert?

Hallo Karlheinz,

Deine Interrupt-Tabelle ist falsch. Setze mal die passenden
ORG-Anweisungen vor die Sprünge, also z.B.

.ORG OVF0addr
rjmp Timer0    ; Timer/Counter0 Overflow

Gruß, Frank

von Stefan (Gast)


Lesenswert?

Hi,

ich hab zwar schon lange nicht mehr in Assembler programmiert aber
müsste nicht vor der Interrupttabelle die Speicherstelle angegeben
werden?

z.B.

.org 0002  //wenn BOOTSTR = 1

;Interruptabelle
....

Schau mal im List-File ob die IRQ Adressen stimmen. Ansonsten im
Debugger prüfen ob alle Bits für die IRQ Behandlung korrekt gesetzt
sind bzw. werden.

Gruss

Stefan

von Karlheinz Druschel (Gast)


Lesenswert?

Hm,
scheint als hättest Du rechtm, Frank. Bloss kapier ich es nicht, den
Aufbau der Tabelle habe ich dem Atmel Datenblatt entnommen und
abgetippt :-)
Aber nicht dran gedacht, dass beim ATmega16 die Adresse anscheinend 2
Bytes belegt, beim 8515 nur 1 Byte ...


Anyway, danke für die schnelle Hilfe


Greetings
Karlheint

von Frank Linde (Gast)


Lesenswert?

>> Aber nicht dran gedacht, dass beim ATmega16 die Adresse anscheinend
2
Bytes belegt, beim 8515 nur 1 Byte ...

So ist es. Habe ich anfangs auch übersehen und gestaunt, warum selbst
simpelste Programme auf einmal nicht mehr funktionierten. ;-)

Anyway, danke für die schnelle Hilfe

Gerne.

Gruß, Frank

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]
  • [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.