mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fehler AVR Studio: unexpected INTEGER


Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Habe grad mal n Progrämmchen geschrieben, welches sobald PA0 oder 1 High 
ist (Welche über ein oder auf PD0 gehen) anfangen soll die Ausgänge 
PD3-5 sowie PB0-2 je nachdem welcher von den beiden High ist hochzählen 
soll.

Als ich nun fertig war (meine ich zumindest) wollte ich das mal testen, 
bekomme aber die angegebene Fehlermeldung.
.include "tn2313def.inc"         ; Definitionsdatei für den Prozessortyp einbinden


    ;Aus/Eingänge einstellen
         ldi r16, 0x00       ; 0x00 in r16 laden
         out DDRA, r16       ; Inhalt von r16 ins IO-Register DDRA ausgeben
     ldi r16, 0x00       ; 0x00 in r16 laden
     out PORTA, r16      ; Inhalt von r16 ins IO-Register PORTA ausgeben
 
         ldi r16, 0b00111000 ; 0b11111100 in r16 laden
         out DDRD, r16       ; Inhalt von r16 ins IO-Register DDRD ausgeben
     ldi r16, 0x00       ; 0x00 in r16 laden
     out PORTD, r16      ; Inhalt von r16 ins IO-Register PORTD ausgeben

     ldi r16, 0b00000111 ; 0b00000111 in r16 laden
     out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
     ldi r16, 0x00       ; 0x00 in r16 laden
     out PORTB, r16      ; Inhalt von r16 ins IO-Register PORTB ausgeben


loop:   

     
     sbis PIND, 0     ; Wenn Blinkersignal anliegt nächsten Befehl überspringen
     ldi r16 0x00     ; 0x00 in r16 schreiben
     sbic PIND, 0     ; Wenn Blinkersignal nicht anliegt nächsten Schritt überspringen
     rcall Blink1
     sbrc r16, 7        ; Wenn r16 voll ist (0xFF) nächsten Schritt ausführen
     ldi r16 0x00     ; r16 auf 0 setzen
     rjmp loop
     


Blink1:

     lsl r16       ; 1 in r16 einschieben
     push r16       ; r16 in Stack laden
     pop r17       ; In Stack geladenen Wert auf r17 schreiben
     rol r17       ; drei Nullen von links in r17 einschieben
     rol r17       
     rol r17
     andi r17, 0b00111000
     sbic PINA 0     ; Wenn PortA0 Low nächsten Schritt überspringen
     out PORTD, r17     ; r17 ins Ausgangsregister PORTD laden
     sbic PINA 1     ; Wenn PinA1 Low nächsten Schritt überspringen
     out PORTB, r16     ; r17 ins Ausgangsregister PORTB laden
     ret         ; Zurückspringen zu rcall

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> bekomme aber die angegebene Fehlermeldung.

Copy&Paste der Fehlermeldung vergessen?

>    rcall Blink1
> ...
>    push r16      ; r16 in Stack laden
>    pop r17       ; In Stack geladenen Wert auf r17 schreiben
> ...
>    ret

Crasht beim RET von Blink1, weil Stackpointer uninitialisiert ist.
Tipp: AVR-Tutorial zum Stack lesen.

>     ldi r16, 0x00       ; 0x00 in r16 laden
>     out DDRA, r16       ; Inhalt von r16 ins IO-Register DDRA ausgeben
>     ldi r16, 0x00       ; 0x00 in r16 laden
>     out PORTA, r16      ; Inhalt von r16 ins IO-Register PORTA ausgeben

Diese Kommentare sind "wertlos". Das was die aussagen, sieht man in 
Code. Besser du beschreibst, was der Code bewirken soll ala "active-high 
Taster an PORTA als Eingang initialisieren"

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlermeldung:

(25): error: syntax error, unexpected INTEGER

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Habe grad mal n Progrämmchen geschrieben, welches sobald PA0 oder
> 1 High ist (Welche über ein oder auf PD0 gehen) anfangen soll die
> Ausgänge PD3-5 sowie PB0-2 je nachdem welcher von den beiden High
> ist hochzählen soll.

Kannst du das auch in einem deutschen Satz wiedergeben?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR Neuling schrieb im Beitrag #2051021:
> Fehlermeldung:
>
> (25): error: syntax error, unexpected INTEGER

25 = Zeilennummer?

Ist das diese Zeile?

>      ldi r16 0x00     ; 0x00 in r16 schreiben

Da fehlt ein Komma zwischen 1. und 2. Operanten. Später im Code fehlen 
noch drei Kommata.

Autor: Komma (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da fehlt schlicht ein Komma: ldi r16 0x00

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu Stefan:

Dachte mit rcall schreibt er es in den Stack sodass er bei ret die 
Position wieder auslesen kann.

Zu kbuchegg:

Es gibt drei Eingänge: PA0, PA1 und PD0

PA0 und PA1 bekommen unabhängig vonneinander Ihre Signale (High, Low).
Diese Signale sind zudem über ein ODER Gatter auf PD0 geleitet.

Dieses Programm soll nun je nachdem welcher High ist (PA0 und/oder PA1) 
die Ausgänge PD3-5 sowie PB0-2 nach und nach auf High setzen (z.B. PB 
0b00000000, 0b00001000, 0b00011000, 0b00111000).

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Komma! Es fehlten 4Kommas ^^ Fehler gefunden.

Ich werde aber wiederkommen sobald ich das nächste Problem habe ^^ ... 
zumindest weiß ich das mit den Zeilen jetzt ^^

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR Neuling schrieb im Beitrag #2051029:

> Dachte mit rcall schreibt er es in den Stack sodass er bei ret die
> Position wieder auslesen kann.

Das würde der µC auch so machen, wenn ein Stackpointer initialisiert 
wäre. Ist er aber nicht, weil der entsprechende Codeteil am Anfang 
deines Programms nicht vorhanden ist. Im Tutorial steht wie dieser 
Codeteil auszusehen hat.

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das so wie hier:

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Stack

Nun gemacht aber das sacht er bei out SP, r18 das er SP nicht kennt.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Dann versuche es mal mit:

ldi r16,low(RAMEND)
out SPL,r16


MfG Spess

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super .. nur mit Low hats funktioniert ^^ ... auch gut.

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nächste Problem: wie war der befehl um eine 1 von links nachzuschieben 
z.B. 0b0000001 zu 0b00000011 zu machen?

(Versuch hier mal möglichst viele Infos zu bekommen um nicht so viel zu 
Spämmen

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> um eine 1 von links nachzuschieben
> z.B. 0b0000001 zu 0b00000011 zu machen?

LINKS  (Binärmuster)   RECHTS

         00000001                alt
         00000011                neu


hm, jetzt überleg mal, wo links und wo rechts ist, und ob du von links 
nach rechts oder von rechts nach links schieben möchtest  ....

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>nächste Problem: wie war der befehl um eine 1 von links nachzuschieben
>z.B. 0b0000001 zu 0b00000011 zu machen?

Da gibt es keinen Befehl. Aber

   sec
   rol rxy

geht.

MfG Spess

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.