电子说
一、
触发器很多时候是很有用的,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;
}
全部0条评论
快来发表一下你的评论吧 !