欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: C語言程序中如何獲得自加時的值? [打印本頁]

作者: hxdby    時間: 2022-4-5 21:48
標題: C語言程序中如何獲得自加時的值?
有如下C語言程序,我想知道當trigger_IO被拉低時,此時process_cnt在中斷里自加到哪個數了?大概的代碼應該怎么寫?請教各位大神!
因為process_cnt一直在自加,數值是變化的,當process_cnt>5時,自加到某一個值,如果發生trigger_IO被拉低,此時process_cnt的值是多少(想知道的是process_cnt的初值,也就是trigger_IO被拉低的瞬間,process_cnt的值是多少)?代碼應該怎么寫呢?

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();
         //此處需要知道當trigger_IO被拉低時,process_cnt自加到哪個值了?
      }
    }
}


ISR(timer_vect)  //定時器中斷,1s進一次中斷
{
  process_cnt ++;
if(process_cnt==1000)
{
    process_cnt=0;
}
}

作者: lkc8210    時間: 2022-4-5 22:57
開多一個變數如process_cnt_tigger
//此處需要知道當trigger_IO被拉低時,process_cnt自加到哪個值了?
process_cnt_tigger = process_cnt;

然后就用方法去顯示process_cnt_tigger如:
串口
數碼管
LCD1602/12864/OLED
作者: hxdby    時間: 2022-4-5 23:26
本帖最后由 hxdby 于 2022-4-5 23:27 編輯
lkc8210 發表于 2022-4-5 22:57
開多一個變數如process_cnt_tigger
//此處需要知道當trigger_IO被拉低時,process_cnt自加到哪個值了?
p ...

我想到的也是這種方法,但是遺憾的是我這里不能用到LCD,串口和數碼管這些,可能是我沒說清楚,其實我只需要捕獲到trigger_IO拉低時,process_cnt初值(不需要管這個初值具體值多少,只需要捕獲到,然后保存就可以)就行了。
舉個例子,假設trigger_IO拉低時,process_cnt的值剛好是7,然后trigger_IO拉低了5s, process_cnt從7開始連續自加到12.  我只需要捕獲到拉低瞬間的初值7,后面的值不用管。或者換句話說,我甚至不需要知道這個初值是不是7或其他什么值都無所謂,這不重要,我只需要捕獲到這個初值并保存就可以,只要知道我捕獲的這個是trigger_IO拉低時,process_cnt初值就行,有什么方法?感謝
作者: Hephaestus    時間: 2022-4-5 23:46
hxdby 發表于 2022-4-5 23:26
我想到的也是這種方法,但是遺憾的是我這里不能用到LCD,串口和數碼管這些,可能是我沒說清楚,其實我只需 ...

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

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

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

感覺這樣寫是有問題的,因為process_cnt的值在不斷變,但是又不知道如何寫才能實現這個功能。補充一下,sum_process2()執行的時間是極短的,內部只是一個關閉LED的動作。
作者: lkc8210    時間: 2022-4-6 11:40
其實你只是想用process_cnt來做延時
說得那么復雜干什么
開多一個全局變數bit Trigger_flag=0;

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

把下面的代碼放到外面的while(1)里
if(Trigger_flag)
{
if(process_cnt>=(temp+5)) //延遲5s
         {
           state_change=1;  
Trigger_flag=0;
         }         
}
作者: hxdby    時間: 2022-4-6 19:40
lkc8210 發表于 2022-4-6 11:40
其實你只是想用process_cnt來做延時
說得那么復雜干什么
開多一個全局變數bit Trigger_flag=0;

感謝指點




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1