1 | #include <avr/io.h>
|
2 | #include <stdio.h>
|
3 | #include <stdint.h>
|
4 | #include <string.h>
|
5 | #include "display.h"
|
6 |
|
7 | #include <util/delay.h>
|
8 |
|
9 |
|
10 | void USART_init(void)
|
11 |
|
12 | {
|
13 | UBRRL = 25; //Baudrate 19200
|
14 | UCSRA|=2; //Doppelte Baudrate
|
15 | UCSRB=0x18; //RX und TX erlaubt
|
16 | }
|
17 |
|
18 | void USART_Transmit( unsigned char data )
|
19 | {
|
20 | // Wait for empty transmit buffer
|
21 | while ( !( UCSRA & (1<<UDRE)) )
|
22 | ;
|
23 | // Put data into buffer, sends the data
|
24 | UDR = data;
|
25 | }
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | // Zeichen empfangen
|
32 | uint8_t uart_getc(void)
|
33 | {
|
34 | while (!(UCSRA & (1<<RXC)));
|
35 | ;
|
36 | return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben
|
37 | }
|
38 |
|
39 | // puts ist unabhaengig vom Controllertyp
|
40 | void uart_puts(char *s)
|
41 | {
|
42 | while (*s)
|
43 | { // so lange *s != '\0' also ungleich dem "String-Endezeichen"
|
44 | USART_Transmit(*s);
|
45 | s++;
|
46 | }
|
47 | }
|
48 |
|
49 | void uart_gets( char* Buffer, uint8_t MaxLen )
|
50 | {
|
51 | uint8_t NextChar;
|
52 | uint8_t StringLen = 0;
|
53 |
|
54 | NextChar = uart_getc(); // Warte auf und empfange das nächste Zeichen
|
55 |
|
56 | // Sammle solange Zeichen, bis:
|
57 | // * entweder das String Ende Zeichen kam
|
58 | // * oder das aufnehmende Array voll ist
|
59 | while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
|
60 | *Buffer++ = NextChar;
|
61 | StringLen++;
|
62 | NextChar = uart_getc();
|
63 | }
|
64 |
|
65 | // Noch ein '\0' anhängen um einen Standard
|
66 | // C-String daraus zu machen
|
67 | *Buffer = '\0';
|
68 | }
|