ASURO Library
2.80
Hauptseite
Dateien
Auflistung der Dateien
Datei-Elemente
lib
uart.c
gehe zur Dokumentation dieser Datei
1
/****************************************************************************/
42
/*****************************************************************************
43
* *
44
* This program is free software; you can redistribute it and/or modify *
45
* it under the terms of the GNU General Public License as published by *
46
* the Free Software Foundation; either version 2 of the License, or *
47
* any later version. *
48
* *
49
*****************************************************************************/
50
#include "
asuro.h
"
51
52
53
54
/****************************************************************************/
93
void
SerWrite
(
94
unsigned
char
*data,
95
unsigned
char
length)
96
{
97
unsigned
char
i = 0;
98
99
UCSRB = (1<<TXEN);
// Sender einschalten
100
while
(length > 0)
// so lange noch Daten da sind
101
{
102
if
(UCSRA & (1<<UDRE))
103
{
// warten, bis der Sendebuffer leer ist
104
UDR = data[i++];
105
length --;
106
}
107
}
108
while
(!(UCSRA & (1<<TXC)))
// abwarten, bis das letzte Zeichen
109
;
// uebertragen wurde.
110
111
UCSRA |= (1<<TXC);
// transmission completed Flag setzen
112
113
UCSRB &= ~(1<<TXEN);
// Sender ausschalten / Powersave
114
}
115
116
117
118
/****************************************************************************/
158
void
SerRead
(
159
unsigned
char
*data,
160
unsigned
char
length,
161
unsigned
int
timeout)
162
{
163
unsigned
char
i = 0;
164
unsigned
int
time = 0;
165
166
UCSRB = (1<<RXEN);
// Empfaenger einschalten
167
168
if
(timeout != 0)
169
{
170
/*
171
Die Funktion wird auf alle Faelle, auch ohne empfangene Daten, wieder
172
verlassen. --> nonblocking mode
173
*/
174
while
(i < length && time++ < timeout)
175
{
176
if
(UCSRA & (1<<RXC))
177
{
178
data [i++] = UDR;
179
time = 0;
180
}
181
}
182
if
(time > timeout)
183
data [0] =
'T'
;
184
}
185
else
186
{
187
/*
188
Die Funktion wird auf alle Faelle erst nach dem Empfang von der
189
vorgegebenen Anzahl Zeichen verlassen. blocking mode
190
*/
191
while
(i < length)
192
{
193
if
(UCSRA & (1<<RXC))
194
data [i++] = UDR;
195
}
196
}
197
}
Erzeugt am Mit Nov 27 2013 22:55:08 für ASURO Library von
1.8.2