【问题标题】:is there a way to wait for something without interrupt the execution of other code?有没有办法在不中断其他代码执行的情况下等待某事?
【发布时间】:2022-06-15 20:40:34
【问题描述】:

我必须编写一个函数,只需调用一次,就必须:

  • 打开一个输出引脚

  • 引脚保持高电平 200mS

  • 在定时器结束时,引脚需要再次为低电平。

  • 引脚保持低电平 200mS

  • 在计时器结束时,可以再次调用该函数。

打开和关闭我已经编写并测试了功能的输出引脚:

outOn(pin_id);

outOff(pin_id);

现在,我正在尝试编写执行上述操作的函数,这就是我迄今为止提出的:

void outOnT02(enum e_outs ou){
    
    outOn(ou);
    gu_RegTim.BTime[BTIM_FUNCT].Timer = O_SEC01*2; 
    
    if(gu_RegTim.BTime[BTIM_FUNCT].b.Stato == O_EndTimer) {
        outOff(ou);
    }
}

函数被命名为outOnT02,因为:

  • 这是一个输出;
  • 调用后pin变高了;
  • T02 因为引脚保持高电平 0.2 秒。

outOn(ou); 使引脚变高,

outOff(ou); 使引脚变为低电平,

gu_RegTim.BTime[BTIM_FUNCT].Timer = O_SEC01*2; 启动一个 200 毫秒的计时器,

当计时器用完时,gu_RegTim.BTime[BTIM_FUNCT].b.Stato == O_EndTimer 为真。

它可以工作,但正如你所知道的,我必须把它放在一个循环中,否则gu_RegTim.BTime[BTIM_FUNCT].b.Stato == O_EndTimer 永远不会是真的,所以,pin 将永远保持高电平。

这就是我卡住的地方。我不能使用SLEEP(200);,因为我不能中断代码的执行。

语言是C,ide是MPLAB X IDE v6.00,编译器是XC8 v2.31,cpu是PIC16F15355。

【问题讨论】:

  • C 和 C++ 是不同的语言,看起来 C++ 标记不适合您的问题。
  • 你有操作系统吗?还是这是裸机开发?
  • @JohnFilleau PIC = 裸机;这是一个具有 14k 程序空间的微控制器。

标签: c timer output mplab-x


猜你喜欢
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 2010-11-04
  • 2015-11-02
  • 1970-01-01
相关资源
最近更新 更多