通過前面的定時器理論了解到,使用乙個定時器,要經過下面四步:
1、設定定時器/計數器的工作模式tmod(常用的是模式1:tmod=0x01);
2、裝入預置數到thx和tlx中(thx=tlx=max(8192/65536/256)-計數次數);
3、如果工作在中斷方式,則需要開定時器/計數器的中斷tcon中的標誌位:tf0/tf1=0/1;
4、啟動定時器/計數器:tr0/tr1=1;
//1、設定定時器/計數器的工作模式tmod(常用的是模式1:tmod=0x01);
//2、裝入預置數到thx和tlx中(thx=tlx=max(8192/65536/256)-計數次數);
//3、如果工作在中斷方式,則需要開定時器/計數器的中斷tcon中的標誌位:tf0/tf1=0/1;
//4、啟動定時器/計數器:tr0/tr1=1;
//內容:通過定時讓led燈閃爍
#includesbit led=p0^2; //
定義led埠
//定時器初始化子程式
void init_timer0(void
)main()
//主程式
//定時器中斷子程式
//interrupt和using都是c51的關鍵字。c51中斷過程通過使用interrupt關鍵字和中斷號(0到31)來實現。
//using關鍵字用來指定中斷服務程式使用的暫存器組。
//用法是:using後跟乙個0到3的數,對應著4組工作暫存器。
void timer0_isr(void) interrupt 1
using
1
65536 * 1us = 65.536ms,也就是說上面的程式每經過65.536ms改變p0^2的狀態。
那麼如何實現1s的精確定時呢,在工作方式1下,我們將計數初什設定為0x3cb0(15536),當計數到上限65536時,經過了50000個脈衝,即 50000 * 1us = 50ms,如果經過這樣的計時20次,就正好達到了1s,為驗證是否正確,可將上面的**修改如下:
//1、設定定時器/計數器的工作模式tmod(常用的是模式1:tmod=0x01);
//2、裝入預置數到thx和tlx中(thx=tlx=max(8192/65536/256)-計數次數);
//3、如果工作在中斷方式,則需要開定時器/計數器的中斷tcon中的標誌位:tf0/tf1=0/1;
//4、啟動定時器/計數器:tr0/tr1=1;
//內容:通過定時讓led燈閃爍
#includesbit led=p0^2; //
定義led埠
unsigned int tm=0;//
定時器初始化子程式
void init_timer0(void
)main()
//主程式
//定時器中斷子程式
//interrupt和using都是c51的關鍵字。c51中斷過程通過使用interrupt關鍵字和中斷號(0到31)來實現。
//using關鍵字用來指定中斷服務程式使用的暫存器組。
//用法是:using後跟乙個0到3的數,對應著4組工作暫存器。
void timer0_isr(void) interrupt 1
using
1}
定時器 STM32定時器 基本定時器1
我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...
定時器編碼器模式
做乙個這樣的訊號檢測 根據ti1fp1的電平,計數器在ti2fp2的邊沿向上 下計數。1 計數器在ti2有上公升沿和下降沿變化 2 ti1為低時,計數器在ti2的上公升沿減小,下降沿增加 ti1為高時,計數器在ti2的上公升沿增加,下降沿減小 3 注意時tix而不是chx 4 與 tim3 cr1 ...
Mysql 檢視定時器 開啟定時器 設定定時器時間
1.檢視是否開啟evevt與開啟evevt。1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。show variables like sche 1.2 開啟evevt功能 setglobal event scheduler 1 ...