mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupts beim ATmega16


Autor: Karlheinz Druschel (Gast)
Datum:

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

Autor: Frank Linde (Gast)
Datum:

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

Autor: Stefan (Gast)
Datum:

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

Autor: Karlheinz Druschel (Gast)
Datum:

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

Autor: Frank Linde (Gast)
Datum:

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