/* 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) } }