51模組_定時器與中斷

青雲志發表於2020-09-28

定時器 暫存器相關

表 ① 定時具體值
名稱描述SFR地址
TH0定時器 0 高位元組8CH
TL0定時器 0 低位元組8AH
TH1定時器 1 高位元組8DH
TL1定時器 1 低位元組8BH
表 ② TCON-定時器/計數器控制暫存器的位分配(地址:88H)

可位定址;復位值:0x00;復位源:任何復位

76543210
符號TF1TR1TF0TR0IE1IT1IE0IT0
表 2.1 TCON-位描述
符號描述
7TF1定時器1溢位標誌:一旦定時器1發生溢位時硬體置1,它不會對定時器是否繼續執行產生任何影響。
清零有兩種方式:軟體清零,或者進入定時器中斷時硬體清零。
6TR1定時1執行控制位。
軟體置位/清零來進行啟動/關閉定時器
5TF0定時器0溢位標誌。一旦定時器0發生溢位時硬體置1,它不會對定時器是否繼續執行產生任何影響。
清零有兩種方式:軟體清零,或者進入定時器中斷時硬體清零。
4TR0定時1執行控制位。
軟體置位/清零來進行啟動/關閉定時器
3IE1
2IT1
1IE0
0IT0
表 ③ TMOD–定時器方式控制暫存器的位分配(地址 89H)

不可位定址;復位值:0x00;復位源:任何復位

76543210
符號GATE
(T1)
C/T
(T1)
M1
(T1)
M0
(T1)
GATE
(T0)
C/T
(T0)
M1
(T0)
M0
(T0)
表 3.1 TMOD-位描述
符號描述
7 / 4GATE該位被置1時為門控位,僅當’INTx’腳為高,且’TRx’控制位被置1時使能定時器’x’,定時器開始計時;
當該位被清0時,只要’TRx’位被置1,定時器x就使能開始計時,不受到微控制器引腳’INTx’外部訊號的干擾,常用來測量外部訊號脈衝寬度。
這是定時器一個額外功能,即GATE為1時,定時器需要TRx和外部中斷INTx同時啟用才執行。
6 / 3C/T定時器或計數器選擇位。該位被清零時用作定時器功能(內部系統時鐘),被置1用作計數器功能。
M1M0工作模式描述
000THn的8位和TLn的5位組成一個13位定時器,
相容8048微控制器的13位定時器
011THn和TLn組成一個16位的定時器
1028位自動重灌模式,定時器溢位後THn重灌到TLn中
113禁用定時器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;復位源:任何復位

76543210
符號EAET2ESET1EX1ET0EX0
表 1.1 IE-位描述
符號描述
7EA總中斷使能位,相當於總開關
6
5ET2定時器2中斷使能
4ES串列埠中斷使能
3ET1定時器1溢位中斷使能
2EX1外部中斷1使能
1ET0定時器0溢位中斷使能
0EX0外部中斷0使能
表 ② 中斷函式
描述中斷標誌中斷使能中斷使能中斷使能
外部中斷0IE0EX00003H1(最高)
T0中斷TF0ET0000BH2
外部中斷1IE1EX10013H3
T1中斷TF1ET1001BH4
UART中斷TI/RIES0023H5
T2中斷TF2/EXF2ET2002BH6

這個表格同樣不需要大家記住,需要的時候過來查就可以了。我們現在看第二行T0中斷,它的中斷標誌是TF0,也就是當TF0變成1的時候,就會觸發中斷。而在interrupt後邊的數字x的計算方法是 x*8+3=向量地址,T0的向量地址是000BH,那麼我們可以求得x的值是1。這樣這個中斷函式名字我們就徹底明白了。

表 ③ 中斷優先順序
  • 可位定址;復位值:0x00;復位源:任何復位*
76543210
符號PT2PSPT1PX1PT0PX0
表 1.1 IP-位描述
符號描述
7
6
5PT2定時器2中斷優先順序控制位
4PS串列埠中斷優先順序控制位
3PT1定時器1中斷優先順序控制位
2PX1外部中斷1中斷優先順序控制位
1PT0定時器0…
0PX0外部中斷0…

相關文章