www.mikrocontroller.net

Forum: Compiler & IDEs C Problem, String vergleich


Autor: JonnyB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Shazter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.