Не делайте таких обработчиков прерываний, прерывания должны обрабатывться по-возможности быстро.
Лучше устанавливайте флаг, а задержку реализуйте в main.
Код
static volatile unsigned char temp=0;
static unsigned char flag;
void interrupt()
{
if(INTCON.INTF)
{
temp ^= 0xFF;
PORTD = temp; // инверсия уровней на выводах PORTD
flag = 1;
INTCON.INTF=0;
}
}// interrupt
void main() {
Init();
while(1) {
if (flag == 1) {
flag = 0;
delay_ms(20);
}
}
}