标题:
C语言如何在while循环内让一个语句每隔10分钟运行一次,其他正常循环
[打印本页]
作者:
13588195971
时间:
2019-7-2 08:58
标题:
C语言如何在while循环内让一个语句每隔10分钟运行一次,其他正常循环
代码萌新,最近在看STM32单片机,还没有看完全,但是现在需要用到,所以来求助一下各位:如何在while循环内让一个语句每隔10分钟运行一次,其他正常循环。如图红色区域的语句是需要每十分钟发送一次的。
单片机C语言源程序如下:
while(1){
proRS485();
proTask();
p=(u8*)DO_autocalib;
Send2RSSENCE(p,13);
return (EXIT_SUCCESS);
}
感谢~~
1562028826(1).jpg
(5.27 KB, 下载次数: 103)
下载附件
2019-7-2 08:54 上传
作者:
笨笨兔
时间:
2019-7-2 08:58
打开一个定时器,定时器里面每10分钟就设定一个标志:while里面查标志位,有标志就发送一次即可
作者:
devcang
时间:
2019-7-2 10:05
建议使用定时器,加计时变量。
~~~~~~~~~~
作者:
lfc315
时间:
2019-7-2 10:34
定时器+计数器,计数到需要的时间就进去这个语句执行一次
作者:
单片学子
时间:
2019-7-2 11:01
加一个计数器,用定时器中断给这个计数器+1。
循环里面判断上次运行到现在计数器增加了多少,如果达到你的10分钟的计数值,就运行程序,同时记录这次运行后的计数器值。
作者:
lihaijun7781
时间:
2019-7-2 11:13
每次循环,拿现在的时间和你保存的时间比,超过10s, 把当前时间保存,运行你的函数。如果不到10s,忽略,继续跑其他函数。大循环时间长,10s的精度就会差,如果要准确的10s,你要放中断里做了。
作者:
lhl139679
时间:
2019-7-2 11:14
先定义一个变量T=0, 用定时器,定时到你想要的时间后,将变量T=1,再在while(1){}
作者:
lhl139679
时间:
2019-7-2 11:19
先定义一个变量T=0,再用定时器,到你想要的时间后,将T=1,关闭定时器,在while(1){if(T==1){红色区域内代码;T=0;开启定时器;}}
作者:
swk51
时间:
2019-7-2 16:20
/**把需要定时发送的模块放在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;
}
作者:
lehwa
时间:
2019-7-3 02:27
用一个定时器计算每次main的循环所需要的时间,然后累加,大于等于10分钟就执行,然后将累加的时间清零继续
作者:
殊途同归19
时间:
2019-7-3 10:11
你把需要10分钟执行一次的代码放到一个10分钟的定时器里面执行就可以了
作者:
laok321
时间:
2019-7-3 11:52
使用硬件定时器即可
作者:
laok321
时间:
2019-7-3 11:54
打个比方,设置定时器3每秒中断一次,在中断中将全局变量加1,在主循环中判断该变量是否大于等于600(即10分钟),判断成立即执行相应程序并清零该变量
作者:
W1107182774
时间:
2019-7-3 14:40
定时器+计数器,计数到需要的时间就进去这个语句执行一次
作者:
houcong
时间:
2019-7-3 14:44
设置一个定时器,然后采用循环方式就可以了
作者:
yachcs
时间:
2019-7-3 15:32
if 加条件比较就行。
作者:
追一抹月光
时间:
2019-7-3 16:24
开一个定时器,使用变量计数,每到十分钟,标志位置位,执行一次程序代码清标志,如此循环
作者:
二狼神666
时间:
2019-7-3 16:48
用定时器当达到十分钟后产生中断
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1