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


von AVR Neuling (Gast)


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.
1
.include "tn2313def.inc"         ; Definitionsdatei für den Prozessortyp einbinden
2
3
4
    ;Aus/Eingänge einstellen
5
         ldi r16, 0x00       ; 0x00 in r16 laden
6
         out DDRA, r16       ; Inhalt von r16 ins IO-Register DDRA ausgeben
7
     ldi r16, 0x00       ; 0x00 in r16 laden
8
     out PORTA, r16      ; Inhalt von r16 ins IO-Register PORTA ausgeben
9
 
10
         ldi r16, 0b00111000 ; 0b11111100 in r16 laden
11
         out DDRD, r16       ; Inhalt von r16 ins IO-Register DDRD ausgeben
12
     ldi r16, 0x00       ; 0x00 in r16 laden
13
     out PORTD, r16      ; Inhalt von r16 ins IO-Register PORTD ausgeben
14
15
     ldi r16, 0b00000111 ; 0b00000111 in r16 laden
16
     out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
17
     ldi r16, 0x00       ; 0x00 in r16 laden
18
     out PORTB, r16      ; Inhalt von r16 ins IO-Register PORTB ausgeben
19
20
21
loop:   
22
23
     
24
     sbis PIND, 0     ; Wenn Blinkersignal anliegt nächsten Befehl überspringen
25
     ldi r16 0x00     ; 0x00 in r16 schreiben
26
     sbic PIND, 0     ; Wenn Blinkersignal nicht anliegt nächsten Schritt überspringen
27
     rcall Blink1
28
     sbrc r16, 7        ; Wenn r16 voll ist (0xFF) nächsten Schritt ausführen
29
     ldi r16 0x00     ; r16 auf 0 setzen
30
     rjmp loop
31
     
32
33
34
Blink1:
35
36
     lsl r16       ; 1 in r16 einschieben
37
     push r16       ; r16 in Stack laden
38
     pop r17       ; In Stack geladenen Wert auf r17 schreiben
39
     rol r17       ; drei Nullen von links in r17 einschieben
40
     rol r17       
41
     rol r17
42
     andi r17, 0b00111000
43
     sbic PINA 0     ; Wenn PortA0 Low nächsten Schritt überspringen
44
     out PORTD, r17     ; r17 ins Ausgangsregister PORTD laden
45
     sbic PINA 1     ; Wenn PinA1 Low nächsten Schritt überspringen
46
     out PORTB, r16     ; r17 ins Ausgangsregister PORTB laden
47
     ret         ; Zurückspringen zu rcall

von Stefan B. (stefan) Benutzerseite


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"

von AVR Neuling (Gast)


Lesenswert?

Fehlermeldung:

(25): error: syntax error, unexpected INTEGER

von Karl H. (kbuchegg)


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?

von Stefan B. (stefan) Benutzerseite


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.

von Komma (Gast)


Lesenswert?

Da fehlt schlicht ein Komma: ldi r16 0x00

von AVR Neuling (Gast)


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).

von AVR Neuling (Gast)


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 ^^

von Stefan B. (stefan) Benutzerseite


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.

von AVR Neuling (Gast)


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.

von Spess53 (Gast)


Lesenswert?

Hi

Dann versuche es mal mit:

ldi r16,low(RAMEND)
out SPL,r16


MfG Spess

von AVR Neuling (Gast)


Lesenswert?

Super .. nur mit Low hats funktioniert ^^ ... auch gut.

von AVR Neuling (Gast)


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

von Wegstaben V. (wegstabenverbuchsler)


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  ....

von Spess53 (Gast)


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

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.