USARTe2min.c


1
#include <avr/io.h>        // Deklaration
2
#define TAKT 8000000UL      // Controllertakt 8 Mhz
3
#define BAUD 9600UL        // Baudrate
4
5
6
#define TEILER (TAKT+BAUD*8)/(BAUD*16)-1    // clever runden
7
#define BAUD_REAL TAKT/(16*(TEILER+1))      // Reale Baudrate
8
#define BAUD_ERROR (BAUD_REAL*1000)/BAUD    // Fehler in Promille, 1000 = kein Fehler.
9
 
10
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
11
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
12
#endif
13
14
15
16
17
void main(void)
18
{
19
  UBRRL = TEILER;                        
20
  UCSRB |= (1 << TXEN);                    // Sender an
21
  UCSRC |= (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);    // asyn. 8 bit
22
23
while(1)
24
  {
25
26
  while( !(UCSRA & (1 << UDRE)));                // warte solange Sender besetzt
27
  UDR = 'a';
28
  
29
  //int m;
30
  //for(m = 700; m > 0; m--);                // ohne die Schleife gehts nicht
31
32
  
33
  }
34
35
36
}