找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 624|回复: 6
打印 上一主题 下一主题
收起左侧

C语言程序中如何获得自加时的值?

[复制链接]
跳转到指定楼层
楼主
ID:997026 发表于 2022-4-5 21:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有如下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;
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2022-4-5 22:57 | 只看该作者
开多一个变数如process_cnt_tigger
//此处需要知道当trigger_IO被拉低时,process_cnt自加到哪个值了?
process_cnt_tigger = process_cnt;

然后就用方法去显示process_cnt_tigger如:
串口
数码管
LCD1602/12864/OLED
回复

使用道具 举报

板凳
ID:997026 发表于 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初值就行,有什么方法?感谢
回复

使用道具 举报

地板
ID:883242 发表于 2022-4-5 23:46 | 只看该作者
hxdby 发表于 2022-4-5 23:26
我想到的也是这种方法,但是遗憾的是我这里不能用到LCD,串口和数码管这些,可能是我没说清楚,其实我只需 ...

在sum_process2();之前直接读process_cnt的值就行了,为什么你不去读?
回复

使用道具 举报

5#
ID:997026 发表于 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的动作。
回复

使用道具 举报

6#
ID:161164 发表于 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;
         }         
}
回复

使用道具 举报

7#
ID:997026 发表于 2022-4-6 19:40 | 只看该作者
lkc8210 发表于 2022-4-6 11:40
其实你只是想用process_cnt来做延时
说得那么复杂干什么
开多一个全局变数bit Trigger_flag=0;

感谢指点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表