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 | }
|