PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : USART: Einige Zeichen werden verändert



robotfreak
21.06.2005, 16:44
Hallo,

wenn ich von meinem ATmega16 die Zahlen von 0-255 zum Computer schicke,
wird z.B. die 13 zu einer 10, andere Zahlen verändern sich auch einfach so.

Dieses Problem besteht aber nur, wenn ich den ATmega16 in Assembler programmiere, in C funktioniert alles normal.

Ich sende und empfange mit 19200 baud. Oszi: 8MHz

Hier die Befehle mit denen ich das USART initialisiere:



.include "m16def.inc"

.equ BAUD = 8000000/(19200*16)-1

main:
;USART aktivieren
ldi r16, LOW(BAUD)
out UBRRL, r16
ldi r16, HIGH(BAUD)
out UBRRH, r16
ldi r16, 1<<TXEN
out UCSRB, r16

;Hauptprogramm ...........

ausgabe:
sbis UCSRA, UDRE
rjmp ausgabe
out UDR, r16
ret


Was mache ich falsch?

PicNick
21.06.2005, 17:54
wird z.B. die 13 zu einer 10, andere Zahlen verändern sich auch einfach so.
Das mit der 13 kann ich mir so denken, daß deine Empfangsroutine /Terminal so eingestellt ist, daß beim Empfang eines <CR> (13) das als Record-Ende interpretiert wird und da wird ggf. ein <LF> künstlich erzeugt.

Bei den anderen Zahlen müßtest du Beispiele bringen

robotfreak
21.06.2005, 21:15
Wenn ich den Atmega16 in C programmiere geht es aber. Und das Terminal ist dann das selbe.
Daher muss das Problem wahrscheinlich beim Atmega16 liegen.

Vogon
21.06.2005, 21:40
CR wird von vielen Programmen mit LF ergänzt. Kommen beide Zeichen oder macht er aus CR ein LF ?
Ein LF ist bei UNIX normal - erst der Drucker macht dan sein CR dazu.

PicNick
22.06.2005, 06:10
Tja, da wirst du wohl dein Programm rausrücken müssen.

robotfreak
22.06.2005, 15:34
Die 17 und 19 fehlen auch.
Hier sind die Zeichen 0-30 am Terminal:

0
1
2
3
4
5
6
7
8
9
10
11
12
10
14
15
16
18
20
21
22
23
24
25
26
27
28
29
30

PicNick
22.06.2005, 16:13
Eindeutig. Irgendwas am Terminal frißt Steuerzeichen und wird kreativ, da kann dein AVR nix dafür
<CR> 13
<XON> 17
<XOFF> 19