mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler Fehler mit EICRA


Autor: Daniel Steffen (derdaniel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

fange gerade das Microcontroller-Programmieren an und habe ein Problem 
mit einem ATmega48 (bzw. der compilierung des Programmes).

Folgender Code:
.include "m48def.inc"
 
.def temp = r16
 
.org 0x000
         rjmp main            ; Reset Handler
.org INT0addr
         rjmp int0_handler    ; IRQ0 Handler
.org INT1addr
         rjmp int1_handler    ; IRQ1 Handler
 
 
main:                         ; hier beginnt das Hauptprogramm
 
         ldi temp, LOW(RAMEND)
         out SPL, temp
         ldi temp, HIGH(RAMEND)
         out SPH, temp
 
         ldi temp, 0x00
         out DDRD, temp
 
         ldi temp, 0xFF
         out DDRB, temp
 
         ldi temp, (1<<INT0) | (1<<INT1) ; INT0 und INT1 auf fallende FLanke konfigurieren
         out EIMSK, temp
     
         ldi temp, 0x00 ; INT0 und INT1 auf fallende Flanke konfigurieren
         out EICRA, temp 
         
         sei                   ; Interrupts allgemein aktivieren
 

loop:    rjmp loop             ; eine leere Endlosschleife
 
int0_handler:
         push temp             ; Das SREG in temp sichern. Vorher
         in   temp, SREG       ; muss natürlich temp gesichert werden
 
         sbi PINB, 1
 
         out SREG, temp        ; Die Register SREG und temp wieder
         pop temp              ; herstellen
         reti
 
int1_handler:
         push temp             ; Das SREG in temp sichern. Vorher
         in   temp, SREG       ; muss natürlich temp gesichert werden
 
         cbi PINB, 1
 
         out SREG, temp        ; Die Register SREG und temp wieder
         pop temp              ; herstellen
         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'

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha Weber (sascha_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Sascha

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.