Hi,
ich habe ein seltsames Problem:
Ich habe einen mega32 mit angeschlossenem max232. Sende ich ein Zeichen, oder eine Zeichenkette, started das Programm des µC neu. (glaube ich zumindest).
Ablauf:
void main(void):
- Setzte LED als an
- Warte (while(1); )
uart_rxc interrupt:
- wenn empfangenes Zeichen = a => Setze LED als aus
- wenn empfangenes Zeichen = b => Sende '-' zurück.
Ergebnis:
Starten (LED ist an), 'a' senden (LED ist aus), 'b' senden (LED geht wieder an)
Mein Code (relevante teile, led() schaltet nur die LED an/aus):
Code:
int main(void)
{
led_init();
uart_init();
sei();
led(led2, 1);
while(1)
{
}
}
ISR(USART_RXC_vect)
{
uint8_t c;
c = uart_receive();
if (c == 'a') led(led2, 0);
if (c == 's') uart_putc('-');
}
void uart_putc(uint8_t data)
{
while (!(UCSRA & (1<<UDRE)));
UDR = data;
}
void uart_puts(uint8_t *data)
{
while (*data)
{
while (!(UCSRA & (1<<UDRE)));
UDR = *data;
data++;
}
}
Interessanter weise schickt er den gesamten string bei uart_puts. Die LED geht trotzdem an. Ich weiß nicht mehr weiter und hoffe, ihr könnt mir helfen.
Gruß, CowZ
Lesezeichen