HAllo Leute ich versuch grad ein Zeichen das ich sende mir wieder vom Controller zurück senden zu lassen. Aber irgendwie funktioniert meine Routine nicht und ich seh den Fehler nicht. Interrupts sind aktiviert. Es soll mit 9600 und 8N1 kommuniziert werden. Die Bits UCSZ! und UCSZ0 habe als initialvalue ja bereits 1. Also sollte das stimmen. Abe weis trotzdem nicht weiter. Die CPU ist ein Amtega 32. Wo steckt der Fehler? KAnn eigentlich nur was an den Registern sein aber hab nix gefunden beim Durchgehen.
1 | #include <stdint.h> |
2 | #include <avr/interrupt.h> |
3 | #include <util/delay.h> |
4 | #include <stdlib.h> |
5 | #include <string.h> // Für "strcmp" |
6 | |
7 | #define Takt 8000000
|
8 | #define BAUD1 9600 // Baudrate
|
9 | |
10 | #define UBRR_VAL1 ((Takt/16/BAUD1)-1) // Schnittstelle BUS
|
11 | |
12 | unsigned char test; |
13 | int empfangen; |
14 | ISR(USART_RXC_vect) |
15 | {
|
16 | test = UDR; |
17 | empfangen = 1; |
18 | }
|
19 | |
20 | |
21 | |
22 | ISR (TIMER0_OVF_vect) |
23 | {
|
24 | PORTB |= (1 << PB0); |
25 | }
|
26 | |
27 | ISR (TIMER0_COMP_vect) |
28 | {
|
29 | PORTB &= ~(1<< PB0); |
30 | }
|
31 | |
32 | int main(void) |
33 | {
|
34 | |
35 | UCSRB |= (1<<RXEN); |
36 | UCSRB |= (1<<TXEN); // USART1 TX einschalten |
37 | UCSRB |= (1<<RXCIE); |
38 | |
39 | UCSRC |= (1<<URSEL); // USART1 Asynchron 8N1 |
40 | UBRRH = UBRR_VAL1 >> 8; |
41 | UBRRL = UBRR_VAL1; |
42 | |
43 | |
44 | sei(); |
45 | UDR ='g'; |
46 | /*
|
47 | DDRB = 0xFF;
|
48 | TIMSK |= (1 << TOIE0) | (1 << OCIE0);
|
49 | OCR0 = 0x80;
|
50 | |
51 | PORTB |= (1 <<PB0);
|
52 | TCCR0 |= (1 << CS00)| (1 << CS02);
|
53 | */
|
54 | if (empfangen == 1 ) |
55 | {
|
56 | while ( !( UCSRA & (1<<UDRE)) ) |
57 | ;
|
58 | UDR = test; |
59 | UDR = 'f'; |
60 | empfangen = 0; |
61 | }
|
62 | while (1); |
63 | return 0; |
64 | }
|