regelung_stripped_1.c


1
/*
2
 * Motorregelung.c
3
 *
4
 * Created: 01.03.2012 14:36:40
5
 *  Author: goeckeritz
6
 */ 
7
#define F_CPU  16000000UL
8
9
#include <avr/io.h>
10
#include <avr/interrupt.h>
11
#include <util/delay.h>
12
#include <stdlib.h>
13
#include "ISD.h"
14
#include "uart.h"
15
16
uint8_t rxBuffer[16];
17
18
void uart_putx(uint8_t *s)
19
{  
20
  do{
21
    uart_putc(*s++);
22
  }while(*(s-1) != 0x8D); 
23
}/* uart_putx */
24
25
//taken from: http://www.mikrocontroller.net/topic/153197 
26
void uart_getx( uint8_t* Buffer)
27
{
28
  uint16_t NextChar;
29
   
30
  NextChar = uart_getc();         // Warte auf und empfange das nächste Zeichen
31
  if(NextChar == 0x96)
32
  {
33
    // Sammle solange Zeichen, bis entweder das String Ende Zeichen kam oder das aufnehmende Array voll ist    
34
    while(NextChar != 0x8D) {
35
      if ( !(NextChar & UART_NO_DATA) )
36
        *Buffer++ = (uint8_t)NextChar;
37
      NextChar = uart_getc();
38
    }    
39
    //Krücke hier: letztes 0x8D wird nicht in den 'String' geschrieben
40
    *Buffer = 0x8D;
41
    
42
    // Setze Flag "Neue Daten verfügbar"
43
    flag_ISDNewData = 1;
44
  }    
45
}
46
47
48
void handle_NewData(){
49
  uart_putx(rxBuffer);
50
  flag_ISDNewData = 0;  
51
}
52
53
int main()
54
{
55
  uart_init(UART_BAUD_SELECT(19200, F_CPU));
56
  sei();
57
  
58
  uint8_t m[2];
59
  ISD_setAutoTransmission(1,m);
60
  uart_putx(m);
61
  
62
  //eternal event loop
63
  while( 1 )  {    
64
    uart_getx(rxBuffer);        
65
    if(flag_ISDNewData)
66
      handle_NewData();
67
  } 
68
}