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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.