當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]從定時器開始說中斷什么叫中斷?這個對于剛進入MCU界的人來說是一個難以了解的問題,因為我第一次學(xué)單片機的時候就不完全不了解什么叫中斷。后來慢慢來知道原來中斷是單片機運行到一半突然飛到某個地方運行某些東西運

定時器開始說中斷什么叫中斷?這個對于剛進入MCU界的人來說是一個難以了解的問題,因為我第一次學(xué)單片機的時候就不完全不了解什么叫中斷。后來慢慢來知道原來中斷是單片機運行到一半突然飛到某個地方運行某些東西運行后又飛回來而已。

后來學(xué)著學(xué)著就了解到中斷的意義了,不過對于第一次接觸單片機的人來說,還是很難解說的清楚的。

所以這里我做個比喻吧。假設(shè)你客廳的電話來電時,有鈴聲和閃光提示,而你在房間看書,那么有電話來的時候,你聽到鈴聲,然后放下手上的書,并用書簽記錄你的頁數(shù),再出去聽電話。聽完后,回到房間,從書簽標(biāo)記的位置繼續(xù)看你的書。

OK,分析上面的幾個動作,電話響并被你聽到,那是中斷來了;你用書簽標(biāo)記位置,那是現(xiàn)場保護;聽電話,就是執(zhí)行中斷咯;聽完電話,你要從你剛才標(biāo)記的地方繼續(xù)看書,那就是中斷執(zhí)行完畢后回到原中斷處繼續(xù)執(zhí)行程序。這個就是中斷的過程了。

假設(shè)沒有了中斷的話,你會如何?你會用掃描法:電話不會響鈴了,只有閃光,但你必須在房間看書,那你只能每看幾段,就跑出去看看是否有電話到,如果沒有,就跑回去看書,如果有了,那你就聽電話吧。很明顯,掃描法效率非常低,因為你每看一會書就得花時間看看電話的閃光以判斷是否有電話的到來,這樣你看書的效率就大大減低了。而且掃描法還有個最大的缺點,就是中斷丟失,試想如果你掃描的間隔過大(就是看很久書才去看一下電話),那你極有可能丟了幾個重要的來電。

其實上面的比喻,正能很好地表現(xiàn)中斷的作用——其實中斷就是為了處理突發(fā)事件。

對于單片機來說,突發(fā)的事情實在太多了,例如用戶對單片機輸入數(shù)據(jù),按鍵,那都是單片機本身無法估計的事情。外來數(shù)據(jù)的突然進入,也屬于突發(fā)事件。這些外部來的突發(fā)信號,一般就由單片機的外部中斷來處理。外部中斷其實就是一個管腳的狀態(tài)改變引起的中斷,在之后會說。

這里先介紹定時器和定時器中斷:

在測量控制系統(tǒng)中,常常需要實時時鐘,以實現(xiàn)定時控制、定時測量或定時中斷等。也常需要計數(shù)器以實現(xiàn)對外部事件的計數(shù)。MCS-51單片機中有兩個(增強型有三個)十六位的定時計數(shù)器T0,T1,簡稱定時器0和定時器1,兩者均為可編程定時計數(shù)器。

——以上P話抄自《單片微型計算機與接口技術(shù)》94頁第一段-_-#!!!!!

其實你問清楚什么叫定時器,我真的不知道用什么言語來說。剛學(xué)的時候,聽過這樣一句話“定時器是單片機上的寶貴資源”,當(dāng)時不了解,為什么這個資源是寶貴的呢??后來才慢慢知道定時器的偉大所在。當(dāng)然這個是需要一定的時間來領(lǐng)悟的咯,在這里你還是踏踏實實地往下看吧:)

一開始我就說了,看本教材的時候你手上需要至少一本單片機的基礎(chǔ)書,什么書隨便買本就是了,反正現(xiàn)在的單片機書啊,都是你抄我我抄你的了,都一個樣,最重要的還是例子吧。拿起你的書看看單片機的中斷寄存器和定時器寄存器吧,咱們要開始寫程序咯,時間是不等人D~~~~

單片機方式0是13位的,從來就沒用過,有16位不用你用13位?真浪費也~~~

然后是計算裝入值,16位啊,就是16位2進制,2的16次方,就是65536了。16位定時器就是從某個所謂的裝入值開始自加,加到65536就計滿,如果你允許定時器中斷,那就有中斷來臨。所以16位方式裝入值的計算很簡單:

65536-你要計算的脈沖數(shù)=裝入值

