Noch ein Tipp:
Mit ein paar Makros kann man sich das schreiben des Programms sehr erleichtern und erhöht die Lesbarkeit des Codes ungemein.
Ich habe da vor allem diese vier:
Code:
#define SetBit(ADDRESS,BIT) 	((ADDRESS) |= (1<<(BIT)))			//!< Setzt ein bestimmtes Bit eines Registers
#define ClrBit(ADDRESS,BIT) 	((ADDRESS) &= ~(1<<(BIT)))			//!< Löscht ein bestimmtes Bit eines Registers
#define ToogleBit(ADDRESS,BIT) 	((ADDRESS) ^= (1<<(BIT)))			//!< Toogelt ein bestimmtes Bit eines Registers
#define IsBitSet(ADDRESS,BIT) 	(((ADDRESS) & (1<<BIT))?1:0)		//!< Fragt ein bestimmtes Bit eines Registers ab
So wird zum Beispiel aus der recht kryptischen Abfrage eines Eingangs auf PB4
if (PINB &(1<<PB4)) {}
ein recht einfaches
if (IsBitSet(PINB,4)) {}
und das ohne dass der Compiler einen anderen Code draus macht.

Gruß,
askazo