触发器功能函数实现

电子说

1.3w人已加入

描述

一、

触发器很多时候是很有用的,CAN总线或者串口周期发送一个信号,这个信号作为一个判断条件,当这个信号为有效信号时只需要执行一遍用户程序。

这里用触发器就会很好处理,有效信号为高电平那么做一个上升沿触发函数,有效信号为低电平那么做一个下降沿触发函数。

二、触发器功能实现

1、首先定义一个结构体

typedef struct _trig
{
    bool input;
    bool output;
    bool lastInput;
}trig_t;

C语言本身是没有bool类型的,我们可以自己定义一个或者使用#include 添加这个库。

2、上升沿函数

bool R_Trig(trig_t* trig)
{
    if((trig- >input==true) && (trig- >lastInput==false)) {
        trig- >output = true;
    } else {
        trig- >output = false;
    }
    trig- >lastInput = trig- >input;


    return trig- >output;
}

3、下降沿函数

bool F_Trig(trig_t* trig)
{
    if((trig- >input==false) && (trig- >lastInput==true)) {
        trig- >output = true;
    } else {
        trig- >output = false;
    }
    trig- >lastInput = trig- >input;


    return trig- >output;
}

4、使用例程

上升沿:

trig_t R = {0}; /* 定义一个结构体 R */
bool userVar = false; /* 定义一个用于接收总线信号的变量 */
int main()
{
  R.input = userVar;
  if( R_Trig(&R)) {
    /* 只执行一遍的用户代码 */
  }
  return 0;
}

下降沿:

trig_t F = {
            .input = true;
            .laseInput = true;
            }; /* 定义一个结构体 R */
bool userVar = true; /* 定义一个用于接收总线信号的变量 */
int main()
{
  F.input = userVar;
  if( F_Trig(&F)) {
    /* 只执行一遍的用户代码 */
  }
  return 0;
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分