Du musst die Fuse-Bit so setzen, dass er das Quarz anspricht. Definier noch F_CPU.
Hier mal nen Programm von mir, dass ungefähr das selbe macht.
Code:
/* Testschaltung
Version: 0.1
Datum: 07.01.2009
Autor: Finn 'Kani' Schürmann
Target: AtMega 8515
Lizenz: Keine
*/

#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 16000000UL //16MHZ

int main(void)
{
	
	
	DDRA = 0xFF; //PORTA auf Ausgang stellen
	PORTA = 0xFF; //Sicher gehen das zum Start alle Bits "aus" sind.
	DDRB = 0x00;  //PORTB als Eingang zur Vorbeugung von Kurzschlüssen
 	DDRC = 0x00;  //PORTC als Eingang zur Vorbeugung von Kurzschlüssen
 	DDRD = 0x00;  //PORTD als Eingang zur Vorbeugung von Kurzschlüssen

		while( 1 )
		{
			PORTA |= (1 << PA1); // Bit PA1 wird gesetzt
			PORTA &= ~(1 << PA0); // Bit PA0 wird gelöscht 

				_delay_ms(1000);

			PORTA |= (1 << PA0); // Bit PA0 wird gesetzt 
			PORTA &= ~(1 << PA1); // Bit PA1 wird gelöscht

				_delay_ms(1000);
		}	
}
Hab mal irgendwo gelesen, dass man die delay funktion nur bis 1000 benutzen sollte.