找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1233|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

C語(yǔ)言程序中如何獲得自加時(shí)的值?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:997026 發(fā)表于 2022-4-5 21:48 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
有如下C語(yǔ)言程序,我想知道當(dāng)trigger_IO被拉低時(shí),此時(shí)process_cnt在中斷里自加到哪個(gè)數(shù)了?大概的代碼應(yīng)該怎么寫?請(qǐng)教各位大神!
因?yàn)閜rocess_cnt一直在自加,數(shù)值是變化的,當(dāng)process_cnt>5時(shí),自加到某一個(gè)值,如果發(fā)生trigger_IO被拉低,此時(shí)process_cnt的值是多少(想知道的是process_cnt的初值,也就是trigger_IO被拉低的瞬間,process_cnt的值是多少)?代碼應(yīng)該怎么寫呢?

unsigned char   process_cnt=0;
unsigned char   trigger_IO=0;
void    sum_process1();
void    sum_process2();

int main(void)
{
   if (process_cnt<=5)
    {
        sum_process1();
    }
    else
    {
      if(!trigger_IO)
      {
         sum_process2();
         //此處需要知道當(dāng)trigger_IO被拉低時(shí),process_cnt自加到哪個(gè)值了?
      }
    }
}


ISR(timer_vect)  //定時(shí)器中斷,1s進(jìn)一次中斷
{
  process_cnt ++;
if(process_cnt==1000)
{
    process_cnt=0;
}
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2022-4-5 22:57 | 只看該作者
開多一個(gè)變數(shù)如process_cnt_tigger
//此處需要知道當(dāng)trigger_IO被拉低時(shí),process_cnt自加到哪個(gè)值了?
process_cnt_tigger = process_cnt;

然后就用方法去顯示process_cnt_tigger如:
串口
數(shù)碼管
LCD1602/12864/OLED
回復(fù)

使用道具 舉報(bào)

板凳
ID:997026 發(fā)表于 2022-4-5 23:26 | 只看該作者
本帖最后由 hxdby 于 2022-4-5 23:27 編輯
lkc8210 發(fā)表于 2022-4-5 22:57
開多一個(gè)變數(shù)如process_cnt_tigger
//此處需要知道當(dāng)trigger_IO被拉低時(shí),process_cnt自加到哪個(gè)值了?
p ...

我想到的也是這種方法,但是遺憾的是我這里不能用到LCD,串口和數(shù)碼管這些,可能是我沒說清楚,其實(shí)我只需要捕獲到trigger_IO拉低時(shí),process_cnt初值(不需要管這個(gè)初值具體值多少,只需要捕獲到,然后保存就可以)就行了。
舉個(gè)例子,假設(shè)trigger_IO拉低時(shí),process_cnt的值剛好是7,然后trigger_IO拉低了5s, process_cnt從7開始連續(xù)自加到12.  我只需要捕獲到拉低瞬間的初值7,后面的值不用管;蛘邠Q句話說,我甚至不需要知道這個(gè)初值是不是7或其他什么值都無所謂,這不重要,我只需要捕獲到這個(gè)初值并保存就可以,只要知道我捕獲的這個(gè)是trigger_IO拉低時(shí),process_cnt初值就行,有什么方法?感謝
回復(fù)

使用道具 舉報(bào)

地板
ID:883242 發(fā)表于 2022-4-5 23:46 | 只看該作者
hxdby 發(fā)表于 2022-4-5 23:26
我想到的也是這種方法,但是遺憾的是我這里不能用到LCD,串口和數(shù)碼管這些,可能是我沒說清楚,其實(shí)我只需 ...

在sum_process2();之前直接讀process_cnt的值就行了,為什么你不去讀?
回復(fù)

使用道具 舉報(bào)

5#
ID:997026 發(fā)表于 2022-4-6 10:12 | 只看該作者
本帖最后由 hxdby 于 2022-4-6 10:17 編輯
Hephaestus 發(fā)表于 2022-4-5 23:46
在sum_process2();之前直接讀process_cnt的值就行了,為什么你不去讀?

我直接設(shè)置一個(gè)變量temp=process_cnt保存這個(gè)初值,其實(shí)我的應(yīng)用場(chǎng)景是,要在trigger_IO拉低時(shí),先執(zhí)行sum_process2(), 然后過5s在執(zhí)行另一個(gè)程序,大概這樣:

if(!trigger_IO)
      {
         unsigned int temp;
         temp=process_cnt; //捕獲process_cnt初值
         sum_process2();  //實(shí)際發(fā)現(xiàn)執(zhí)行到這里結(jié)束了,下面的沒有執(zhí)行,trigger_IO拉低的時(shí)間是夠的
         if(process_cnt==(temp+5)) //延遲5s
         {
           state_change=1;  
         }         
      }

感覺這樣寫是有問題的,因?yàn)閜rocess_cnt的值在不斷變,但是又不知道如何寫才能實(shí)現(xiàn)這個(gè)功能。補(bǔ)充一下,sum_process2()執(zhí)行的時(shí)間是極短的,內(nèi)部只是一個(gè)關(guān)閉LED的動(dòng)作。
回復(fù)

使用道具 舉報(bào)

6#
ID:161164 發(fā)表于 2022-4-6 11:40 | 只看該作者
其實(shí)你只是想用process_cnt來做延時(shí)
說得那么復(fù)雜干什么
開多一個(gè)全局變數(shù)bit Trigger_flag=0;

if(!trigger_IO)
      {
         unsigned int temp;
         temp=process_cnt; //捕獲process_cnt初值
Trigger_flag=1;
         sum_process2();  //實(shí)際發(fā)現(xiàn)執(zhí)行到這里結(jié)束了,下面的沒有執(zhí)行,trigger_IO拉低的時(shí)間是夠的
         
      }

把下面的代碼放到外面的while(1)里
if(Trigger_flag)
{
if(process_cnt>=(temp+5)) //延遲5s
         {
           state_change=1;  
Trigger_flag=0;
         }         
}
回復(fù)

使用道具 舉報(bào)

7#
ID:997026 發(fā)表于 2022-4-6 19:40 | 只看該作者
lkc8210 發(fā)表于 2022-4-6 11:40
其實(shí)你只是想用process_cnt來做延時(shí)
說得那么復(fù)雜干什么
開多一個(gè)全局變數(shù)bit Trigger_flag=0;

感謝指點(diǎn)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表