/* schieberegister_01.c ATmega88 @ 8MHz */
#include <avr/io.h>

void sck(void)				// Die Funktion sck realisiert den Takt
{
	PORTD |= (1<<PD1);		// SCK = 1 (HIGH)
	PORTD &= ~(1<<PD1);		// SCK = 0 (LOW)
}

int main(void)
{
	DDRD = 0xFF;			// Richtungsregister PORTD = Ausgang
	PORTD = 0x04;			// PD2 = High (OE = aktive low) 0x04 = 0000 0100
	
	while(1)
	{
		PORTD |= (1<<PD0);	// PD0 = 1
		sck();				// 1.Taktimpuls für SCK
		PORTD &= ~(1<<PD0); // PD0 = 0
		sck();				// 2.Taktimpuls für SCK
		PORTD |= (1<<PD0);	// PD0 = 1
		sck();				// 3.Taktimpuls für SCK
		PORTD &= ~(1<<PD0); // PD0 = 0
		sck();				// 4.Taktimpuls für SCK
		PORTD |= (1<<PD0);	// PD0 = 1
		sck();				// 5.Taktimpuls für SCK
		PORTD &= ~(1<<PD0); // PD0 = 0
		sck();				// 6.Taktimpuls für SCK
		PORTD |= (1<<PD0);	// PD0 = 1
		sck();				// 7.Taktimpuls für SCK
		PORTD |= (1<<PD0);	// PD0 = 1
		sck();				// 8.Taktimpuls für SCK
		PORTD &= ~(1<<PD2); // PD2 = 0 (Takt = LOW für RCK)
		PORTD |= (1<<PD2);	// PD2 = 1 (Takt = HIGH für RCK -> Ausgabe Schieberegister)
	}
}