Forum: Mikrocontroller und Digitale Elektronik attiny25 Interrupt


von Ralf (Gast)


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

von Peter (Gast)


Lesenswert?

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

Es wird NIE bei dem NOP vorbeikommen.

von Johannes M. (johnny-m)


Lesenswert?

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

von Gast (Gast)


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?

von Route_66 (Gast)


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.

von Route_66 (Gast)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.