從定時(shí)器開(kāi)始說(shuō)中斷
從定時(shí)器開(kāi)始說(shuō)中斷什么叫中斷?這個(gè)對于剛進(jìn)入MCU界的人來(lái)說(shuō)是一個(gè)難以了解的問(wèn)題,因為我第一次學(xué)單片機的時(shí)候就不完全不了解什么叫中斷。后來(lái)慢慢來(lái)知道原來(lái)中斷是單片機運行到一半突然飛到某個(gè)地方運行某些東西運行后又飛回來(lái)而已。
后來(lái)學(xué)著(zhù)學(xué)著(zhù)就了解到中斷的意義了,不過(guò)對于第一次接觸單片機的人來(lái)說(shuō),還是很難解說(shuō)的清楚的。
所以這里我做個(gè)比喻吧。假設你客廳的電話(huà)來(lái)電時(shí),有鈴聲和閃光提示,而你在房間看書(shū),那么有電話(huà)來(lái)的時(shí)候,你聽(tīng)到鈴聲,然后放下手上的書(shū),并用書(shū)簽記錄你的頁(yè)數,再出去聽(tīng)電話(huà)。聽(tīng)完后,回到房間,從書(shū)簽標記的位置繼續看你的書(shū)。
OK,分析上面的幾個(gè)動(dòng)作,電話(huà)響并被你聽(tīng)到,那是中斷來(lái)了;你用書(shū)簽標記位置,那是現場(chǎng)保護;聽(tīng)電話(huà),就是執行中斷咯;聽(tīng)完電話(huà),你要從你剛才標記的地方繼續看書(shū),那就是中斷執行完畢后回到原中斷處繼續執行程序。這個(gè)就是中斷的過(guò)程了。
假設沒(méi)有了中斷的話(huà),你會(huì )如何?你會(huì )用掃描法:電話(huà)不會(huì )響鈴了,只有閃光,但你必須在房間看書(shū),那你只能每看幾段,就跑出去看看是否有電話(huà)到,如果沒(méi)有,就跑回去看書(shū),如果有了,那你就聽(tīng)電話(huà)吧。很明顯,掃描法效率非常低,因為你每看一會(huì )書(shū)就得花時(shí)間看看電話(huà)的閃光以判斷是否有電話(huà)的到來(lái),這樣你看書(shū)的效率就大大減低了。而且掃描法還有個(gè)最大的缺點(diǎn),就是中斷丟失,試想如果你掃描的間隔過(guò)大(就是看很久書(shū)才去看一下電話(huà)),那你極有可能丟了幾個(gè)重要的來(lái)電。
其實(shí)上面的比喻,正能很好地表現中斷的作用——其實(shí)中斷就是為了處理突發(fā)事件。
對于單片機來(lái)說(shuō),突發(fā)的事情實(shí)在太多了,例如用戶(hù)對單片機輸入數據,按鍵,那都是單片機本身無(wú)法估計的事情。外來(lái)數據的突然進(jìn)入,也屬于突發(fā)事件。這些外部來(lái)的突發(fā)信號,一般就由單片機的外部中斷來(lái)處理。外部中斷其實(shí)就是一個(gè)管腳的狀態(tài)改變引起的中斷,在之后會(huì )說(shuō)。
在測量控制系統中,常常需要實(shí)時(shí)時(shí)鐘,以實(shí)現定時(shí)控制、定時(shí)測量或定時(shí)中斷等。也常需要計數器以實(shí)現對外部事件的計數。MCS-51單片機中有兩個(gè)(增強型有三個(gè))十六位的定時(shí)計數器T0,T1,簡(jiǎn)稱(chēng)定時(shí)器0和定時(shí)器1,兩者均為可編程定時(shí)計數器。
——以上P話(huà)抄自《單片微型計算機與接口技術(shù)》94頁(yè)第一段-_-#!!!!!
其實(shí)你問(wèn)清楚什么叫定時(shí)器,我真的不知道用什么言語(yǔ)來(lái)說(shuō)。剛學(xué)的時(shí)候,聽(tīng)過(guò)這樣一句話(huà)“定時(shí)器是單片機上的寶貴資源”,當時(shí)不了解,為什么這個(gè)資源是寶貴的呢??后來(lái)才慢慢知道定時(shí)器的偉大所在。當然這個(gè)是需要一定的時(shí)間來(lái)領(lǐng)悟的咯,在這里你還是踏踏實(shí)實(shí)地往下看吧:)
一開(kāi)始我就說(shuō)了,看本教材的時(shí)候你手上需要至少一本單片機的基礎書(shū),什么書(shū)隨便買(mǎi)本就是了,反正現在的單片機書(shū)啊,都是你抄我我抄你的了,都一個(gè)樣,最重要的還是例子吧。拿起你的書(shū)看看單片機的中斷寄存器和定時(shí)器寄存器吧,咱們要開(kāi)始寫(xiě)程序咯,時(shí)間是不等人D~~~~
單片機方式0是13位的,從來(lái)就沒(méi)用過(guò),有16位不用你用13位?真浪費也~~~
然后是計算裝入值,16位啊,就是16位2進(jìn)制,2的16次方,就是65536了。16位定時(shí)器就是從某個(gè)所謂的裝入值開(kāi)始自加,加到65536就計滿(mǎn),如果你允許定時(shí)器中斷,那就有中斷來(lái)臨。所以16位方式裝入值的計算很簡(jiǎn)單:
65536-你要計算的脈沖數=裝入值
但我們一般是要定時(shí)時(shí)間的,而不是單單計多少個(gè)脈沖,所以你要計算的脈沖數要轉化為時(shí)間,跟你說(shuō),一個(gè)脈沖的時(shí)間就是一個(gè)機器周期,51的機器周期就是12/晶振值。如果你的晶振是12M那么這樣一除就是1US咯。1US整數,算什么都好算,所以你現在知道為什么這么多12M,24M的晶振買(mǎi)了吧,都是為51準備的咯。
評論