andio
25.09.2006, 16:13
Hi!
Ich hab ein Problem mit einer UART0 ISR, meiner Meinung nach wird diese vom Compiler, ich verwende das AVR Studio 4.12 SP3 mit WINAVR, falsch übersetzt.....
Die Interrupt Routine soll beim ersten Aufruf, wenn das Startzeichen '~' empfangen wird das startbit auf 1 setzen und dann die folgenden 5 Byte, in das Array data_in schreiben also von d=0 bis d=4
Und wenn d=5 ist(nach dem inkrementieren von d), also 5 Byte empfangen das startbit wieder löschen und das auswertebit setzen.
Das Problem ist aber, dass in data_in[0] das Startzeichen '~' drinnen steht und die folgenden Byte erst ab data_in[1] stehen, also um eins verschoben sind.
Hat jemand von euch ne Erklärung dafür?
Meiner Meinung nach, wäre die ISR richtig.....
Hier der Code:
ISR (USART0_RXC_vect)
{
static unsigned char d=0,startbit=0;
if (UDR0 == '~')
{
startbit = 1;
d=0;
}
else
{
if(startbit == 1)
{
data_in[d]=UDR0;
d++;
if(d==5)
{
auswerten=1;
startbit=0;
}
}
}
}
Danke für eure Hilfe!
-andio-
Ich hab ein Problem mit einer UART0 ISR, meiner Meinung nach wird diese vom Compiler, ich verwende das AVR Studio 4.12 SP3 mit WINAVR, falsch übersetzt.....
Die Interrupt Routine soll beim ersten Aufruf, wenn das Startzeichen '~' empfangen wird das startbit auf 1 setzen und dann die folgenden 5 Byte, in das Array data_in schreiben also von d=0 bis d=4
Und wenn d=5 ist(nach dem inkrementieren von d), also 5 Byte empfangen das startbit wieder löschen und das auswertebit setzen.
Das Problem ist aber, dass in data_in[0] das Startzeichen '~' drinnen steht und die folgenden Byte erst ab data_in[1] stehen, also um eins verschoben sind.
Hat jemand von euch ne Erklärung dafür?
Meiner Meinung nach, wäre die ISR richtig.....
Hier der Code:
ISR (USART0_RXC_vect)
{
static unsigned char d=0,startbit=0;
if (UDR0 == '~')
{
startbit = 1;
d=0;
}
else
{
if(startbit == 1)
{
data_in[d]=UDR0;
d++;
if(d==5)
{
auswerten=1;
startbit=0;
}
}
}
}
Danke für eure Hilfe!
-andio-