C Problem, String vergleich

Gast #177695
Lesenswert?

Hi,

hab versuch ein C Prgramm zu schreiben für ein Atmega8 mit 8Mhz.

Es sollte einen ankommenden String von der RS232 mit einem im MC
abgelegten String vergleichen.

So sieht es bis jetzt aus:


#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#include <avr/signal.h>

//UART
#define F_CPU 8000000                    //8 MHz
#define USART_BAUD_RATE 19200  //19200 baud
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16l)-1 //USART

//Bits
#define CHECKBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT))
#define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))

unsigned int i=0;
volatile unsigned char data = 0;

unsigned char *num_fab ="abcTEST";


// USART intitaliesieren, Baudrate einstellen
void USART_I(void)
{
    UCSRB = _BV(RXCIE) | _BV(TXCIE) | _BV(RXEN) | _BV(TXEN);
    UBRRL = (unsigned char) USART_BAUD_SELECT;
}


SIGNAL (SIG_UART_RECV)
{

data = UDR;

  if (data==*num_fab++)
  {
    i++;
  } else
  {
    i=0;
    *num_fab--;
  }
if (i==7) {CLEARBIT (PORTB,PORTB2);}
}




int main (void)
{
  DDRB = 0xff;     //PORTB als Ausgang
  DDRD = 0x00;    //PORTD als Eingang
  PORTB = 0xff;    //LEDS aus !
  USART_I ();
  sei();      //Interrputs EIN sschalten
for (;;) {}
}



also wenn der string richtig ist wird die LED leuchten PORTB2!

FEHLER:

Wenn ich jetzt denn richtig sende, leuchtet sie auch, aber wenn ich
einen falschen string senden und dannach wieder den richtigen. Leuchtet
nix mehr ?


Hab ich da einen Grundlegenden Fehler gemacht, ich bin ein leider nur
ein Anfänger. Hab schon lage gesucht und ausprobiert.


Gruß Jonny
Gast #177696
Lesenswert?

Hi,

zeig Dir mal den String im Array an per RS232.

Der eigentliche Fehler ist das du das Array auch wieder komplett leeren
musst, weil sich noch Stueck vom alten im Array sind.

Ich hatte schonmal ein thread eroeffnet, da mache ich das gleiche.

Ich hab aber dafuer strcmp_P aus der Stdio.h genutzt ....


Such mal nach dem Thread vielleicht hilft es weiter. Der String
befindet sich dann auch im Flash.

Mfg
Dirk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren