Atmega 162-USART funktioniert nicht mit Parity:none

OP #1823791
Lesenswert?

Hallo zusammen,

ich teste gerade die USART Schnittstellen indem ich mit DockLite über 
die RS232 Schnittstelle Daten sende, diese im SRAM des AtMega speichere 
und wieder ausgebe.
Dabei ist mir aufgefallen, dass wenn ich mit Parity "mark" sende alles 
korrekt funktioniert: der String wird gesendet und genauso wieder 
empfangen.
Stelle ich das Parity auf "none" kommt nichts zurück. Habe keine Ahnung 
wo mein Fehler liegen könnte. Mein Code sieht folgendermaßen aus:

Initialisierung der USART:
1
;*******-->USART0(DockLite->AtMega)  
2

3
ldi   temp, HIGH(UBRR_VAL)
4
out   UBRR0H, temp
5
ldi   temp, LOW(UBRR_VAL)
6
out   UBRR0L, temp
7
;8 Bit Übertragung; keine Parity Bits (UPM00=0)
8
ldi     temp, (1<<URSEL0)|(1<<UCSZ00) |  (1<<UCSZ01)    
9
out     UCSR0C,temp    
10

11
ldi   temp, (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0)
12
out   UCSR0B,temp

Ausgabe der im SRAM gespeicherten Daten:

1
send_to_docLite:
2
  ldi     YH,HIGH(sdata)    
3
  ldi     YL,LOW(sdata) 
4
    
5
redo:
6
  ld    data, y+  
7
  cpi    data, 0x0D   ;markiert das Ende des Strings   
8
  breq    ende
9

10
wait2:
11
  sbis    UCSR0A,UDRE0          
12
                            
13
  rjmp    wait2
14
  out     UDR0, data         
15
  rjmp   redo
16
ende:
17

18
  ret

Ich hoffe das reicht euch an Code. Ich hoffe ihr habt Tipps oder 
Anregungen, da ich im Moment auf dem Schlauch stehe.

Gruß,
sharth
OP #1823821
Lesenswert?

Hallo,

ich habe den Fehler gefunden. Das Register UCSR0B wurde vorher nochmal 
überschrieben.
Verstehe das mit dem Mark-Parity noch nicht ganz. Welche Register sind 
zuständig um das Mark-Bit zu setzen? Sind es UPM0 und UPM1? Habe alle 
Varianten ausprobiert und bekomme es nicht hin.
Wäre nett wenn jemand eine Antwort darauf hat.

Gruß,

sharth

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren