Gerber Interpreter

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Hallo,

Ich bin derzeit mit einem Programm beschäftigt, das via USART Schnittstelle von dem Universal Gerber Code Sender(Programm) den G-Code geschickt bekommt. Mein Problem ist, das ich bei einem bestimmten Befehl, das Empfangen des USART stoppen will und die bisher gespeicherten Daten auswerten will.Zur Kontrolle ob der Code auch in Feld2[i] steht verwende ich zur Darstellung ein LCD. Hier mein bis jtz geschriebenes Programm:

ISR(USART0_RX_vect){

char zeichen;
char test[2];
char akt_zeile[50];
int i=0;
int x=0;
int z=0;
int row=0;
int stop=0;
int test1=0;


zeichen=UDR0;


if (zeichen==10) {

int len = x;
akt_zeile[x] = ' ';


akt_zeile[x] = (len>9) ? '0'+(len/10) : ' '; //Nichts anderes als IF len>9 dann '0'+(len/10):
akt_zeile[x] = '0' + (len%10);
akt_zeile[x] = '\0';

feld2[y] = (char*)malloc( strlen(akt_zeile) + 1 );
strcpy( feld2[y], akt_zeile );
feld2 = (char**)realloc( feld2, (y+2)*sizeof(char*) );

if ( feld2 == 0 ) {

char **temp = malloc( (y+2)*sizeof(char*) );
memcpy( temp, feld2, y*sizeof(char*) );
free(feld2);
feld2 = temp;
} lcd_data(y+48);

if(!strcmp(akt_zeile,"D10*")){ //Bei diesem Befehl soll das Empfangen gestoppt werden(G70)
empf=1;
lcd_setcursor(0,2);
lcd_data(empf+48);
UCSR0B &= ~(1<<RXEN0);
UCSR0B &= ~(1<<RXCIE0);
}
y++;
x=0;

} else {

      akt_zeile[x] = zeichen;

x++;
}


}


int main(void)
{int i;
int row=0;
feld2 = (char**)malloc( 1*sizeof(char*) );

lcd_init();
lcd_string("Start");
USART_Init ( MYUBRR ); //Funktionsaufruf zur Initialisierung der ser. Schnittstelle


sei(); //globale Interrupts ein

while(1){

}

return 0;

}
//********************************************************************************
void USART_Init( unsigned int ubrr){
/* baud rate festlegen */
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
/* Empfangen und senden ermoeglichen */
UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
/* Datenformat festlegen: 8data, 2stop bit */
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
} // USART ist initialisiert