一、
觸發(fā)器很多時(shí)候是很有用的,CAN總線或者串口周期發(fā)送一個(gè)信號(hào),這個(gè)信號(hào)作為一個(gè)判斷條件,當(dāng)這個(gè)信號(hào)為有效信號(hào)時(shí)只需要執(zhí)行一遍用戶程序。
這里用觸發(fā)器就會(huì)很好處理,有效信號(hào)為高電平那么做一個(gè)上升沿觸發(fā)函數(shù),有效信號(hào)為低電平那么做一個(gè)下降沿觸發(fā)函數(shù)。
二、觸發(fā)器功能實(shí)現(xiàn)
1、首先定義一個(gè)結(jié)構(gòu)體
typedef struct _trig
{
bool input;
bool output;
bool lastInput;
}trig_t;
C語(yǔ)言本身是沒(méi)有bool類型的,我們可以自己定義一個(gè)或者使用#include 添加這個(gè)庫(kù)。
2、上升沿函數(shù)
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、下降沿函數(shù)
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}; /* 定義一個(gè)結(jié)構(gòu)體 R */
bool userVar = false; /* 定義一個(gè)用于接收總線信號(hào)的變量 */
int main()
{
R.input = userVar;
if( R_Trig(&R)) {
/* 只執(zhí)行一遍的用戶代碼 */
}
return 0;
}
下降沿:
trig_t F = {
.input = true;
.laseInput = true;
}; /* 定義一個(gè)結(jié)構(gòu)體 R */
bool userVar = true; /* 定義一個(gè)用于接收總線信號(hào)的變量 */
int main()
{
F.input = userVar;
if( F_Trig(&F)) {
/* 只執(zhí)行一遍的用戶代碼 */
}
return 0;
}
-
CAN總線
+關(guān)注
關(guān)注
145文章
1977瀏覽量
132399 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140680 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2033瀏覽量
61947
發(fā)布評(píng)論請(qǐng)先 登錄
D觸發(fā)器/J-K觸發(fā)器的功能測(cè)試及其應(yīng)用

基本觸發(fā)器功能的描述

觸發(fā)器功能的模擬實(shí)現(xiàn)
基于CPLD的觸發(fā)器功能的模擬實(shí)現(xiàn)

jk觸發(fā)器實(shí)現(xiàn)74ls194功能

評(píng)論