Forum: Mikrocontroller und Digitale Elektronik Assembler Fehler mit EICRA


von Der D. (derdaniel)


Lesenswert?

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'

von spess53 (Gast)


Lesenswert?

Hi

>Das Problem liegt wohl an EICRA, was aber nunmal die Adresse 0x69 hat.
>Was soll ich also tun?

Nimm statt 'out' 'sts'. IO-Adressen > $5F können nicht mit in/out 
angesprochen werden.

MfG Spess

von Sascha W. (sascha_w)


Lesenswert?

Hallo,

wenns ausserhalb des zulässigen Bereichs für out ist musst du
1
sts   EICRA,temp
schreiben.

Sascha

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.