Adding micros() function.

This commit is contained in:
David A. Mellis 2008-11-26 14:14:59 +00:00
parent 72980ac107
commit 950789ab74
3 changed files with 19 additions and 0 deletions

View File

@ -149,6 +149,7 @@ digitalWrite KEYWORD2 DigitalWrite
digitalRead KEYWORD2 DigitalRead
interrupts KEYWORD2
millis KEYWORD2 Millis
micros KEYWORD2 Micros
noInterrupts KEYWORD2
pinMode KEYWORD2 PinMode
pulseIn KEYWORD2 PulseIn

View File

@ -24,11 +24,13 @@
#include "wiring_private.h"
volatile unsigned long timer0_overflow_count = 0;
volatile unsigned long timer0_clock_cycles = 0;
volatile unsigned long timer0_millis = 0;
SIGNAL(TIMER0_OVF_vect)
{
timer0_overflow_count++;
// timer 0 prescale factor is 64 and the timer overflows at 256
timer0_clock_cycles += 64UL * 256UL;
while (timer0_clock_cycles > clockCyclesPerMicrosecond() * 1000UL) {
@ -51,6 +53,21 @@ unsigned long millis()
return m;
}
unsigned long micros() {
unsigned long m, t;
uint8_t oldSREG = SREG;
cli();
t = TCNT0;
if ((TIFR0 & _BV(TOV0)) && (t == 0))
t = 256;
m = timer0_overflow_count;
SREG = oldSREG;
return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
}
void delay(unsigned long ms)
{
unsigned long start = millis();

View File

@ -113,6 +113,7 @@ int serialRead(void);
void serialFlush(void);
unsigned long millis(void);
unsigned long micros(void);
void delay(unsigned long);
void delayMicroseconds(unsigned int us);
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);