mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik attiny25 Interrupt


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Kann mir jemand sagen warum im folgenden Testprogramm der Rücksprung
aus der Interruptroutine wieder zu RJMP loop und
nicht zu dem darauf folgenden NOP erfolgt.


reset:
   rjmp start
   reti
   rjmp intr      ; Addr $02
   reti      ; Addr $03
   reti      ; Addr $04
   reti      ; Addr $05
   reti      ; Addr $06
   reti      ; Addr $07
   reti      ; Addr $08
   reti      ; Addr $09
   reti      ; Addr $0A
   reti      ; Addr $0B
   reti      ; Addr $0C
   reti      ; Addr $0D
   reti      ; Addr $0E

start:
   ldi r16,$69        ;stackstart
   out $3d,r16

   ldi r16,0b00111111  ;pulup on
   out $18,r16
   ldi r16,0b00111110   ;pb0 eingang
   out $17,r16
   ldi r16,0b00100000  ;gimsk pcint ein interrupt
   out $3b,r16
   ldi r16,0b00000001   ;pcint maskenregister
   out $15,r16

   sei
loop:
  rjmp 1oop

   nop
   nop

intr:
   reti

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum sollte auch aus der Entlosschleife denn rausspringen, der 
interrupt ändert doch nicht an der schleife?

Es wird NIE bei dem NOP vorbeikommen.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu dem nop kann er nicht kommen, weil der PC beim Auftreten eines 
Interrupts immer auf loop zeigt.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da die beiden "nop"s bei diesem Programm niemals ausgeführt werden, kann 
dort auch kein Interrupt auftreten.

>out $18,r16

Hat es einen bestimmten Grund, warum Du I/O-Register mit Hexwerten 
("$18") ansprichst, statt mit ihren Namen?

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn während des Befehls rjmp loop der Interrupt eintritt, wird der 
Befehl nicht nur gelesen, sondern auch AUSGEFÜHRT. Der PC wird also auf 
die Adresse von "loop" gestellt, dann dieser Wert auf dem Stack abgelegt 
und zu "intr" gesprungen. Das "reti" holt dann die Adresse von "loop" 
wieder vom Stack, schreibt sie in den PC und da gehts dann weiter.

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Z80 gabs den HALT Befehl. Da hat die CPU nach dem Interrupt mit dem 
Befahl nach HALT weitergemacht. Vielleicht ist das Dein Missverständnis?

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.