Ok habe hier mal versucht, mit den Erkenntnissen aus den letzten Beiträgen,ein Programm zu basteln!

Bin mir absolut nicht sicher ob das von der Struktur bzw. Stil so hinhaut !!
Vielleicht hat ja jemand lust da mal schnell drüber zu fuchsen.
Bin für jeden Hinweis dankbar !


MFG
Casa
Code:
/*************************************************
Empfangen der GPS-daten,
zusammenfügen von GPS-Daten in einen Bitrahmen  und
Senden des Bitrahmens
**************************************************/



#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <usart_bibliothek.h>
#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*/



static int ifr;           /* Definition eines Zählers für for in frame_data*/
static int ih;            /* Definition eines Zählers für for in header_data*/
static int ig;            /* Definition eines Zählers für for in gps_data*/

static unsigned char gps_data[gps_data_size]; /* USART Array für Dateneingänge */
static unsigned char pointer;                 /* USART pointer  */

static unsigned char frame[header_size + gps_data_size + crc_size]; /* Datenrahmen komplett*/

static unsigned char header[header_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*/





/*----------- Initialisieren des USART -----------------------------------------------*/

                  
                                                               
	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*/
	
   





       /*------Programmeinstieg------------------*/


void main(void)
{

       
        
   while (!(UCSRA & (1<<RXC));              /* Warten bereit zum empfang*/
   
        {   
           if (++pointer == gps_data_size)    /* Zählvariable pointer wächst bis auf den*/
                                              /*Wert von Datenfeld (100) an */
           pointer = 0;                       /* Erreicht Pointer den Wert von */
                                              /*Datenfeld, wird pointer wieder auf 0*/
                                              /*zurückgesetzt */
           gps_data[pointer] = UDR;	        /* Bei jeder Inkrementierung von pointer
                                                   wird der aktuellere Inhalt vom UDR 
        }                                          in das entsprechende Datenfeld vom 
                                                   Array gesetzt. */
	
      }


        /*---------Es folgt zuerst die Zuweisung der header_daten in das Frame Array ---------*/

       



          for(i=0;i<HEADER_SIZE; i++) /* Anweisung die bis headersize
                                                           raufzählt*/

                  { 
                        frame[i] = header_data[i];   /* Mit jedem schritt wird 
                                                                  Inhalt aus header-data in 
                                                                  frame geschoben*/
                  }





       /*--- Daten aus gps_data werden im Anschluss an Header den
              Array-Frame übergeben---*/



           for(ig=HEADER_SIZE;ig<gps_data_size + header_size; ig++)

         { 
            frame[i] = gps_data[i] 
         }





       /* ----Datenausgabe aus dem ARRAY "Frame" an den
               TX des USART-----*/
                    
                    
                    
    
             while (!(UCSRA & (1<<RXC));              
      
              {    
                  UDR=0x07               /*senden des Anfangsflag*/
    
              }   


 

              while (!(UCSRA & (1<<UDRE) ) );          

        {
     
      for (ifr=0; ifr<header_size + gps_data_size + crc_size; ifr++) 
                                                             /* wird  hochgezählt, solange
                                                                 ifr kleiner als die Länge 
                                                                 von komplettarray */  
                     {
 
                                if (!frame[ifr]) /* wenn Inhalt des aprs == /0 */
         
                                 break;           /* wird Schleife beendet */

                                 UDR=frame[ifr];  /* Innerhalb der 
                                                           for- Bedingung wird einzeln 
                                                          jeder Inhalt des Array seriell 
                                                          über usart  ausgesendet */ 
                     } 
        }


            while (!(UCSRA & (1<<UDRE) ) );

    
                           {
                               UDR = 0x7E /*senden des Endflags*/
                           }
}
[/code]