微控制器C簡單定時計數元件

2021-08-07 07:31:40 字數 1830 閱讀 2352

微控制器程式設計能使用的系統資源相比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 兩個引腳的狀態,要達到一定的次數 一般是記脈...