Forum: Mikrocontroller und Digitale Elektronik Mega128 und USART


von Wolfgang (Gast)


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

von Frank Linde (Gast)


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

von Wolfgang (Gast)


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

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.