Servus,
fange gerade das Microcontroller-Programmieren an und habe ein Problem
mit einem ATmega48 (bzw. der compilierung des Programmes).
Folgender Code:
1 | .include "m48def.inc"
|
2 |
|
3 | .def temp = r16
|
4 |
|
5 | .org 0x000
|
6 | rjmp main ; Reset Handler
|
7 | .org INT0addr
|
8 | rjmp int0_handler ; IRQ0 Handler
|
9 | .org INT1addr
|
10 | rjmp int1_handler ; IRQ1 Handler
|
11 |
|
12 |
|
13 | main: ; hier beginnt das Hauptprogramm
|
14 |
|
15 | ldi temp, LOW(RAMEND)
|
16 | out SPL, temp
|
17 | ldi temp, HIGH(RAMEND)
|
18 | out SPH, temp
|
19 |
|
20 | ldi temp, 0x00
|
21 | out DDRD, temp
|
22 |
|
23 | ldi temp, 0xFF
|
24 | out DDRB, temp
|
25 |
|
26 | ldi temp, (1<<INT0) | (1<<INT1) ; INT0 und INT1 auf fallende FLanke konfigurieren
|
27 | out EIMSK, temp
|
28 |
|
29 | ldi temp, 0x00 ; INT0 und INT1 auf fallende Flanke konfigurieren
|
30 | out EICRA, temp
|
31 |
|
32 | sei ; Interrupts allgemein aktivieren
|
33 |
|
34 |
|
35 | loop: rjmp loop ; eine leere Endlosschleife
|
36 |
|
37 | int0_handler:
|
38 | push temp ; Das SREG in temp sichern. Vorher
|
39 | in temp, SREG ; muss natürlich temp gesichert werden
|
40 |
|
41 | sbi PINB, 1
|
42 |
|
43 | out SREG, temp ; Die Register SREG und temp wieder
|
44 | pop temp ; herstellen
|
45 | reti
|
46 |
|
47 | int1_handler:
|
48 | push temp ; Das SREG in temp sichern. Vorher
|
49 | in temp, SREG ; muss natürlich temp gesichert werden
|
50 |
|
51 | cbi PINB, 1
|
52 |
|
53 | out SREG, temp ; Die Register SREG und temp wieder
|
54 | pop temp ; herstellen
|
55 | reti
|
und folgender Fehler:
.\test2.asm(27): error: Operand 1 out of range: 0x69
Das Problem liegt wohl an EICRA, was aber nunmal die Adresse 0x69 hat.
Was soll ich also tun?
Danke für eure Hilfe.
PS: noch was wenn ich in der m48def.inc Z nicht auskommentiere kommt
.\m48def.inc(382): error: Attempt to redefine keyword 'z'