用定时器当达到十分钟后产生中断 |
开一个定时器,使用变量计数,每到十分钟,标志位置位,执行一次程序代码清标志,如此循环 |
if 加条件比较就行。 |
设置一个定时器,然后采用循环方式就可以了 |
定时器+计数器,计数到需要的时间就进去这个语句执行一次 |
打个比方,设置定时器3每秒中断一次,在中断中将全局变量加1,在主循环中判断该变量是否大于等于600(即10分钟),判断成立即执行相应程序并清零该变量 |
使用硬件定时器即可 |
你把需要10分钟执行一次的代码放到一个10分钟的定时器里面执行就可以了 |
用一个定时器计算每次main的循环所需要的时间,然后累加,大于等于10分钟就执行,然后将累加的时间清零继续 |
/**把需要定时发送的模块放在if语句中,时间达到10分钟则执行一次,否则跳过。**/ if (n>=12000) //n=12000=10分钟 { ......; //需要定时发送的模块 n=0; } /****************************************************************************** ** 函数功能 : 定时器初始化子程序 ******************************************************************************/ void Init_Timer0(void) //定时器初始化子程序 { TMOD = 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出 TL0=0x00; EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 } /******************************************************************************* ** 函数功能 : 定时器中断程序 *******************************************************************************/ void Timer0_isr(void) interrupt 1 using 1 { TH0=0x00; //重新赋值,方式1是16位计数器,不能硬件重装初始值 TL0=0x00; // LED=0X08; //指示灯反相,可以看到闪烁 n++; // if (n>100) // LED = ~LED; } |
先定义一个变量T=0,再用定时器,到你想要的时间后,将T=1,关闭定时器,在while(1){if(T==1){红色区域内代码;T=0;开启定时器;}} |
先定义一个变量T=0, 用定时器,定时到你想要的时间后,将变量T=1,再在while(1){} |
每次循环,拿现在的时间和你保存的时间比,超过10s, 把当前时间保存,运行你的函数。如果不到10s,忽略,继续跑其他函数。大循环时间长,10s的精度就会差,如果要准确的10s,你要放中断里做了。 |
加一个计数器,用定时器中断给这个计数器+1。 循环里面判断上次运行到现在计数器增加了多少,如果达到你的10分钟的计数值,就运行程序,同时记录这次运行后的计数器值。 |
定时器+计数器,计数到需要的时间就进去这个语句执行一次 |
建议使用定时器,加计时变量。 ~~~~~~~~~~ |
打开一个定时器,定时器里面每10分钟就设定一个标志:while里面查标志位,有标志就发送一次即可 |