Using Interrupts

The attachInterrupt() function registers an event handler to be invoked when an event occurs. You need some event to occur to cause the event handler to be called.

If the interrupt handler DOES get invoked, it need to be fast. Very fast, so that it does not cause other interrupts to be ignored while your handler is dinking around taking it's time doing something.

    delay(250);

That's hardly fast, is it. The delay() function relies on interrupts (the clock ticking generates an interrupt). Interrupts are disabled during your function. So, you absolutely can not use delay() in an ISR. And don't try to get around this with some other time wasting technique.

    Serial.println("CRC is not valid!");

This isn't fast, either.

  delay(1000);     // maybe 750ms is enough, maybe not

You got the part about fast, right?

  Serial.println(celsius);

Not in an ISR...

Is the DS18S20 even generating an interrupt?