Wait for nanoSeconds

Мне нужен задержка несколько наносекундах. Плата Arduino Uno 16Mhz. Я знаю 1такт = 1/16 * 10^6 И команда NOP требуется такт для выполнения т.е. 62,5наноСек и 62,5 * 16 = 1000 нано сек = 1мкСек.

Вопрос, написал код задержки 1сек - конечно без встроенных функции - но она задерживает цикл меньше 1 секунда и не понял в чем ошибка.

const byte LED = LED_BUILTIN;

  int mikS = 0;                           
  int milS = 1;
  const uint32_t TOP = 1000000;  // for TOP 
  
  void setup() {
    pinMode(LED, HIGH);    // seting pin
  }
  
  void loop() {

    delayNanoseconds(16);
     
   // cslculate 1 sec 
   if ((milS * mikS) >= TOP){
    digitalWrite(LED, !digitalRead(LED));
    milS = 1;         // reset var  (mili)
   }

   if (mikS >= 1000){
      milS++;      // increment var   (milisecond)
      mikS = 0;   // reset var          (mikroSecond)
   }
    
  }

  void delayNanoseconds(byte nsec){
    if (nsec == 0) return; 
    while (nsec > 0){
      asm volatile("nop \n\t");           
      nsec--;
    }   
     mikS++;
  }

Сделал оптимизацию поднял вверх IF и переменный для мили секондс начинал с нуля а не с одного. Задержка сейчас чуть больше чем раньше но все равно не одно секунда. Вопрос тот же, как мне его исправить

const byte LED = LED_BUILTIN;
  int mikS = 0;
  int milS = 0;
  const uint32_t TOP = 1000000;
  
  void setup() {
    pinMode(LED, HIGH);
  }
  
  void loop() {
      delayNanoseconds(16);
      if (mikS >= 1000){
        milS++;
        mikS = 0;
     }     
          
     // calculate 1 sec  //I can change this operation by this if (milS >= 1000) then do something...
     if ((milS * mikS) >= TOP){  // Here I lose 1 cycle when the milS = 1 & mikS = 0, but it nothing
      digitalWrite(LED, !digitalRead(LED));
      milS = 0;
     }
  }   
   
  void delayNanoseconds(byte nsec){
    if (nsec == 0) return; 
    while (nsec > 0){
      asm volatile("nop \n\t"); 
      nsec--;
    }   
     mikS++;
  }