mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega128 und USART


Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!
Ich wollte, als Neuling, jetzt mal das USART meines Mega128 zum laufen
bringen. Fürs Debuggen. Dazu habe ich mir das Tut von der Seite hier
angesehen und benutze es jetzt nachdem ich es für den Mega128 angepasst
habe.
Leider funzt es nicht so wie es soll.
AVStudio bringt mir beim Kompilieren immer Fehlermeldungen:
F:\AVR\uart\uart.asm(24) : error : Illegal argument type or count
F:\AVR\uart\uart.asm(31) : error : Illegal argument type or count
F:\AVR\uart\uart.asm(61) : error : Undefined variable referenced
Assembly complete with 3 errors

Der Code:
.nolist
.include "m128def.inc"
.list

.def temp = r16

.CSEG
.ORG 0x00
  rjmp init


init:
  ldi temp, HIGH(RAMEND)
  out SPH, temp
  ldi temp, LOW(RAMEND)
  out SPL, temp

  ldi temp, 0xFF
  out DDRB, temp
  out PORTB, temp

  ; Set baud rate
  ldi temp, 0x00
  out UBRR0H, temp               ;Hier die erste Fehlermeldung.
  ldi temp, 23
  out UBRR0L, temp

  sbi UCSR0B,TXEN                 ;TX aktivieren

  ldi temp, (3<<UCSZ0)  ;Frame Mode: 8bit, 1 Stopbit, kein Parity
  out UCSR0C, temp  ;Hier ist die zweite Fehlermeldung.

  ldi r17, 0x00

start:

  ldi temp, 'T'
  rcall senduart
  ldi temp, 'e'
  rcall senduart
  ldi temp, 's'
  rcall senduart
  ldi temp, 't'
  rcall senduart

  inc r17
  brcs start1

  rjmp start

start1:
  in r18, PINB
  com r18
  out PORTB, r18
  ret


senduart:
        sbis UCSR0A,UDRE                   ; Warten bis UDR für das
nächste                                         ; Byte bereit ist
        rjmp senduart
        out UDR, temp     ; Und hier die dritte Fehlermeldung
        ret                               ; zurück zum Hauptprogramm

Ich hoffe ihr könnt mir helfen wo der Hund begraben liegt.
MFG und danke
Wolfgang

Autor: Frank Linde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Wolfgang,

ersetze mal die OUT-Befehle durch STS. Ich meine mich erinnern zu
können, dass das im erweiterten I/O-Bereich notwendig ist, arbeite aber
nicht mit dem ATmega128 und bin gerade zu faul, im Datenblatt
nachzuschauen. UDR muß durch UDR0 ersetzt werden.

Gruß, Frank

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank Linde!
Danke, das wars. Ich könnte mich ohrfeigen. Dabei habe ich das noch
selber gelesen, aber hab nicht geschaltet.
Jetzt funzt. Danke nochmals.
Schönen Tag
Wolfgang

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.