Hallo, ich hab gerade mein erstes Assembler Programm geschrieben. Dabei
ist mir aufgefallen, dass Atmel Studio 7 Simulator,in die Interrupt
"INT0" nur im "schnell Durchlauf"-Modus springt, aber nicht im
Einzellschritt-Modus.
Hat jemand auch so ein Problem?
By the way, könnte jemand bitte kurz drüberschauen und mir grobe Fehler
mitteilen.
Vielen Dank und einen guten Rutsch.
1 | ;128 kHz
|
2 | ;PB1 INT0 = Eingang; PB0 OC0A=Ausgang
|
3 |
|
4 |
|
5 | .include "tn13def.inc"
|
6 |
|
7 | .def temp = r16
|
8 |
|
9 | .org 0x000 ; kommt ganz an den Anfang des Speichers
|
10 | rjmp RESET ; Interruptvektoren überspringen
|
11 | rjmp int0_handler ; IRQ0 Handler
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | int0_handler:
|
17 | push temp ; Das SREG in temp sichern. Vorher
|
18 | in temp, SREG ; muss natürlich temp gesichert werden
|
19 |
|
20 | sbi PORTB, 0
|
21 |
|
22 |
|
23 | out SREG, temp ; Die Register SREG und temp wieder
|
24 | pop temp ; herstellen
|
25 | reti
|
26 |
|
27 |
|
28 |
|
29 | RESET:
|
30 | ;------------------------------------------------------
|
31 | ; INITIALIZE
|
32 | ;------------------------------------------------------
|
33 |
|
34 | ldi temp, RAMEND ; Stackpointer initialisieren
|
35 | out SPL, temp
|
36 |
|
37 | sbi DDRB,0 ;Ausgang definieren
|
38 |
|
39 | ldi temp, (1<<ISC01) | (1<<ISC00) ; INT0 fallende Flanke
|
40 | out MCUCR, temp
|
41 |
|
42 | ldi temp, (1<<INT0); INT0 und INT1 aktivieren
|
43 | out GIMSK, temp
|
44 |
|
45 | sei ; Interrupts aktivieren
|
46 |
|
47 | ; sleep
|
48 |
|
49 | ;------------------------------------------------------
|
50 | ; HAUPTSCHLEIFE
|
51 | ;------------------------------------------------------
|
52 | main:
|
53 |
|
54 | nop
|
55 |
|
56 | rjmp main ; einfach nichts
|