usart.c


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
}