Hallo Leute!

Ich kämpfe gerade mit meinem Funkmodul, vielleicht könnt ihr mir weiterhelfen. Ich versuche eine Baudrate von 57600 einzustellen, dazu muss man bei diesem speziellen Modul ein internes Register (S5=1) auf "1" setzen.

Das Datenblatt zu dem Modul ist hier: http://www.funkmodul.com/funkmodule/...en/RT868F5.pdf

Auf Seite 7 wird genau beschrieben wie so etwas geht, nur eben nicht in Assembler. Ich habe versucht das zu übersetzen, und für einen ATmega8 im AVR Studio 4 folgendes Programm dafür geschrieben:

Code:
;Abrufmöglichkeiten:
;	Initialisieren:		RT868F5_initialisieren
;	Senden:				RT868F5_Senden
;	empfangen:			RT868F5_empfangen		... Je nach Verwendung abzuändern

;Benötigte Deklarationen:
;	Arbeitsregister: 		temp
;	Register zum Senden: 	Senden
;	Register zum Empfangen:	Empfangen
;   Korrekte Taktrate eingeben (derzeit 8000000)


;Pinbelegung:
;                                                   ______
;                                            PC6 1 |  O   |28 PC5
;                                      RXD   PD0 2 |      |27 PC4
;                                      TXD   PD1 3 |      |26 PC3
;                                            PD2 4 |      |25 PC2
;                                      SP2   PD3 5 |      |24 PC1
;                                      SP1   PD4 6 |      |23 PC0
;                                            VCC 7 |      |22 GND
;                                            GND 8 |  AT  |21 AREF
;                                            PB6 9 | mega |20 AVCC
;                                            PB7 10|   8  |19 PB5
;                                            PD5 11|      |18 PB4
;                                            PD6 12|      |17 PB3
;                                            PD7 13|      |16 PB2   
;                                            PB0 14|______|15 PB1 

;..................................
;...   RT868F5 Initialisieren   ...
;..................................

RT868F5_initialisieren:
;Einstellen der Baudrate
;UBRR = Taktfrequenz / (16 * Baudrate) - 1
	.equ Takt = 8000000
	.equ Baud = 57600
	.equ UBRRL_H = Takt/(Baud*16)-1

	ldi temp, LOW(UBRRL_H)
	out UBRRL, temp
	ldi temp, HIGH(UBRRL_H)
	out UBRRH, temp
;Senden und Empfangen aktivieren
	ldi temp, (1<<RXEN) | (1<<TXEN) | (1<<RXCIE)
	out UCSRB, temp
;Einstellen des Formats (1Start, 8Data, 1 Stop)
	ldi temp, (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0)
	out UCSRC, temp
;Einstellen des Funkmoduls:
;57600 Baud
; SP1 Auf 3V
; SP2 Auf 0V (Hardwareseitig)

; S5 auf 1 setzen:
ldi Senden, '+'						; Sendet +++
rcall RT868F5_Senden
ldi Senden, '+'
rcall RT868F5_Senden
ldi Senden, '+'
rcall RT868F5_Senden

rcall Empfangen_OK

ldi Senden, 'A'						; Sendet ATS5=1<CRLF>
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 'T'
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 'S'
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 5
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, '='
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 1
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 13
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 10
rcall RT868F5_Senden

rcall Empfangen_OK

ldi Senden, 'A'						; Sendet ATCC<CRLF>
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 'T'
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 'C'
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 'C'
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 13
rcall RT868F5_Senden
rcall Wait_5ms
ldi Senden, 10
rcall RT868F5_Senden

rcall Empfangen_OK

	ret

Empfangen_OK:
	Receive_Warten1:
		sbis UCSRA, RXC
		rjmp Receive_Warten1
		in temp, UDR
		cpi temp, 'O'
		brne FEHLER_RT868F5_INT
	Receive_Warten2:
		sbis UCSRA, RXC
		rjmp Receive_Warten2
		in temp, UDR
		cpi temp, 'K'
		brne FEHLER_RT868F5_INT	
	Receive_Warten3:
		sbis UCSRA, RXC
		rjmp Receive_Warten3
		in temp, UDR
		cpi temp, 13
		brne FEHLER_RT868F5_INT
	Receive_Warten4:
		sbis UCSRA, RXC
		rjmp Receive_Warten4
		in temp, UDR
		cpi temp, 10
		brne FEHLER_RT868F5_INT
ret

FEHLER_RT868F5_INT:
sbi BGL, BGL_
rjmp Ende

;..........................
;...   RT868F5 Senden   ...
;..........................

RT868F5_Senden:
    sbis UCSRA,UDRE                   	; Warten bis UDR für das nächste Byte bereit ist
    rjmp RT868F5_Senden					; Ruft Senderoutine auf

	out UDR, Senden						; Nachricht absenden
	ret

;.............................
;...   RT868F5 empfangen   ...
;.............................

RT868F5_Empfangen:
	in empfangen, UDR

	reti
Das Problem dabei ist, das es nicht funktioniert, da das Funkmodul nicht antwortet, Das Programm bleibt immer in der ersten Warteschleife wo erwaret wird das ein 'O' empfangen wird, hängen.

Hoffentlich kann mir da wer weiterhelfen!

Danke im Voraus, Gerko