       dataPin.write(data & bit);
       clockPin.toggle();
       clockPin.toggle();
-      __asm__ __volatile__("nop");
     }
   }
   stop = RTC::micros();
   ns = (stop - start);
   INFO("pin.write/toggle():%ul us", ns  / 1000L);
+  
+  start = RTC::micros();
+  for (uint16_t i = 0; i < 1000; i++) {
+    uint8_t data = 0x55;
+    for(uint8_t bit = 0x80; bit; bit >>= 1) {
+      synchronized {
+	dataPin._write(data & bit);
+	clockPin._toggle();
+	clockPin._toggle();
+      }
+    }
+  }
+  stop = RTC::micros();
+  ns = (stop - start);
+  INFO("pin._write/_toggle():%ul us", ns  / 1000L);
   
   start = RTC::micros();
   for (uint16_t i = 0; i < 1000; i++) {

    dataPin.write(data & 0x01);
    clockPin.toggle();
    clockPin.toggle();
    __asm__ __volatile__("nop");
  }
  stop = RTC::micros();
  ns = (stop - start);

      __asm__ __volatile__("nop");
    }
  stop = RTC::micros();
  baseline = ns = (stop - start) / 1000L;
  INFO("nop:%ul ns\n", ns);

  INFO("Measure the time to perform 1,000 input pin reads", 0);
