购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.6.4 时间函数

1.millis()

millis 函数用于获取单片机通电到现在运行的时间长度,单位是 ms,该函数返回值类型为无符号长整型(unsigned long)。系统最长的记录时间为9小时22分,如果超出将从0开始。

millis是一个无参数函数,适合作为定时器使用,不影响单片机的其他工作,而使用delay函数期间无法做其他工作。

延时10s后自动点亮接到引脚13的LED的示例程序清单如下:

int led=13;

unsigned long i,j;

void setup()

{

pinmode(led,output);

i-millis(); //读入初始值

}

void loop()

{

j=millis(); //不断读入当前时间值

if((j-i)>10000) //如果延时超过10s,则点亮LED

digitalwrite(LED,HIGH);

else

digitalwrite(LED,LOW);

}

注意:函数返回值unsigned long型,如果用int型保存时间将得到错误结果。

可以在开发环境的下列示例程序中找到Millis函数的应用:

Blink WithoutDelay.pde、Calbration.pde、ebounce.pde.

2.delay(ms)

delay函数是一个延时函数,参数表示延时时长,单位是ms。函数无返回值,原型如下:

void delay(unsigned long ms)

{

Uint16t-start=(uint16-t)micros();

While(ms>0)

{

If((uint16-t)micros()-start)>=1000)

{

Ms--;

Start+=1000;

}

}

可以在开发环境的下列示例程序中找到delay函数的应用:

ADXL3xx.pde、AnalogInput.pde、Blink.pde、Fading.pde、Graph.pde、Knock.pde、Loop.pde、Melody.pde、Memsic2125.pde、Ping.pde。

3.delayMicroseconds(µs)

delayMicroseconds函数也是延时函数,可以产生更短的延时,参数是延时的时长,单位是μs(微秒),其中1s=1000ms=1000000μs.

函数原型如下:

void deaymicroseconds(unsigned int us)

{

//for a one -microsecond delay,simply return.

//the overhead of the function call yields a delay of

//approximately 1 1/8 us.

if(--us==0)

return;

//the following loop takes a quarter of a microsecond (4 cycles)

//per iteration,so execute it four times for each

//microsecong of delay requested.

us<<=2;

//busy wait

-asm- -volatile-(

“1:sbiw %0,1””\n\t”//2 cycles

“brne 1b”:”=w”(us):”0”(us)//2 cycles

);

}

可以在开发环境中的下列示例程序中找到delayMicroseconds函数的应用:

Melody.pde、Ping.pde。

4.micros()

micros 函数用于返回开机到现在运行的微秒值,该函数返回值类型为无符号长整型(unsigned long),70分钟将溢出。

显示当前微秒值的示例程序清单如下:

unsigned long time;

void setup()

{

serial,bigin(9600);

}

void loop()

{

serial,print(“time:”);

time=micros(); //读取当前的微秒值

serial.println(time); //打印开机到目前运行的微秒值

delay(1000); //延时1s

} M+JSVb8/TnXvCWTA1REFu15exlCn03oRVfy7w9RZQTrd/OVMhjYaEoICeDHB/D+v

点击中间区域
呼出菜单
上一章
目录
下一章
×