Описание функции micros
Функция micros() возвращает количество микросекунд с момента начала выполнения на плате ардуино текущей программы. Значение переполняется и сбрасывается на ноль примерно через 70 минут. Более того, на платах ардуино с частотой 16 МГц функция имеет разрешение 4 секунды (возвращаемое значение всегда кратно 4), на платах с частотой 8 МГц разрешение функции – 8 секунд.
Синтаксис
unsigned long micros()
Параметры
нет
Что возвращает
Количество микросекунд с момента начала выполнения программы.
Пример функции micros
void setup() {
Serial.begin(9600);
Serial.println(micros()); // Выводим количество микросекунд, прошедших после запуска МК
delayMicroseconds(1000); // Приостанавливаем работу МК на 1000 микросекунд
Serial.println(micros()); // Выводим количество микросекунд, прошедших после запуска МК
}
Этот простой пример описан в функции setup().
- Мы сперва инициализируем последовательный порт
Serial.begin(9600);. - Далее выводим значение в порт, которое нам вернула функция
micros()– это значение равно 8 микросекундам. - Делаем паузу длительностью 1000 микросекунд функцией delayMicroseconds.
- Повторяем шаг 2: снова выводим количество микросекунд. На этот раз оно равняется 1084 микросекундам.
Код функции micros
(hardware/arduino/avr/cores/arduino/wiring.c 1.8.10)
unsigned long micros() {
unsigned long m;
uint8_t oldSREG = SREG, t;
cli();
m = FastLED_timer0_overflow_count; // ._long;
#if defined(TCNT0)
t = TCNT0;
#elif defined(TCNT0L)
t = TCNT0L;
#else
#error TIMER 0 not defined
#endif
#ifdef TIFR0
if ((TIFR0 & _BV(TOV0)) && (t < 255))
m++;
#else
if ((TIFR & _BV(TOV0)) && (t < 255))
m++;
#endif
SREG = oldSREG;
return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
}



