21.08.2012 Aufrufe

Computertechnik mit Mikrocontrollern

Computertechnik mit Mikrocontrollern

Computertechnik mit Mikrocontrollern

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

KAPITEL 13. AUFBAU DES SYSTEMS 181<br />

#define getbyte_buflen 2<br />

static unsigned char getbyte_buffer[getbyte_buflen];<br />

static volatile unsigned char getbyte_bufget = 0;<br />

static volatile unsigned char getbyte_bufput = 0;<br />

volatile unsigned char getbyte_buffil = 0;<br />

#define getbyte_ready() getbyte_buffil<br />

SIGNAL (SIG_UART_RECV)<br />

{<br />

getbyte_buffer[getbyte_bufget]=UDR;<br />

getbyte_bufinc(getbyte_bufget);<br />

if ((++getbyte_buffil)>getbyte_buflen)<br />

getbyte_buffil=getbyte_buflen; // buffer-overrun<br />

}<br />

unsigned char getbyte ()<br />

{<br />

unsigned char c;<br />

while (!getbyte_buffil) asm ("sleep");<br />

cbi (UCSRB,RXCIE); //disabel interrupt SIG_UART_RECV<br />

c=getbyte_buffer[getbyte_bufput];<br />

getbyte_bufinc(getbyte_bufput);<br />

getbyte_buffil--;<br />

sbi (UCSRB,RXCIE);<br />

return c;<br />

}<br />

#endif<br />

Auch diese Version ist aufwändiger als die ohne Interrupt.<br />

Ob sie überhaupt Vorteile bringt, hängt von einer Analyse<br />

der gesamten Anwendung ab. Werden ohne Interrupt Zeichen<br />

verloren, kann diese Version <strong>mit</strong> ausreichend großem Puffer<br />

Abhilfe schaffen. Letztendlich sollte aber auch die Implementierung<br />

eines Hardware-Handshake <strong>mit</strong> CTS und RTS in Betracht<br />

gezogen werden.<br />

RS232 Eingabe ohne UART<br />

Diese Möglichkeit macht dann Sinn, wenn keine UART-<br />

Hardware vorhanden ist. Die Funktion getbyte ready() ist<br />

nicht verfügbar. Nach Entdecken der Flanke des Startbits wird

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!