久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8994|回復: 17
打印 上一主題 下一主題
收起左側

C語言如何在while循環內讓一個語句每隔10分鐘運行一次,其他正常循環

  [復制鏈接]
跳轉到指定樓層
樓主
5黑幣
代碼萌新,最近在看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)

1562028826(1).jpg

最佳答案

查看完整內容

打開一個定時器,定時器里面每10分鐘就設定一個標志:while里面查標志位,有標志就發送一次即可
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:158375 發表于 2019-7-2 08:58 | 只看該作者
打開一個定時器,定時器里面每10分鐘就設定一個標志:while里面查標志位,有標志就發送一次即可
回復

使用道具 舉報

板凳
ID:277550 發表于 2019-7-2 10:05 | 只看該作者
建議使用定時器,加計時變量。

~~~~~~~~~~
回復

使用道具 舉報

地板
ID:10947 發表于 2019-7-2 10:34 | 只看該作者
定時器+計數器,計數到需要的時間就進去這個語句執行一次
回復

使用道具 舉報

5#
ID:155467 發表于 2019-7-2 11:01 | 只看該作者

加一個計數器,用定時器中斷給這個計數器+1。
循環里面判斷上次運行到現在計數器增加了多少,如果達到你的10分鐘的計數值,就運行程序,同時記錄這次運行后的計數器值。
回復

使用道具 舉報

6#
ID:571958 發表于 2019-7-2 11:13 | 只看該作者
每次循環,拿現在的時間和你保存的時間比,超過10s, 把當前時間保存,運行你的函數。如果不到10s,忽略,繼續跑其他函數。大循環時間長,10s的精度就會差,如果要準確的10s,你要放中斷里做了。
回復

使用道具 舉報

7#
ID:265458 發表于 2019-7-2 11:14 | 只看該作者
先定義一個變量T=0, 用定時器,定時到你想要的時間后,將變量T=1,再在while(1){}
回復

使用道具 舉報

8#
ID:265458 發表于 2019-7-2 11:19 | 只看該作者
先定義一個變量T=0,再用定時器,到你想要的時間后,將T=1,關閉定時器,在while(1){if(T==1){紅色區域內代碼;T=0;開啟定時器;}}
回復

使用道具 舉報

9#
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;

}
回復

使用道具 舉報

10#
ID:576804 發表于 2019-7-3 02:27 | 只看該作者
用一個定時器計算每次main的循環所需要的時間,然后累加,大于等于10分鐘就執行,然后將累加的時間清零繼續
回復

使用道具 舉報

11#
ID:576726 發表于 2019-7-3 10:11 | 只看該作者
你把需要10分鐘執行一次的代碼放到一個10分鐘的定時器里面執行就可以了
回復

使用道具 舉報

12#
ID:577031 發表于 2019-7-3 11:52 | 只看該作者
使用硬件定時器即可
回復

使用道具 舉報

13#
ID:577031 發表于 2019-7-3 11:54 | 只看該作者
打個比方,設置定時器3每秒中斷一次,在中斷中將全局變量加1,在主循環中判斷該變量是否大于等于600(即10分鐘),判斷成立即執行相應程序并清零該變量
回復

使用道具 舉報

14#
ID:577140 發表于 2019-7-3 14:40 | 只看該作者
定時器+計數器,計數到需要的時間就進去這個語句執行一次
回復

使用道具 舉報

15#
ID:577104 發表于 2019-7-3 14:44 | 只看該作者
設置一個定時器,然后采用循環方式就可以了
回復

使用道具 舉報

16#
ID:307505 發表于 2019-7-3 15:32 | 只看該作者
if 加條件比較就行。
回復

使用道具 舉報

17#
ID:431026 發表于 2019-7-3 16:24 | 只看該作者
開一個定時器,使用變量計數,每到十分鐘,標志位置位,執行一次程序代碼清標志,如此循環
回復

使用道具 舉報

18#
ID:518788 發表于 2019-7-3 16:48 | 只看該作者
用定時器當達到十分鐘后產生中斷
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩亚洲视频 | 成人免费激情视频 | 在线播放中文字幕 | 在线观看毛片网站 | 亚洲综合大片69999 | 精品少妇一区二区三区日产乱码 | 毛片免费观看 | 欧美一区二 | 91精品国产综合久久久久久首页 | 看真人视频一级毛片 | 羞羞视频网页 | 亚洲a视频 | 日韩福利一区 | avav在线看| 国产日韩视频在线 | 99热这里都是精品 | 日日骚av| 国产亚洲精品久久情网 | 成人久久久久久久久 | 国产成人精品网站 | 午夜视频一区二区 | 国产在线拍偷自揄拍视频 | 亚洲精品成人av久久 | www久久爱 | 99久久影院| 午夜视频网站 | 91不卡在线 | 夜夜爽99久久国产综合精品女不卡 | 国产精品视频97 | 国产福利在线小视频 | 国产欧美精品一区二区 | 亚洲美女网站 | 欧美三级三级三级爽爽爽 | 久国产精品 | 在线观看中文字幕 | 日本一区二区三区免费观看 | 亚洲精品久久久久国产 | 久一精品| 色狠狠一区 | 欧美高清视频一区 | 在线观看中文字幕亚洲 |