tft每日頭條

 > 職場

 > 單片機最基本原理

單片機最基本原理

職場 更新时间:2025-01-19 12:50:08

單片機最基本原理(一張圖基本搞清楚單片機的工作原理)1

圖1

這張圖第一眼看過去,可能會讓人覺得頭皮發麻,但稍微想一下,其實并不複雜。

這裡以定時器中斷T0為例。先看

單片機最基本原理(一張圖基本搞清楚單片機的工作原理)2

圖2

定時器(也就是計數器)T0到達PT0H之前,先要經過TF0,開關ET0和開關EA。事實上,TF0也是一個開關,那麼,為了讓定時器T0的中斷順利到達PT0H,這三個開關就必須都閉合。

為什麼說TF0也是一個開關呢?注意到TF0所在的那一列,一共有8位,這8位剛好可以用一個寄存器來保存和控制,這個寄存器就叫做定時器控制寄存器:

單片機最基本原理(一張圖基本搞清楚單片機的工作原理)3

圖3

圖3和TF0所在的那一列不是完全相同,我們暫且不管。這個TF0其實是定時器0的溢出中斷标志位 ,當T0從初值開始加1計數到産生溢出時,由硬件使TF0置1,也就是說,TF0等于1的時候(相當于這個開關接通)表示T0(一個8位寄存器)這個定時器(計數器)已經由8個0通過加1計數變成了8個1,再加1将産生溢出。這個時候就會引起CPU硬件複位,讓T0重新變成8個0。那麼,TF0等于1的作用其實相當于把T0這個寄存器重新置0,當然,重新置0之後這個開關又重新斷開。

再看ET0所在的那一列。這一列同樣由一個寄存器來控制,叫做中斷允許控制寄存器IE:

單片機最基本原理(一張圖基本搞清楚單片機的工作原理)4

圖4

那麼,将ET0這個開關閉合,就隻要将寄存器IE中的那一位置1就可以了。ET0置1以後,就相當于定時器T0所引起的操作已經被CPU允許了。

再看圖1中EA所在的那一列。這一列的所有開關要麼全斷開,要麼全閉合。全斷開的時候,CPU不響應任何中斷;全閉合的時候,CPU響應全部中斷。所以,EA叫做中斷允許控制位。至此,圖1中左邊的三個開關已經解釋清楚了,那麼右邊的呢?

右邊的更簡單了。我們注意到,圖1中一共有六個不同的中斷源:定時器T0,T1和T2,外中斷0和外中斷1,還有一個串口中斷。這六個不同的中斷源要是同時産生中斷請求怎麼辦呢?這個時候就有一個優先級的問題,那麼

單片機最基本原理(一張圖基本搞清楚單片機的工作原理)5

圖5

優先級就由PT0H和PT0這兩位來設置:

單片機最基本原理(一張圖基本搞清楚單片機的工作原理)6

圖6

也就是說,六個不同的中斷源中的任何一個,都可以通過這兩位設置成0到3中的任何一個優先級。再看圖1中任何一個優先級的左邊

單片機最基本原理(一張圖基本搞清楚單片機的工作原理)7

圖7

是不是都有6根連線?

通過上述解釋,圖1就可以這樣簡單理解:

一個中斷源如果想得到CPU的響應,就必須先閉合左邊的三個開關,再按照被設定的優先級順序進行響應。

是不是很簡單?

當定時器T0中斷經過左邊三個開關以及優先級設定後,到達圖7的位置以後,這個時候就要把定時器T0的中斷服務程序的入口地址放到CPU的PC寄存器裡邊以便執行這個中斷程序。

最後以一個簡單的定時器程序來說明:

MOV TMOD,A ; 将工作方式控制字寫入TMOD

MOV TL0, #9CH ; 送初值

MOV TH0, #9CH ; 送重裝初值,這個程序的前三句是設定定時器T0的初值,可以不管

SETB ET0 ; 圖1中的ET0開關閉合,允許定時器T0中斷

SETB EA ; 圖1中EA開關閉合,CPU允許全部中斷

SETB TR0 ; 啟動定時器T0,這一句和圖1中的TF0開關閉合不同,可以這樣理解:TF0開關 閉合是讓計數器T0重新變成0,這個過程是自動進行的;而計數器T0重新變成0 以後,要重新開始計數,TR0置1就是啟動這個過程。

HERE: SJMP HERE ; 循環等待,當計數器T0沒有變成全1的時候重複執行這個指令,就是 空轉

; 定時器T0的中斷服務程序

CTC0: 當計數器T0變成全1的時候 ,将 CTC0這個中斷程序的入口地址送人PC寄存 器

CPL P1.7

這個程序的作用是在P1.7引腳輸出周期為200 μs的方波,所以中斷程序隻有一句,就是對P1.7引腳的電壓不斷進行取反操作。

上面程序的編寫思路是這樣的:主程序中設置好中斷發生的所有條件,即把該閉合的開關閉合,然後啟動定時器,等待定時器計數,當定時器計數未滿時,主程序空轉;當計數器滿了以後,相當于圖1中最左邊的那個開關TF0閉合,從而将中斷程序的入口地址CTC0送入PC讓CPU執行,并同時将計數器清0。

當中斷程序執行完成以後(執行了一遍CPL P1.7指令),CPU又回到主程序的空轉指令

HERE: SJMP HERE ;繼續等待,這個時候因為計數器已經重新清0并已經開始重新計數(定時器隻要啟動一次),并且TFo這個開關已經重新斷開,所以主程序就在那裡等待計數器下一次計滿溢出,如此周而複始。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关職場资讯推荐

热门職場资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved