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 digitalRead KEYWORD2 DigitalRead
interrupts KEYWORD2 interrupts KEYWORD2
millis KEYWORD2 Millis millis KEYWORD2 Millis
micros KEYWORD2 Micros
noInterrupts KEYWORD2 noInterrupts KEYWORD2
pinMode KEYWORD2 PinMode pinMode KEYWORD2 PinMode
pulseIn KEYWORD2 PulseIn pulseIn KEYWORD2 PulseIn

View File

@ -24,11 +24,13 @@
#include "wiring_private.h" #include "wiring_private.h"
volatile unsigned long timer0_overflow_count = 0;
volatile unsigned long timer0_clock_cycles = 0; volatile unsigned long timer0_clock_cycles = 0;
volatile unsigned long timer0_millis = 0; volatile unsigned long timer0_millis = 0;
SIGNAL(TIMER0_OVF_vect) SIGNAL(TIMER0_OVF_vect)
{ {
timer0_overflow_count++;
// timer 0 prescale factor is 64 and the timer overflows at 256 // timer 0 prescale factor is 64 and the timer overflows at 256
timer0_clock_cycles += 64UL * 256UL; timer0_clock_cycles += 64UL * 256UL;
while (timer0_clock_cycles > clockCyclesPerMicrosecond() * 1000UL) { while (timer0_clock_cycles > clockCyclesPerMicrosecond() * 1000UL) {
@ -51,6 +53,21 @@ unsigned long millis()
return m; 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) void delay(unsigned long ms)
{ {
unsigned long start = millis(); unsigned long start = millis();

View File

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