A nie trzeba gdzieś zdefiniować kompilatorowi FCPU aby Delay działał prawidłowo.
U mnie w C na PICi dodaje przeważnie taka wiązkę poleceń.
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 4000000
#endif
Ale podkreślam to kompilator C na procesory Microchip PIC a nie AVRGCC.
EDIT.
A.. bo ty wpisując do OCR0 wartość 0, nie wyłączasz tak naprawdę Timera, tylko generujesz sygnał o minimalnym wypełnieniu (ok 1%), aby zgasić całkowicie diodę przed Deleyem musisz odciąć PWM od pinu portu (odpowiedni rejestr Timera), wstawić tam 0 (normalna operacja na porcie), odmierzyć te 2000ms i ponownie dołączyć sygnał PWM.
Nie podam ci szczegółów, bo teraz studiuję PICi i nie chcę sobie mieszać w głowie różnymi rodzajami procesorów (na razie AVRy posłałem na emeryturę), ale na pewno wszystko się rozbiega o odcięcie sygnału PWM od portu.
Też akurat wczoraj walczyłem z podobnym programem na PICa, z tą różnicą ze tam PWM to trochę inna historia.