51模組_定時器與中斷
51模組_定時器與中斷
定時器 暫存器相關
表 ① 定時具體值
名稱 | 描述 | SFR地址 |
---|---|---|
TH0 | 定時器 0 高位元組 | 8CH |
TL0 | 定時器 0 低位元組 | 8AH |
TH1 | 定時器 1 高位元組 | 8DH |
TL1 | 定時器 1 低位元組 | 8BH |
表 ② TCON-定時器/計數器控制暫存器的位分配(地址:88H)
可位定址;復位值:0x00;復位源:任何復位
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
符號 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
表 2.1 TCON-位描述
位 | 符號 | 描述 |
---|---|---|
7 | TF1 | 定時器1溢位標誌:一旦定時器1發生溢位時硬體置1,它不會對定時器是否繼續執行產生任何影響。 清零有兩種方式:軟體清零,或者進入定時器中斷時硬體清零。 |
6 | TR1 | 定時1執行控制位。 軟體置位/清零來進行啟動/關閉定時器。 |
5 | TF0 | 定時器0溢位標誌。一旦定時器0發生溢位時硬體置1,它不會對定時器是否繼續執行產生任何影響。 清零有兩種方式:軟體清零,或者進入定時器中斷時硬體清零。 |
4 | TR0 | 定時1執行控制位。 軟體置位/清零來進行啟動/關閉定時器。 |
3 | IE1 | |
2 | IT1 | |
1 | IE0 | |
0 | IT0 |
表 ③ TMOD–定時器方式控制暫存器的位分配(地址 89H)
不可位定址;復位值:0x00;復位源:任何復位
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
符號 | GATE (T1) | C/T (T1) | M1 (T1) | M0 (T1) | GATE (T0) | C/T (T0) | M1 (T0) | M0 (T0) |
表 3.1 TMOD-位描述
位 | 符號 | 描述 |
---|---|---|
7 / 4 | GATE | 該位被置1時為門控位,僅當’INTx’腳為高,且’TRx’控制位被置1時使能定時器’x’,定時器開始計時; 當該位被清0時,只要’TRx’位被置1,定時器x就使能開始計時,不受到微控制器引腳’INTx’外部訊號的干擾,常用來測量外部訊號脈衝寬度。 這是定時器一個額外功能,即GATE為1時,定時器需要TRx和外部中斷INTx同時啟用才執行。 |
6 / 3 | C/T | 定時器或計數器選擇位。該位被清零時用作定時器功能(內部系統時鐘),被置1用作計數器功能。 |
M1 | M0 | 工作模式 | 描述 |
---|---|---|---|
0 | 0 | 0 | THn的8位和TLn的5位組成一個13位定時器, 相容8048微控制器的13位定時器 |
0 | 1 | 1 | THn和TLn組成一個16位的定時器 |
1 | 0 | 2 | 8位自動重灌模式,定時器溢位後THn重灌到TLn中 |
1 | 1 | 3 | 禁用定時器1,定時器0變成2個8位定時器 |
以上這4種模式的配置,
①、模式 0 是為了相容老的8048微控制器而設的,現在的51幾乎不會用到這種模式;
②、模式 1 就是THn和TLn組成了一個16位的定時器,取值範圍是0到65535,
溢位後,只要不對THn和TLn重新賦值,則從0開始計數。
③、模式 2 的功能是自動裝載,就是TLn溢位後,TFn就直接置1了,並且THn的值直接賦給TLn,然後TLn從新賦值的這個數字開始計數。
④、模式 3 他的功能模式2完全可以取代,所以基本上也是不用
定時器程式應用
使用步驟
第一步:設定特殊功能暫存器TMOD,配置好工作模式;
第二步:設定計數暫存器TH0和TL0的初值;
第三步:設定TCON,通過開啟TR0位來讓定時器開始計數。
第四步:判斷TCON暫存器的TF0位,監測定時器溢位情況。
如何用定時器定時時間。
我們的晶振是11.0592M,時鐘週期就是1/11059200,機器週期就是12/11059200,我們假如要定時20ms,就是0.02秒,要經過x個機器週期得到0.02秒,我們來算一下x*12/11059200=0.02,得到x= 18432。那麼我們現在16位的定時器溢位值是65536,我們可以這樣,先給TH0和TL0一個初值,讓他們經過18432個機器週期後剛好溢位,溢位後我們可以通過檢測TF0位得知,就剛好是0.02秒。
這個初值y = 65536 - 18432 = 47104,轉成16進位制就是0xB800,那麼就是TH0 = 0xB8,TL0 = 0x00。
那0.02秒我們已經定時出來了,細心的同學會發現,我們如果初值直接給一個0x0000,一直到65536溢位,定時器定時值最大也就是71ms左右,那麼我們想定時更長時間怎麼辦呢?用你小學學過的邏輯,倍數關係就可以解決此問題。
中斷暫存器
表 ① 中斷使能
不可位定址;復位值:0x00;復位源:任何復位
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
符號 | EA | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
表 1.1 IE-位描述
位 | 符號 | 描述 |
---|---|---|
7 | EA | 總中斷使能位,相當於總開關 |
6 | ||
5 | ET2 | 定時器2中斷使能 |
4 | ES | 串列埠中斷使能 |
3 | ET1 | 定時器1溢位中斷使能 |
2 | EX1 | 外部中斷1使能 |
1 | ET0 | 定時器0溢位中斷使能 |
0 | EX0 | 外部中斷0使能 |
表 ② 中斷函式
描述 | 中斷標誌 | 中斷使能 | 中斷使能 | 中斷使能 |
---|---|---|---|---|
外部中斷0 | IE0 | EX0 | 0003H | 1(最高) |
T0中斷 | TF0 | ET0 | 000BH | 2 |
外部中斷1 | IE1 | EX1 | 0013H | 3 |
T1中斷 | TF1 | ET1 | 001BH | 4 |
UART中斷 | TI/RI | ES | 0023H | 5 |
T2中斷 | TF2/EXF2 | ET2 | 002BH | 6 |
這個表格同樣不需要大家記住,需要的時候過來查就可以了。我們現在看第二行T0中斷,它的中斷標誌是TF0,也就是當TF0變成1的時候,就會觸發中斷。而在interrupt後邊的數字x的計算方法是 x*8+3=向量地址,T0的向量地址是000BH,那麼我們可以求得x的值是1。這樣這個中斷函式名字我們就徹底明白了。
表 ③ 中斷優先順序
- 可位定址;復位值:0x00;復位源:任何復位*
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
符號 | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
表 1.1 IP-位描述
位 | 符號 | 描述 |
---|---|---|
7 | ||
6 | ||
5 | PT2 | 定時器2中斷優先順序控制位 |
4 | PS | 串列埠中斷優先順序控制位 |
3 | PT1 | 定時器1中斷優先順序控制位 |
2 | PX1 | 外部中斷1中斷優先順序控制位 |
1 | PT0 | 定時器0… |
0 | PX0 | 外部中斷0… |
相關文章
- 原來定時器中斷是個偽中斷定時器
- 基於51微控制器的定時器定時器
- 51定時器/計數器齊上陣,借鑑定時器
- 一個不用定時器簡易51呼吸燈定時器
- 51微控制器定時器數碼管顯示定時器
- Linux裝置驅動之中斷與定時器Linux定時器
- Java可自定義中斷定時器的實現Java定時器
- 定時中斷基本結構
- 51微控制器內部定時器/計數器實驗定時器
- java 中定時器Java定時器
- Unix環境程式設計之定時、訊號與中斷程式設計
- 利用定時器實現51微控制器返回上電執行時間功能定時器
- 深入淺出:Linux裝置驅動之中斷與定時器Linux定時器
- JS字串與定時器JS字串定時器
- 蛻變成蝶:Linux裝置驅動之中斷與定時器Linux定時器
- VC中定時器的使用定時器
- Golang當中的定時器Golang定時器
- JMeter定時器設定延遲與同步JMeter定時器
- lua定時器與定時任務的介面設計定時器
- 51微控制器控制LCD1602模組
- 【GMT43智慧液晶模組】例程十一:通用定時器實驗——定時點亮LED定時器
- 【GMT43智慧液晶模組】例程四:SYSTICK定時器——定時讀取觸控值定時器
- iOS中的3種定時器iOS定時器
- spring中定時器的使用Spring定時器
- C#中的定時器(二)C#定時器
- Android中的定時器AlarmManagerAndroid定時器
- Qt中的定時器的使用QT定時器
- 【黑金ZYNQ7000系列原創視訊教程】04.熟悉ZYNQ內部中斷——內部定時器中斷實驗定時器
- 5、Angular中的$timeOut定時器Angular定時器
- 定時器定時器
- 定時器以及定時器的幾個案例定時器
- JavaScript定時器與執行機制解析JavaScript定時器
- .NET中如何實現高精度定時器定時器
- java中SpringBoot定時器註解JavaSpring Boot定時器
- Django(51)drf渲染模組原始碼分析Django原始碼
- iOS定時器iOS定時器
- JavaScript定時器JavaScript定時器
- js定時器JS定時器