Gast
#177695
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