1 | #define F_CPU 16000000UL
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <avr/interrupt.h>
|
5 | #include <util/delay.h>
|
6 | #include <stdlib.h>
|
7 | #include "ISD.h"
|
8 | #include "uart.h"
|
9 |
|
10 | char rxBuffer[17];
|
11 | uint8_t flag_NewData;
|
12 |
|
13 |
|
14 | char* uart_my_getc()
|
15 | {
|
16 | while (!(UCSR0A & (1<<RXC0))); // warten bis Zeichen verfuegbar
|
17 | return UDR0;
|
18 | }
|
19 |
|
20 | /*
|
21 | void uart_gets( char* Buffer, uint8_t MaxLen )
|
22 | {
|
23 | uint8_t NextChar;
|
24 | uint8_t StringLen = 0;
|
25 |
|
26 | NextChar = uart_getc(); // Warte auf und empfange das nächste Zeichen
|
27 |
|
28 | // Sammle solange Zeichen, bis entweder das String Ende Zeichen kam oder das aufnehmende Array voll ist
|
29 | while( NextChar != 0x8D && StringLen < MaxLen - 1 ) {
|
30 | *Buffer++ = NextChar;
|
31 | StringLen++;
|
32 | NextChar = uart_getc();
|
33 | }
|
34 |
|
35 | // Noch ein '\0' anhängen um einen Standard C-String daraus zu machen
|
36 | *Buffer = '\0';
|
37 |
|
38 | uart_puts(Buffer);
|
39 |
|
40 | // Setze Flag "Neue Daten verfügbar"
|
41 | flag_NewData = 1;
|
42 | }
|
43 | */
|
44 |
|
45 |
|
46 | //taken from: http://www.mikrocontroller.net/topic/153197
|
47 | char *uart_gets(char *buffer, size_t buf_len)
|
48 | {
|
49 | uint8_t data;
|
50 | int i=0;
|
51 |
|
52 | do{
|
53 | while ((data = uart_getc()) & UART_NO_DATA)
|
54 | {;} // auf Daten warten
|
55 | *buffer++ = data;
|
56 | i++;
|
57 | if (i== buf_len) break;
|
58 | }while( (data & 0xff) != 0x8D); // Endlosschleife, falls kein 0-Byte kommt
|
59 | // '\n' waere evtl. als Trenner besser
|
60 | if (i == buf_len)
|
61 | *buffer-- = '\0'; //'Notfall'-terminierung
|
62 | flag_NewData = 1;
|
63 | return buffer;
|
64 | }
|
65 |
|
66 | void handleNewData(){
|
67 | uart_puts(rxBuffer);
|
68 | flag_NewData = 0;
|
69 | }
|
70 |
|
71 | int main()
|
72 | {
|
73 | uart_init(UART_BAUD_SELECT(19200, F_CPU));
|
74 | sei();
|
75 | uint8_t m[3];
|
76 | ISD_setAutoTransmission(1,m);
|
77 | uart_puts(m);
|
78 | _delay_ms(10);
|
79 | uart_flush();
|
80 |
|
81 | while( 1 ) {
|
82 | uart_gets(rxBuffer, sizeof(rxBuffer)-1);
|
83 | if(flag_NewData)
|
84 | handleNewData();
|
85 | }
|
86 | }
|