微控制器程式設計能使用的系統資源相比pc端移動端的少很多,計畫定時任務需要使用定時器中斷還要考慮實現成本。一兩個定時任務還好,當定時任務一多管理起來就很麻煩。在使用plc後感覺plc的定時任務解決方案比較好,於是模仿著寫了乙個tim。
先立tim的結構體
#define tim_true 1
#define tim_false 0
typedef
struct tim;
有了結構體接下來需要計時子程式和檢查子程式來處理計時資料
//----計時子程式----
//tim:定時元件
void tim_clock(tim *tim) else
}}//----檢查子程式----
//tim:定時元件 en:開關 limit:定時時間
unsigned
char tim_check(tim *tim, unsigned
char en, unsigned
short limit)
tim->limit_time = limit;
}if (tim->clock_enable == tim_true) else
} else
}
程式很簡單,在定時任務和流程控制都能用上
51微控制器上的應用
#include
#include "tim.h"
sbit led1 = p1^0;
sbit led2 = p1^1;
sbit led3 = p1^2;
tim tim_delay;
tim tim_prc;
int prc = 0;
void timer0_init(void);
void main()
switch (prc)
break;
case
1: if (tim_check(&tim_prc, 1, 1000))
break;
default:
prc = 0;
break;}}
}void timer0_interrupt(void) interrupt 1
//12m晶振 1000微秒
void timer0_init(void)
stm32上的應用
#include "stm32f10x.h"
#include "tim.h"
tim tim_delay;
tim tim_prc;
extern
void tim2_config(void);
extern
void gpio_config(void);
int i = 0;
int prc = 0;
int main() else
if (i==1)
}switch (prc)
break;
case
1: if (tim_check(&tim_prc, 1, 1000))
break;
default:
prc = 0;
break;}}
}void tim2_irqhandler(void)
}//tim2 72m晶振 1000微秒
void tim2_config(void)
void gpio_config(void)
51微控制器的定時 計數器
實現led燈閃爍,如下 include 51微控制器標頭檔案 sbit led p0 0 定義特殊暫存器p0.0 注意 sbit 必須小寫 p 大寫!void main 在上面的程式中,使用for迴圈來實現延時功能,很簡單,但是存在問題 延時時間不準確 嚴重浪費cpu資源 所以我們要使用微控制器的定...
微控制器學習 定時 計數器(1)
1.什麼是定時 計數器?51微控制器中的定時器同時可以用作計數器,所以在此稱為定時 計數器,即它有實現這兩種功能的能力。定時 計數器的核心部件是乙個加法 也有減法 計數器,其本質是對脈衝進行計數。只是計數脈衝 不同 如果計數脈衝來自系統時鐘,則為定時方式,計數器的輸入脈衝是由晶振12分頻獲得 此時為...
51微控制器的中斷與定時計數器嘗試
這是我的第一篇有關51微控制器的部落格,主要記錄我的學習歷程與中間遇到的問題,如有錯漏請指出。在我理解裡面中斷與定時計數器是這樣的 中斷是通過檢查p3.2 int0 與p3.3 int1 兩個引腳來觸發的 計數器是通過檢查p3.4 t0 與p3.5 t1 兩個引腳的狀態,要達到一定的次數 一般是記脈...