Moin,
ich hatte "UCSR1C = .." und nicht "|=". Jetzt sehe ich anhand der LEDs,
die auf dem XBee Explorer Board sind, dass Daten gesendet werden, und
dass auch welche zurück kommen. Jetzt sieht mein Codestück so aus:
1 | #include <avr/io.h>
|
2 | #include <stdlib.h>
|
3 | #include <inttypes.h>
|
4 | #include <util/delay.h>
|
5 | #include <avr/interrupt.h>
|
6 |
|
7 | #ifndef F_CPU
|
8 | #define F_CPU 20000000
|
9 | #endif
|
10 |
|
11 | #define BAUD 57600L
|
12 |
|
13 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
|
14 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))
|
15 |
|
16 | int b = 0;
|
17 |
|
18 | ISR(USART0_RX_vect)
|
19 | {
|
20 | }
|
21 |
|
22 | ISR(USART1_RX_vect)
|
23 | {
|
24 | uint8_t a = UDR1;
|
25 | while (!(UCSR1A & (1<<UDRE1)))
|
26 | ;
|
27 | UDR1 = a;
|
28 | }
|
29 |
|
30 | void uart_init(void)
|
31 | {
|
32 | //UART0 GPS
|
33 | UCSR0B |= (1<<RXEN0)|(1<<RXCIE0);
|
34 | UCSR0C |= (1<<UCSZ01)|(1<<UCSZ00);
|
35 |
|
36 | UBRR0H = UBRR_VAL >> 8;
|
37 | UBRR0L = UBRR_VAL & 0xFF;
|
38 |
|
39 | //UART1 XBee
|
40 | UCSR1B |= (1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1);
|
41 | UCSR1C |= (1<<UCSZ11)|(1<<UCSZ10);
|
42 |
|
43 | UBRR1H = UBRR_VAL >> 8;
|
44 | UBRR1L = UBRR_VAL & 0xFF;
|
45 | }
|
46 |
|
47 | void delay_ms(unsigned int t)
|
48 | {
|
49 | for(int i=0;i<t;i++)
|
50 | {
|
51 | _delay_ms(1);
|
52 | }
|
53 | }
|
54 |
|
55 | int main(void)
|
56 | {
|
57 | sei();
|
58 | uart_init();
|
59 | while (1)
|
60 | {
|
61 | }
|
62 | return 0;
|
63 | }
|
Aber in der XBee Software, XCTU, sind nur Punkte zusehen, und nicht die
Buchstaben, die ich hinsende.
Was könnte n0och falsch sein?
MfG
Philipp