定時器初探

2021-07-03 08:23:22 字數 1106 閱讀 8287

了解了定時器相關的暫存器,那麼我們下面就來做乙個定時器的程式,鞏固一下我們學到的內容。我們這節課的程式先使用定時器

0,在使用定時器的時候,需要以下幾個步驟:

第一步:設定特殊功能暫存器

tmod,配置好工作模式。

第二步:設定計數暫存器

th0 和 tl0 的初值。

第三步:設定

tcon,通過 tr0 置 1 來讓定時器開始計數。

第四步:判斷

tcon 暫存器的 tf0 位,監測定時器溢位情況。

寫程式之前,我們要先來學會計算如何用定時器定時時間。我們的晶振是

11.0592m,時鐘週期就是 1/11059200,機器週期是 12/11059200,假如要定時 20ms,就是 0.02 秒,要經過x 個機器週期得到0.02 秒,我們來算一下 x*12/11059200=0.02,得到 x= 18432。16 位定時器的溢位值是 65536(因 65535 再加 1 才是溢位),於是我們就可以這樣操作,先給 th0 和 tl0乙個初始值,讓它們經過 18432 個機器週期後剛好達到 65536,也就是溢位,溢位後可以通過檢測 tf0 的值得知,就剛好是 0.02 秒。那麼初值 y = 65536 - 18432= 47104,轉成 16 進製就是 0xb800,也就是 th0 = 0xb8,tl0 = 0x00。

這樣0.02 秒的定時我們就做出來了,細心的同學會發現,如果初值直接給乙個 0x0000,一直到 65536 溢位,定時器定時值最大也就是 71ms 左右,那麼我們想定時更長時間怎麼辦呢?用你小學學過的邏輯,倍數關係就可以解決此問題。

好了,我們下面就用程式來實現這個功能。

/*

**此程式的作用是使連在p00口的led毎1s閃爍一次。

*/ #include/*假設有乙個led在p00這個引腳上*/

sbitled =p0^0;

voidmain()}}

}

程式中都寫了注釋,結合前面兩章學的內容,自己分析一下,不難理解。本程式實現的結果是開發板上最右邊的小燈點亮一秒,熄滅一秒,也就是以

0.5hz 的頻率進行閃爍。

這個程式主要的目的是讓讀者學會配置定時器的步驟和方式,為以後它的使用打下基礎。

Mysql 檢視定時器 開啟定時器 設定定時器時間

1.檢視是否開啟evevt與開啟evevt。1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。show variables like sche 1.2 開啟evevt功能 setglobal event scheduler 1 ...

定時器 STM32定時器 基本定時器1

我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...

Mysql 檢視定時器 開啟定時器 設定定時器時間

1 1.檢視是否開啟evevt與開啟evevt。23 1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。4 show variables like sche 5 1.2 開啟evevt功能 6 set global event ...