圖1
這張圖第一眼看過去,可能會讓人覺得頭皮發(fā)麻,但稍微想一下,其實并不復(fù)雜。
這里以定時器中斷T0為例。先看
圖2
定時器(也就是計數(shù)器)T0到達(dá)PT0H之前,先要經(jīng)過TF0,開關(guān)ET0和開關(guān)EA。事實上,TF0也是一個開關(guān),那么,為了讓定時器T0的中斷順利到達(dá)PT0H,這三個開關(guān)就必須都閉合。
為什么說TF0也是一個開關(guān)呢?注意到TF0所在的那一列,一共有8位,這8位剛好可以用一個寄存器來保存和控制,這個寄存器就叫做定時器控制寄存器:
圖3圖3和TF0所在的那一列不是完全相同,我們暫且不管。這個TF0其實是定時器0的溢出中斷標(biāo)志位 ,當(dāng)T0從初值開始加1計數(shù)到產(chǎn)生溢出時,由硬件使TF0置1,也就是說,TF0等于1的時候(相當(dāng)于這個開關(guān)接通),表示T0(一個8位寄存器)這個定時器(計數(shù)器)已經(jīng)由8個0通過加1計數(shù)變成了8個1,再加1將產(chǎn)生溢出。這個時候就會引起CPU硬件復(fù)位,讓T0重新變成8個0。那么,TF0等于1的作用其實相當(dāng)于把T0這個寄存器重新置0,當(dāng)然,重新置0之后這個開關(guān)又重新斷開。
再看ET0所在的那一列。這一列同樣由一個寄存器來控制,叫做中斷允許控制寄存器IE:
圖4
那么,將ET0這個開關(guān)閉合,就只要將寄存器IE中的那一位置1就可以了。ET0置1以后,就相當(dāng)于定時器T0所引起的操作已經(jīng)被CPU允許了。
再看圖1中EA所在的那一列。這一列的所有開關(guān)要么全斷開,要么全閉合。全斷開的時候,CPU不響應(yīng)任何中斷;全閉合的時候,CPU響應(yīng)全部中斷。所以,EA叫做中斷允許控制位。至此,圖1中左邊的三個開關(guān)已經(jīng)解釋清楚了,那么右邊的呢?
右邊的更簡單了。我們注意到,圖1中一共有六個不同的中斷源:定時器T0,T1和T2,外中斷0和外中斷1,還有一個串口中斷。這六個不同的中斷源要是同時產(chǎn)生中斷請求怎么辦呢?這個時候就有一個優(yōu)先級的問題,那么
圖5
優(yōu)先級就由PT0H和PT0這兩位來設(shè)置:
圖6
也就是說,六個不同的中斷源中的任何一個,都可以通過這兩位設(shè)置成0到3中的任何一個優(yōu)先級。再看圖1中任何一個優(yōu)先級的左邊
圖7
是不是都有6根連線?
通過上述解釋,圖1就可以這樣簡單理解:
一個中斷源如果想得到CPU的響應(yīng),就必須先閉合左邊的三個開關(guān),再按照被設(shè)定的優(yōu)先級順序進行響應(yīng)。
是不是很簡單?
當(dāng)定時器T0中斷經(jīng)過左邊三個開關(guān)以及優(yōu)先級設(shè)定后,到達(dá)圖7的位置以后,這個時候就要把定時器T0的中斷服務(wù)程序的入口地址放到CPU的PC寄存器里邊以便執(zhí)行這個中斷程序。
最后以一個簡單的定時器程序來說明:
MOV TMOD,A ; 將工作方式控制字寫入TMOD
MOV TL0, #9CH ; 送初值
MOV TH0, #9CH ; 送重裝初值,這個程序的前三句是設(shè)定定時器T0的初值,可以不管
SETB ET0 ; 圖1中的ET0開關(guān)閉合,允許定時器T0中斷
SETB EA ; 圖1中EA開關(guān)閉合,CPU允許全部中斷
SETB TR0 ; 啟動定時器T0,這一句和圖1中的TF0開關(guān)閉合不同,可以這樣理解:TF0開關(guān) 閉合是讓計數(shù)器T0重新變成0,這個過程是自動進行的;而計數(shù)器T0重新變成0 以后,要重新開始計數(shù),TR0置1就是啟動這個過程。
HERE: SJMP HERE ; 循環(huán)等待,當(dāng)計數(shù)器T0沒有變成全1的時候重復(fù)執(zhí)行這個指令,就是 空轉(zhuǎn)
; 定時器T0的中斷服務(wù)程序
CTC0: 當(dāng)計數(shù)器T0變成全1的時候 ,將 CTC0這個中斷程序的入口地址送人PC寄存 器
CPL P1.7
這個程序的作用是在P1.7引腳輸出周期為200 μs的方波,所以中斷程序只有一句,就是對P1.7引腳的電壓不斷進行取反操作。
上面程序的編寫思路是這樣的:主程序中設(shè)置好中斷發(fā)生的所有條件,即把該閉合的開關(guān)閉合,然后啟動定時器,等待定時器計數(shù),當(dāng)定時器計數(shù)未滿時,主程序空轉(zhuǎn);當(dāng)計數(shù)器滿了以后,相當(dāng)于圖1中最左邊的那個開關(guān)TF0閉合,從而將中斷程序的入口地址CTC0送入PC讓CPU執(zhí)行,并同時將計數(shù)器清0。
當(dāng)中斷程序執(zhí)行完成以后(執(zhí)行了一遍CPL P1.7指令),CPU又回到主程序的空轉(zhuǎn)指令
HERE: SJMP HERE ;繼續(xù)等待,這個時候因為計數(shù)器已經(jīng)重新清0并已經(jīng)開始重新計數(shù)(定時器只要啟動一次),并且TFo這個開關(guān)已經(jīng)重新斷開,所以主程序就在那里等待計數(shù)器下一次計滿溢出,如此周而復(fù)始。
審核編輯:湯梓紅
-
單片機
+關(guān)注
關(guān)注
6030文章
44491瀏覽量
632045 -
寄存器
+關(guān)注
關(guān)注
31文章
5295瀏覽量
119839 -
定時器
+關(guān)注
關(guān)注
23文章
3232瀏覽量
114337
原文標(biāo)題:單片機工作原理,一張圖幾個步驟理解很清晰
文章出處:【微信號:電子技術(shù)控,微信公眾號:電子技術(shù)控】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論