Hi,
also da sind ein paar Fehler drinne... Denke mal nicht das Du versucht hast das zu Kompilieren.... Solltest Du in Zukunft tun, Fehler anschauen, selber überlegen und erst dann fragen (sonst lernst auch nichts, nur wer schon mal Stundenlang davor gessesn hat und verzweifekt ist kapiert auch was
).
Erst mal hast Du unten in den for schleifen bei den Zuweisungen das ; vergessen. Dann die Initialisierung der UART kann nicht ausserhalb einer funktion erfolgen (dort können nur globale Variablen definiert werden, Funktionsprototypen, Preprozessoranweisungen etc). Mach am besten eine init() funktion (siehe Bsp).
Dann nimt man wenn möglich auch keine globalen Variablen sondern lokal. Vor allem wenn es nur eine funktion gibt 
Und was Du da in der ersten Schleife machts mit den Pointer gibt nicht wirklich sinn... Lass so was erst mal aussen vor und arbeite Dich in die Grundfunktionsweisen von C ein.
Ich poste hier mal ein Bsp wie ich das ungefähr lösen wurde als kleine Hilfe, jetzt Dein Prog durchzusprechen währe etwas zu langwierig...
Code:
#define gps_data_size 96 /* Wert 96 wird der Variablen Datenfeld zugewiesen */
#define header_data_size 30 /* Wert 30 wird der Variablen header_data_size zugewiesen*/
#define crc_size 1
void init(void); //Prototyp
void main(void)
{
int i=0; //schleifenzaehler
unsigned char data[header_data_size+gps_data_size+crc_size]={0x82,0xA4,0xA6,0x8E,0x60,
0x60,0x9c,0x68,0xA8,0xB0,0x92,0x40,0x76,0xA4,0x8A,0x98,
0x82,0xB2,0x40,0x60,0xAE,0x92,0x88,0x8A,0x64,0x40,0x65,
0x03,0xF0};/*headerdaten*/
init(); //UART initialisieren...
while(1) //unendlich schleife...
{
//empfangen der Daten
for(i=gps_data_size;i<gps_data_size + header_data_size; i++)
{
while (!(UCSRA & (1<<RXC)));/* Warten bereit zum empfang*/
data[i] = UDR;
}
//hier fehlt noch Berechnung der Pruefsumme...
UDR=0x07; /*senden des Anfangsflag*/
for (i=0; i<header_data_size + gps_data_size + crc_size; i++) //senden der Daten
{
while (!(UCSRA & (1<<UDRE) ) );
UDR = data[i];
}
while (!(UCSRA & (1<<UDRE)));
UDR = 0x7E; /*senden des Endflags*/
}//while(1)
}//main()
/*----------- Initialisieren des USART -----------------------------------------------*/
void init(void)
{
UBRRH = 0;
UBRRL = 191; /*Baudrate des USART wird bei 4MHZ auf 4800 Baud gesetzt*/
UCSRC = (1<<URSEL)|(3<<UCSZ0); /*Datenformat auf 1Byte gesetzt, kein Paritätbit, kein Stopbit*/
UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN); /*Aktivieren der Empfangs
und Sendebereitschaft und der Interrupts*/
}//init()
Hab die Initanweisungen jetzt nicht überprüft da ich die Header auch nicht habe.
Wenn irgwnd was unklar ist noch mal fragen.
Lesezeichen