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
Lesezeichen