regelung_stripped.c


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
}