For 'precise' you could consider using a crystal oscillator or better.
There are in-built timer modules on many microcontrollers, where you can program them to cause an interrupt
once the timer has overrun or reached a value.
However, if you think about it, using a 'delay loop' is just as precise too, assuming you have figured out how many clock cycles
each instruction will take. Why should it be less precise?
Given that you just want to blink an LED, it hardly matters if you're using a crystal, or a ceramic
resonator or an in-built oscillator. You won't be able to visually spot any change in value due to
temperature, aging, etc.