找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

C语言如何在while循环内让一个语句每隔10分钟运行一次,其他正常循环

查看数: 9281 | 评论数: 17 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-7-2 08:58

正文摘要:

代码萌新,最近在看STM32单片机,还没有看完全,但是现在需要用到,所以来求助一下各位:如何在while循环内让一个语句每隔10分钟运行一次,其他正常循环。如图红色区域的语句是需要每十分钟发送一次的。 单片机C ...

回复

ID:518788 发表于 2019-7-3 16:48
用定时器当达到十分钟后产生中断
ID:431026 发表于 2019-7-3 16:24
开一个定时器,使用变量计数,每到十分钟,标志位置位,执行一次程序代码清标志,如此循环
ID:307505 发表于 2019-7-3 15:32
if 加条件比较就行。
ID:577104 发表于 2019-7-3 14:44
设置一个定时器,然后采用循环方式就可以了
ID:577140 发表于 2019-7-3 14:40
定时器+计数器,计数到需要的时间就进去这个语句执行一次
ID:577031 发表于 2019-7-3 11:54
打个比方,设置定时器3每秒中断一次,在中断中将全局变量加1,在主循环中判断该变量是否大于等于600(即10分钟),判断成立即执行相应程序并清零该变量
ID:577031 发表于 2019-7-3 11:52
使用硬件定时器即可
ID:576726 发表于 2019-7-3 10:11
你把需要10分钟执行一次的代码放到一个10分钟的定时器里面执行就可以了
ID:576804 发表于 2019-7-3 02:27
用一个定时器计算每次main的循环所需要的时间,然后累加,大于等于10分钟就执行,然后将累加的时间清零继续
ID:576466 发表于 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;

}
ID:265458 发表于 2019-7-2 11:19
先定义一个变量T=0,再用定时器,到你想要的时间后,将T=1,关闭定时器,在while(1){if(T==1){红色区域内代码;T=0;开启定时器;}}
ID:265458 发表于 2019-7-2 11:14
先定义一个变量T=0, 用定时器,定时到你想要的时间后,将变量T=1,再在while(1){}
ID:571958 发表于 2019-7-2 11:13
每次循环,拿现在的时间和你保存的时间比,超过10s, 把当前时间保存,运行你的函数。如果不到10s,忽略,继续跑其他函数。大循环时间长,10s的精度就会差,如果要准确的10s,你要放中断里做了。
ID:155467 发表于 2019-7-2 11:01

加一个计数器,用定时器中断给这个计数器+1。
循环里面判断上次运行到现在计数器增加了多少,如果达到你的10分钟的计数值,就运行程序,同时记录这次运行后的计数器值。
ID:10947 发表于 2019-7-2 10:34
定时器+计数器,计数到需要的时间就进去这个语句执行一次
ID:277550 发表于 2019-7-2 10:05
建议使用定时器,加计时变量。

~~~~~~~~~~
ID:158375 发表于 2019-7-2 08:58
打开一个定时器,定时器里面每10分钟就设定一个标志:while里面查标志位,有标志就发送一次即可

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表