标题: 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://www.51hei.com/bbs/) Powered by Discuz! X3.1