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