我们知道在windows等操作系统里可以调用API函数获取系统运行的时间。在Arduino里也有两个函数millis()和micros(),可以分别获得Arduino程序从上电以来累计运行时间的毫秒数和微秒数。我们可以利用51单片机的定时器中断实现这个功能。
具体实现的思路是设置1个长整型的全局时间变量sysRunmillis保存单片机上电后的运行时间。让定时器每1毫秒产生1次中断,在中断响应函数里让全局变量sysRunmillis自加1。这个长整型的变量最大值是4294967295毫秒,换算下来就是49天17时2分47秒,然后从0开始继续计时。
这样我们可以在程序里随时读取当前时间,实现精确计时、软件延时等功能。比如要延时n毫秒,我们可以用下面的代码实现:
Void delaynmillis(unsigned int n)
{
Unsigned long t;
t=sysRunmillis;//先保存当前时间
While(sysRunmillis-t<n);循环等待直到n毫秒
}
下面的程序实时显示51单片机上电运行的时间,其中大部分代码用来实现在动态数码管上显示时间。
/*
利用定时器中断实现51单片机输出系统上电累计运行时间
****李兰林,2020年12月6日,甘肃白银
*/
#include <reg51.h>
#in