熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2019-7-2 08:58
正文摘要:代碼萌新,最近在看STM32單片機(jī),還沒(méi)有看完全,但是現(xiàn)在需要用到,所以來(lái)求助一下各位:如何在while循環(huán)內(nèi)讓一個(gè)語(yǔ)句每隔10分鐘運(yùn)行一次,其他正常循環(huán)。如圖紅色區(qū)域的語(yǔ)句是需要每十分鐘發(fā)送一次的。 單片機(jī)C ... |
用定時(shí)器當(dāng)達(dá)到十分鐘后產(chǎn)生中斷 |
開(kāi)一個(gè)定時(shí)器,使用變量計(jì)數(shù),每到十分鐘,標(biāo)志位置位,執(zhí)行一次程序代碼清標(biāo)志,如此循環(huán) |
if 加條件比較就行。 |
設(shè)置一個(gè)定時(shí)器,然后采用循環(huán)方式就可以了 |
定時(shí)器+計(jì)數(shù)器,計(jì)數(shù)到需要的時(shí)間就進(jìn)去這個(gè)語(yǔ)句執(zhí)行一次 |
打個(gè)比方,設(shè)置定時(shí)器3每秒中斷一次,在中斷中將全局變量加1,在主循環(huán)中判斷該變量是否大于等于600(即10分鐘),判斷成立即執(zhí)行相應(yīng)程序并清零該變量 |
使用硬件定時(shí)器即可 |
你把需要10分鐘執(zhí)行一次的代碼放到一個(gè)10分鐘的定時(shí)器里面執(zhí)行就可以了 |
用一個(gè)定時(shí)器計(jì)算每次main的循環(huán)所需要的時(shí)間,然后累加,大于等于10分鐘就執(zhí)行,然后將累加的時(shí)間清零繼續(xù) |
/**把需要定時(shí)發(fā)送的模塊放在if語(yǔ)句中,時(shí)間達(dá)到10分鐘則執(zhí)行一次,否則跳過(guò)。**/ if (n>=12000) //n=12000=10分鐘 { ......; //需要定時(shí)發(fā)送的模塊 n=0; } /****************************************************************************** ** 函數(shù)功能 : 定時(shí)器初始化子程序 ******************************************************************************/ void Init_Timer0(void) //定時(shí)器初始化子程序 { TMOD = 0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響 TH0=0x00; //給定初值,這里使用定時(shí)器最大值從0開(kāi)始計(jì)數(shù)一直到65535溢出 TL0=0x00; EA=1; //總中斷打開(kāi) ET0=1; //定時(shí)器中斷打開(kāi) TR0=1; //定時(shí)器開(kāi)關(guān)打開(kāi) } /******************************************************************************* ** 函數(shù)功能 : 定時(shí)器中斷程序 *******************************************************************************/ void Timer0_isr(void) interrupt 1 using 1 { TH0=0x00; //重新賦值,方式1是16位計(jì)數(shù)器,不能硬件重裝初始值 TL0=0x00; // LED=0X08; //指示燈反相,可以看到閃爍 n++; // if (n>100) // LED = ~LED; } |
先定義一個(gè)變量T=0,再用定時(shí)器,到你想要的時(shí)間后,將T=1,關(guān)閉定時(shí)器,在while(1){if(T==1){紅色區(qū)域內(nèi)代碼;T=0;開(kāi)啟定時(shí)器;}} |
先定義一個(gè)變量T=0, 用定時(shí)器,定時(shí)到你想要的時(shí)間后,將變量T=1,再在while(1){} |
每次循環(huán),拿現(xiàn)在的時(shí)間和你保存的時(shí)間比,超過(guò)10s, 把當(dāng)前時(shí)間保存,運(yùn)行你的函數(shù)。如果不到10s,忽略,繼續(xù)跑其他函數(shù)。大循環(huán)時(shí)間長(zhǎng),10s的精度就會(huì)差,如果要準(zhǔn)確的10s,你要放中斷里做了。 |
加一個(gè)計(jì)數(shù)器,用定時(shí)器中斷給這個(gè)計(jì)數(shù)器+1。 循環(huán)里面判斷上次運(yùn)行到現(xiàn)在計(jì)數(shù)器增加了多少,如果達(dá)到你的10分鐘的計(jì)數(shù)值,就運(yùn)行程序,同時(shí)記錄這次運(yùn)行后的計(jì)數(shù)器值。 |
定時(shí)器+計(jì)數(shù)器,計(jì)數(shù)到需要的時(shí)間就進(jìn)去這個(gè)語(yǔ)句執(zhí)行一次 |
建議使用定時(shí)器,加計(jì)時(shí)變量。 ~~~~~~~~~~ |
打開(kāi)一個(gè)定時(shí)器,定時(shí)器里面每10分鐘就設(shè)定一個(gè)標(biāo)志:while里面查標(biāo)志位,有標(biāo)志就發(fā)送一次即可 |
Powered by 單片機(jī)教程網(wǎng)