1 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
2 | //+RS232 Headerdatei zur Terminalkomunikation mit dem PC +
|
3 | //+Datum: 30.11.06 +
|
4 | //+Autor: Kai Lindermeier +
|
5 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
6 |
|
7 | #define BAUD 9600 // Baudrate festlegen
|
8 | #define MYUBRR F_CPU/16/BAUD-1 // Formel zur UBRR-Berechnung
|
9 |
|
10 |
|
11 | void USART_Init( unsigned int ubrr); // Initialisierungs Fkt. der Uart
|
12 | void USART_Transmit( unsigned char data ); // ein Zeichen sende Fkt.
|
13 | void uart_puts (char *s); // String sende Fkt.
|
14 | void var_out (int16_t varout); // Variablen sende Fkt.
|
15 | uint8_t Usart_Rx(void);
|
16 |
|
17 | //======================================================================
|
18 | // Wert von Variable senden
|
19 | //======================================================================
|
20 | void var_out (int16_t varout)
|
21 | {
|
22 | char varoutp[7]; // char array
|
23 | uart_puts( itoa( varout, varoutp, 10 ) ); // itoa = Integer to ASCII
|
24 | }
|
25 |
|
26 |
|
27 | //======================================================================
|
28 | // String senden
|
29 | //======================================================================
|
30 |
|
31 | void uart_puts (char *s)
|
32 | {
|
33 | while (*s) // so lange *s != '\0'
|
34 |
|
35 | {
|
36 | USART_Transmit(*s);
|
37 | _delay_ms(1); // timing, kurze pause
|
38 | s++;
|
39 | }
|
40 | }
|
41 |
|
42 | //======================================================================
|
43 | // RS232 Init 9600/8/2
|
44 | //======================================================================
|
45 |
|
46 | void USART_Init( unsigned int ubrr)
|
47 | {
|
48 | /* Baudrate setzen */
|
49 | UBRRH = (unsigned char)(ubrr>>8);
|
50 | UBRRL = (unsigned char)ubrr;
|
51 |
|
52 | /* RX/TX einschalten */
|
53 | UCSRB = (1<<RXEN)|(1<<TXEN);
|
54 |
|
55 | /* Datenformat setzen: 8data, 2stop bit */
|
56 | UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
|
57 | }
|
58 |
|
59 | //======================================================================
|
60 | // ein Zeichen senden RS232
|
61 | //======================================================================
|
62 | void USART_Transmit( unsigned char data )
|
63 | {
|
64 | /* auf leerem TX Buffer warten */
|
65 | while ( !( UCSRA & (1<<UDRE)) )
|
66 | ;
|
67 | /* Daten in den Speicher legen und senden */
|
68 | UDR = data;
|
69 | }
|
70 |
|
71 |
|
72 | //====================================================================================
|
73 | // UART: ein Zeichen einlesen
|
74 |
|
75 | uint8_t Usart_Rx(void)
|
76 | {
|
77 | while (!(UCSRA & (1<<RXC))); // warten bis Zeichen verfuegbar
|
78 | return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben
|
79 | }
|