Hallo!
Habe ein kleines Problem:
Wenn ich vom Computer eine '9' sende, will ich, dass der AVR eine '9'
zurücksendet.
Leider funktioniert der Code nicht - vielleicht kann mir wer helfen,
danke!
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | #include <util/delay.h>
|
4 |
|
5 | extern void init_io(void);
|
6 | void USART_Init( unsigned int baud );
|
7 | void USART_Transmit( unsigned int data );
|
8 | unsigned char USART_Receive( void );
|
9 |
|
10 | int x;
|
11 | unsigned char zeichen;
|
12 |
|
13 | int main(void)
|
14 | {
|
15 | //cli();
|
16 | init_io();
|
17 | //init_timer0();
|
18 | //sei();
|
19 |
|
20 | USART_Init(9600);
|
21 |
|
22 | for(x=0;x<3;x++)
|
23 | {
|
24 | PORTD|=(1<<PD6);
|
25 | _delay_ms(200);
|
26 | PORTD &=~(1<<PD6);
|
27 | _delay_ms(200);
|
28 | }
|
29 |
|
30 | USART_Transmit('9');
|
31 |
|
32 | while(1)
|
33 | {
|
34 | PORTD|=(1<<PD6);
|
35 | if(PINB & (1<<PINB0))
|
36 | {
|
37 | USART_Transmit('1');
|
38 | while(PINB & (1<<PINB0));
|
39 | _delay_ms(300);
|
40 | }
|
41 | if(PINB & (1<<PINB1))
|
42 | {
|
43 | USART_Transmit('2');
|
44 | while(PINB & (1<<PINB1));
|
45 | _delay_ms(300);
|
46 | }
|
47 | if(PINB & (1<<PINB2))
|
48 | {
|
49 | USART_Transmit('3');
|
50 | while(PINB & (1<<PINB2));
|
51 | _delay_ms(300);
|
52 | }
|
53 | if(PINB & (1<<PINB3))
|
54 | {
|
55 | USART_Transmit('4');
|
56 | while(PINB & (1<<PINB3));
|
57 | _delay_ms(300);
|
58 | }
|
59 | zeichen=USART_Receive();
|
60 | }
|
61 | }
|
62 |
|
63 |
|
64 | //-------
|
65 | //INIT_IO
|
66 | //-------
|
67 | //Initialisierung der Port-Pins
|
68 | void init_io(void)
|
69 | {
|
70 | DDRD |= 0xFF;
|
71 | DDRB |= 0x00;
|
72 | }
|
73 |
|
74 | void USART_Init( unsigned int baud )
|
75 | {
|
76 |
|
77 | UBRRH = 0;
|
78 | UBRRL = 12;
|
79 | /* Enable receiver and transmitter */
|
80 | UCSRB = (1<<RXEN)|(1<<TXEN);
|
81 | /* Set frame format: 8data, 2stop bit */
|
82 | UCSRC = (1<<USBS)|(3<<UCSZ0);
|
83 | }
|
84 |
|
85 | void USART_Transmit( unsigned int data )
|
86 | {
|
87 | while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
|
88 | {
|
89 | }
|
90 |
|
91 | UDR = data; /* schreibt das Zeichen x auf die Schnittstelle */
|
92 |
|
93 | }
|
94 |
|
95 | unsigned char USART_Receive( void )
|
96 | {
|
97 | /* Wait for data to be received */
|
98 | while ( !(UCSRA & (1<<RXC)) )
|
99 | /* Get and return received data from buffer */
|
100 | zeichen=UDR;
|
101 | if (zeichen == '9')
|
102 | {
|
103 | USART_Transmit('9');
|
104 | }
|
105 | zeichen='0';
|
106 | return zeichen;
|
107 | }
|