Forum: Compiler & IDEs C Problem, String vergleich


von JonnyB (Gast)


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

von Shazter (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.