Danke Markus für Deine Antwort.

Aber es bleibt dennoch eine Unklarheit im Raum:

Ich habe nirgendwo den /SS auf LOW gesetzt. Warum funktioniert mein Programm? Alle Werte, die ich vom MEGA8 auf die beiden 74HCT595 schicke, werden bitgenau angezeigt. Immer!

Jemand muss doch den /SS auf LOW setzen, damit der 74HCT595 die Ausgänge freigeben, oder?

Hier mein kleiners Testprogramm, OHNE LOW für /SS!!

Code:
// SPI mit 74HCT595 2 Bytes  an 2 ICs 74HCT595

#define F_CPU  12000000UL
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>

volatile uint8_t data1=3, data2=3, count;


//############################################################################
void spi_shift(uint8_t data1, uint8_t data2)
{
	
	SPDR = data1;		//=== Start transmission
	
	while(!(SPSR & (1<<SPIF))); // warten, bis Übertragung zuende ist
	
	SPDR=data2;
	
	while(!(SPSR & (1<<SPIF))); // warten, bis Übertragung zuende ist
	
	PORTB=1<<PB2;// Store
	
	
}
//############################################################################

void HC595Init()
{
DDRB = (1<<DDB2)|(1<<DDB3)|(1<<DDB5);   // DDB2 ist SS DDB3 ist MOSI, DDB5 ist SCK
		
SPCR |= (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL) | (1<<SPR0);// enable | master | CPHA | 1/16clk

}
//############################################################################

int main(void)
{
	HC595Init();
	while(1)
	{
		spi_shift(data1,data2);
	}
}