www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variable in AVRASM wird nicht anerkannt


Autor: PureFranky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend zusammen!

Hab hier ein Problem, aus dem ich nicht schlau werden, und zwar habe ich 
einige Register als Variablen um zu benennen (ich hoffe, dat sagt man 
so)

Allerdings wird in jeder Zeile, wo die Variable "Farbe" angesprochen 
wird (18,36,43,96) vom Compiler angemeckert, dass diese Variable nicht 
deklariert sei. Hab schon folgendes Probiert:
-Neustart des Programms
-Variable umbenannt von Color auf Farbe (hätt ja n reserviertes Wort 
erwischt haben können)
-anderes Register gewählt
-declarations im code umplaziert, um evtl. beschränkung der 
Variablenmenge zu umgehen.

Achja, Chip ist ein ATtiny13 ;)

Hier der Code
;Blinker1.asm
.include "tn13def.inc"
;Variablen
.def Delay = r16
.def A     = r17
.def farbe = r19
.def Count = r18
;Ports benennen
.equ TXD   = 1
.equ RXD   = 2
.equ COL_ROT  =4
.equ COL_GRUEN=3
rjmp Anfang
;Alles vorbereiten
Anfang:
  sbi ddrb,COL_GRUEN
  sbi portb,COL_GRUEN
  sbi farbe,COL_GRUEN

Schleife:
  cpi A,0
  breq no_write
      rcall Write_Com
    no_write:
    rcall Read_Com
  cpi A,103
  breq gruen
  cpi A,114
  breq gruen
rjmp Schleife
  Gruen:
    cbi portb,COL_ROT
    cbi ddrb,COL_ROT
    sbi ddrb,COL_GRUEN
    sbi portb,COL_GRUEN
        cbi farbe,COL_GRUEN
    rjmp Schleife
    Rot:
      cbi portb,COL_GRUEN
    cbi ddrb,COL_GRUEN
    sbi ddrb,COL_ROT    
    sbi portb,COL_ROT
    cbi farbe,COL_ROT
    rjmp Schleife


;Warten, bis etwas geschickt wird
Read_Com:
     SBIS pinb,RXD
     rjmp Read_COM
     ldi Delay,58
;Kleiner Delay, warum auch immer
  D1:  dec Delay
     brne D1
     ldi A,0
     ldi Count,8
  L1:  lsr A
     sbic pinb,RXD
     ori A,128
     ldi Delay,38
  D2:  dec Delay
     brne D2
       dec count
     brne L1
     ldi Delay, 38
  D3:  dec Delay
       brne D3
     com A
     ret


;Etwas selbst versenden
Write_COM:
     SBI pinb,TXD
     ldi Delay,38
  D4:  dec Delay
       brne D4
       ldi count,8
  L2:  sbrc A,0
       rjmp OFF
     rjmp ON
  ON:  sbi pinb,TXD
       rjmp BitD
  OFF: cbi pinb,TXD
       rjmp BitD
  BitD:ldi Delay,38
  D5:  dec Delay
       brne D5
     lsr A
       dec Count
     brne L2
     cbi Pinb,TXD
     ldi Delay,38
   D6: dec Delay
       brne D6
     cbi portb,RXD
     sbi portb,farbe
     ret


Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstens gibt es in Assembler keine Variablen, zweitens hat das nichts 
mit GCC zu tun (falsches Forum) und drittens versuchst Du auf ein 
Rechenregister, das Du mit dem Bezeichner "farbe" versehen hast, per 
cbi zuzugreifen. cbi bedeutet aber "Clear Bit in I/O register". 
"farbe" ist aber kein I/O-Register.

Du solltest Dich außerdem mal entscheiden, ob Du die Assembler-mnemonics 
groß oder klein schreibst. Eine völlig willkürliche Mischung von beidem 
ist der Übersichtlichkeit abträglich. Mit sonstigen 
Übersichtlichkeitsförsderungsmaßnahmen wie konsequentem, sinvollem 
Einrücken hast Du es offensichtlich auch nicht...

Autor: PureFranky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>>Erstens gibt es in Assembler keine Variablen
Gibt´s dafür nen Fachterminus? Denn was sind schon Variablen, wenn ich 
in Basic ne Variable globalisiere, heißt das ja auf der normalen 
PC-Platform auch nur, dass ein Speicher reserviert wird und die Variable 
auch nur ein Register ist. (Ich hoffe, du verstehst, was ich meine)

>>>zweitens hat das nichts mit GCC zu tun (falsches Forum)
Oh, sorry :-(
Wusste nicht so recht, wo´s rein sollte, vielleicht is ja ein Admin so 
net und verschiebt es :)


>>>und drittens versuchst Du auf ein Rechenregister, das Du mit dem Bezeichner 
"farbe" versehen hast, per cbi zuzugreifen. cbi bedeutet aber "Clear Bit in I/O 
register". "farbe" ist aber kein I/O-Register.
Ah, ok. Ausser bei
sbi portb,farbe
hab ich´s beheben können, den rest find ich auch noch


>>>Mit sonstigen Übersichtlichkeitsförsderungsmaßnahmen wie konsequentem, 
sinvollem Einrücken hast Du es offensichtlich auch nicht...

Ist beim kopieren etwas kaputt gegangen.
Hab es so aufgebaut:
Sprungpunkt:
           Funktion
           cpi x,3
           brne danach
                 Funktion in If-Abfrage
           danach:
           .....
    Rücksprung, falls immer ausgeführt

Zudem leicht, aber nicht völlig zurückgerückte Sprungpunkte (Labels), 
wenn sie nur innerhalb einer größeren procedure aufgerufen werden 
(sprich, die werden nur über xxxcall aufgerufen)

Irgendwelche Tipps dazu?

Mit Groß- und Kleinschreibung, ja, das muss ich mir mal angewöhnen.
Ist glaubig ne weit verbreitete Krankheit von Leuten, die mit Sprachen 
aufgewachsen sind, die nicht mehr Case-Sensitive sind. ;)

Mfg Purefranky

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PureFranky wrote:

>>>>zweitens hat das nichts mit GCC zu tun (falsches Forum)
> Oh, sorry :-(
> Wusste nicht so recht, wo´s rein sollte, vielleicht is ja ein Admin so
> net und verschiebt es :)

done.

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.