#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */

// IO Ports
int delay = 5000;		// Variable delay ist ein Integer mit Startwert 5000

static void Delay (void)  // Unterprogrammm Delay, 
{	
	int cnt =0;			// Variable cnt ist ein Integer mit Startwert 0
	while (cnt < delay)	// Whileschleife, solange cnt kleiner ist als delay durchlaufen
	{											
		__RESET_WATCHDOG(); /* feed the dog */ // der Watschdog wird bei jedem durchlaufen der While-Schleife zurückgesetzt
		cnt++;		// die Variable cnt wird bei jedem Durchlauf um 1 erhöht
	}				
}					// Nachdem Unterprogamm Delay ausgeführt springe wieder zurück wo vorher gewesen ist!!

static void LightShow(void)		// Unterprogramm LightShow
{
	
	unsigned char i;			// Variable i ist unsinged char, d.h. kein Vorzeichen von 0 bis 255, nach überlauf wieder Null
	for (i = 1; i > 0; i <<= 1)	// Forschleife (mit i ist 1 starten; wiederholen solange i größer 0 ist; was <<=i bedeutet weiß ich nicht)
	{
		PTB = i;            //Daten werden an Port B ausgegeben, woher das Programmm dass i Binär umgewandelt
							// an B ausgegeben werden muss? bei mir scheinbar nicht
		Delay();			// nachdem die Lightshow einmal durchgelaufen ist springe zum Unterprogramm Delay
	}						// danach wieder hierher springen, das wiederholen bis i von 1 bis 0(256) gelaufen ist!!!
}							// Wenn Unterprogramm LightShow (und auch Delay) durchlaufen ist springe wieder zurück ins Hauptprogramm

// Hauptprogramm
void main(void)			// Das Hauptprogramm main
{
 // EnableInterrupts;		// Interrupts nicht freigegeben
	
	DDRB = 0xFF; 		 	// Data Direction Register Port B
							// alle Pins des Port B als Output
	
	LightShow();			// Springe zum Unterprogramm LightShow und durchlaufe es, danach wieder hierher springen
	
	for(;;)					// Forschleife die immer wieder durchlaufen wird.
	{
		LightShow();		// Springe immer gleich wieder zum Unterprogrammm LightShow
	}						// Endlosschleife für die LightShow
	
}							// Bitte sicherstellen das sie nie diese 
							// Funktion verlassen!!
