[ASM] Attiny13 INT0 Interrupt im Simulator nur sporadisch

#3860401
Lesenswert?

Hey, ich wollte mal Interrupts ein bisschen verinnerlichen
und habe dann folgendes Programm geschrieben.

Allerdings bleibt er bim simulieren mit F10 im loop,
aber mit f5 springt er nach 17 "clocks" bzw ticks direkt in
die Instruktion o0.

Habe schon versucht während der Simulation das Interrupt Flag
im GIFR (Bit 6) zu ändern, ebenfalls den PINB1, aber das hat
auch nicht gefruchtet.

Ich nutze Atmel Studio 6.1

Hat da jemand ne Erklärung für, oder kann mir jemand einen Tipp geben ?

1
.nolist
2
.include "tn13def.inc"
3
.list
4

5
.org 0x000
6
       rjmp init
7
.org INT0addr                 ; External Interrupt0 Vector Address
8
       rjmp intvec                  ; IRQ0 Handler
9
        
10
 init:
11
 .def tmp = R16 ; GeneralPurposeRegister
12

13
 ldi r16, 0x1D  ;PB1 Transistor(Relais/Motor), PB2 LEDGrün, PB3 LEDGelb, PB4 LEDRot
14
 out DDRB, r16  ; Schreibe PB's nach DDRB
15
 sbi PORTB, (1<<PB1) ; Pullup -> Taster zieht nach GND/Low
16
 ldi r16,0x40   ; Für INT0-Bit (6)
17
 out GIMSK, r16 ; Enable INT0
18
 sei
19
 rjmp loop
20

21
loop:
22
nop
23
rjmp loop
24

25
intvec: 
26
sbi PORTB, (1<<PB2)
27
reti

Vielleicht OT, aber nicht wert ein neues Thema zu eröffnen.
Sind die Operanden bei sbi (1<<DDRx) begrenzt ?

Ab DDRB4 gibts immer einen "Out Of Range Error"
Ebenfalls bei sbi da gibts ab PORTB4 bei mir auch einen
Out of Range Error.



LG,
M. Berghaus
Gast #3860460
Lesenswert?

Hi

>Vielleicht OT, aber nicht wert ein neues Thema zu eröffnen.
>Sind die Operanden bei sbi (1<<DDRx) begrenzt ?

Ja. SBI verwendet Bitnummern (0..7). Also nichts shiften.

Syntax:

SBI A,b    0 ≤ A ≤ 31,   0 ≤ b ≤ 7

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren