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