"
if (chars=='A')
{
PORTC=(1<<DDC1);
}
PORTC=0x00;
}
"
Das wird in einer sehr schnellen Endlosschleife wiederholt ausgeführt.
Wenn du ein A schickst, ist PC1 für ein bis zwei CPU Takte (paar
Nanosekunden oder so?) auf High Pegel, direkt danach wieder low. Sieht
man nicht.
Selbst mit PORTC=0; im else-Teil wärs nur bis zum nächsten
Schleifendurchlauf, das sind dann vielleicht 8 CPU Takte.
Weiterhin ist (1<<DDC1) nur möglich, weil das vom Präprozessor auf
(1<<1) umgesetzt wird.
Richtig wäre PORTC=(1<<PC1). Noch richtiger wäre
PORTC |=(1<<PC1); zum Einschalten und
PORTC &= ~(1<<PC1); zum Ausschalten.
Unterschied: Mit diesem beiden Befehlen änderst du nur das eine Bit, was
du ändern willst, nicht alle 8.
Siehe das AVR-GCC Tutorial oben links.