// Code from How Fast Does Your Arduino Code Run?
// https://youtu.be/tnfeMCyLZSo
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
// Set up Timer 1 to count every single clock cycle
TCCR1A = 0;
TCCR1B = 1 << CS10;
TCNT1 = 0;
/* Code under test */
// digitalWrite(LED_BUILTIN, HIGH);
//PORTB = bit(5);
for (byte i = 0; i < 20; i++) _NOP(); //N x NOPs
// bitWrite(PORTB, 5, 0);
//bitWrite(PORTB, 5, !bitRead(PORTB, 5) );
//digitalWrite(5, !digitalRead(5) );
/* End of code under test */
// Print the result
unsigned int value = TCNT1;
Serial.print("Cycles: ");
Serial.println(value - 2);
Serial.print("Microseconds: ");
Serial.println((float)(value - 2) / 16);
}
void loop()
{
//bitWrite(PORTB, 5, !bitRead(PORTB, 5) ); //Toggle @ 3.22 Mhz
digitalWrite(5, !digitalRead(5) ); //Toggle @ 0.105 Mhz
}