但我們一般是要定時時間的,而不是單單計多少個脈沖,所以你要計算的脈沖數(shù)要轉(zhuǎn)化為時間,跟你說,一個脈沖的時間就是一個機器周期,51的機器周期就是12/晶振值。如果你的晶振是12M那么這樣一除就是1US咯。1US整數(shù),算什么都好算,所以你現(xiàn)在知道為什么這么多12M,24M的晶振買了吧,都是為51準(zhǔn)備的咯。

#i nclude "reg51.h"

void initTimer(void)

{

TMOD=0x1;

TH0=0xd8;

TL0=0xf0;

}

void timer0(void) interrupt 1

{

TH0=0xd8;

TL0=0xf0;

//add your code here.

}

void main(void)

{

initTimer();

TR0=1;

ET0=1;

EA=1;

while(1);

}

上面的代碼是12M晶振下定時10000US的程序,也就是10MS發(fā)生一次中斷。initTimer()是初始化函數(shù),設(shè)置定時值和中斷的。

10000US在12M晶振下就是100000個機器周期了,65536-100000=55536=D8F0(十六進制),所以上面就是TH0=0xd8;TL0=0xf0;

void timer0(void) interrupt 1就是定時器0中斷函數(shù),我們不需要理會匯編的中斷先,只需要知道當(dāng)中斷來臨的時候,程序就自動跳到timer0(void)這個函數(shù)運行了,運行完后就會回到原來中斷處繼續(xù)執(zhí)行原先的程序。

interrupt是C51中的關(guān)鍵字,后面跟有interrupt的函數(shù)都是中斷函數(shù),那么對應(yīng)哪個中斷呢?請大家參考:一開始為大家介紹的 Keil Software –Cx51 編譯器用戶手冊 中文完整版,(名字太長了,以后叫KEIL手冊)的第125頁。

中斷號 中斷地址

0 0003H

1 000BH

2 0013H

3 001BH

4 0023H

5 002BH

6 0033H

7 003BH

8 0043H

9 004BH

10 0053H

11 005BH

12 0063H

13 006BH

14 0073H

15 007BH

16 0083H

17 008BH

18 0093H

19 009BH

20 00A3H

21 00ABH

22 00B3H

23 00BBH

24 00C3H

25 00CBH

26 00D3H

27 00DBH

28 00E3H

29 00EBH

30 00F3H

31 00FBH

看到了吧,中斷號就是對應(yīng)中斷進入地址的,至于什么是中斷進入地址?那就是發(fā)生某個中斷的時候單片機自動跳進的一個地址段了.

對于定時器0來說,就是000BH,所以對應(yīng)中斷號1。其他中斷地址看看書就知道了。由上面的表可以看出,KEILC支持32個中斷,不過到現(xiàn)在為止,我還沒看到過有51單片機有32個中斷的:)

好了,進入調(diào)試實踐中了,把上面的代碼敲進去吧,又或者直接下載我這個編譯好的工程:

timer0

進入工程后,你需要設(shè)置點東西:

Debug Information是調(diào)試信息,你選擇這個東西,才可以在C語言上進行仿真(不管是軟還是硬仿真),否則你的仿真環(huán)境是匯編的!

軟仿真設(shè)置:

Go till main()就是在仿真的時候直接跳到MAIN函數(shù)上。如果沒有選,那就由0地址開始運行。這里說個概念,在C51中,mian()函數(shù)并不代表0地址的,要知道,keilc在一開始的時候是需要經(jīng)過比較多的初始化,例如清空RAM內(nèi)容,設(shè)置堆棧等東西,這些都是不需要你做的,你的用戶程序也不包括這些,做完這些初始化后,KEIL才自動跳到你的mian進行處理.

軟件仿真是可以選晶振的,我們選的12M。下面的這些東西你就按圖中的來選吧,具體內(nèi)容以后再說。

如果編譯成功的話,那么我們就開始第一次的軟件仿真咯:

上面的是已經(jīng)進入仿真狀態(tài)的了,因為我們選擇了Debug Information所以可以在C下面調(diào)試,也因為選擇了Go till main()我們可以看到一開始就有個箭頭指著main()的第一句話。而程序旁深色的東東,也就是我圈著的東西,就是有效代碼段,程序只會在那里跑,也就是那個黃色箭頭只會在那個區(qū)域跑。現(xiàn)在你已經(jīng)可以仿真的了,可以選單步,全速來運行了。關(guān)于KEIL的具體仿真,將在下一章為大家解說。

擴展閱讀:關(guān)于PIC24的DISI禁止中斷指令

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