導航:首頁 > 操作系統 > 單片機中斷系統實驗

單片機中斷系統實驗

發布時間:2025-07-27 21:11:57

㈠ 說明80C51單片機的中斷過程.

中斷響應

中斷響應就是單片機CPU對中斷源提出的中斷請求的接受。中斷請求被響應後,再經過一系列的操作,而後轉向中斷服務程序,完成中斷所要求的處理任務。下面簡要說明80c51的中斷響應過程:

1.外中斷采樣和內中斷置位

1.1外中斷采樣

-

要想知道外中斷是否有請求發生,需要對外中斷進行采樣。

當通過軟體將寄存器TCON的IT0(或IT1)位設置為0時,/INT0(或/INT1)為電平觸發方式,CPU在每個機器周期的S5P2(第五個狀態第2拍節)期間對/INT0(或/INT1)采樣,一旦在P3.2(或P3.3)上檢測到低電平時,則認為有外部中斷申請,隨即由硬體使TCON的IE0(或IE1)位置1,向CPU申請中斷。在中斷響應完成後轉向中斷服務子程序,再由硬體自動對IE0(或IE1)位清0.

當寄存器TCON的IT0(或IT1)位為1,/INT0(或/INT1)為脈沖觸發方式,則CPU在每個機器的S5P2期間對/INT0(或/INT1)采樣,當檢測到前一周期為高電平、後一周期為低電平時,由硬體使TCON的IE0(IE1)位置1,向CPU申請中斷,在中斷響應完成後轉向中斷服務子程序時,再由硬體自動對IE0(IE1)位清0.在邊沿觸發方式中,為保證CPU在兩個機器周期內檢測到由高到低的負跳變,高電平與低電平的持續時間不得少於一個機器周期的時間。

1.2內中斷置位

80c51把所有中斷標志都集中到TCON和SCON寄存器中。其中外中斷是使用采樣的方法把中斷請求鎖定在TCON寄存器的IE0(IE1)標志位上,而定時中斷和串列中斷的中斷請求由於都發生在晶元的內部,定時中斷可以直接去置位TCON的TF0(TF1),串列中斷可以直接去置位SCON的RI和TI。內中斷不存在采樣問題。

2.中斷查詢

所謂查詢,就是由CPU測試TCON和SCON中各標志位的狀態,以確定有沒有中斷請求發生以及是哪一個中斷請求。單片機是在每一個機器周期的最後狀態(S6),按優先順序順序對中斷請求標志進行查詢,即先查詢高級中斷後查詢低級中斷,同級中斷按「外部中斷0—定時中斷0—外部中斷1—定時中斷1—串列中斷」的順序查詢。如果查詢到有標志位為「1」,則表明有中斷請求發生,接著就從相鄰的下一個機器周期的S6狀態開始進行中斷響應。

由於中斷請求是隨機發生的,CPU無法預先得知,因此在程序執行過程中,中斷查詢要在指令執行的每個機器周期中不停地重復進行。換句話說,就相當於你在看書的時候,每一秒鍾都會抬起頭來聽一聽,看一看,是不是有人按門鈴,是否有電話,燒的開水是否開了。。。。。。看來,單片機比人蠢多了。

3.中斷響應

當查詢到有效的中斷請求時,緊接著就進行中斷響應。中斷響應時,根據寄存器TCON、SCON中的中斷標記,由硬體自動生成一條長調用指令LCALL XXXX,這里的XXXX就是程序存儲器中斷區中相應中斷的入口地址。對於80c51的5個獨立中斷源,這些入口地址已由系統設定。這樣在產生了相應的中斷以後,就可轉到相應的位置去執行。

例如,對於外部中斷0的響應,產生的長調用指令為

LCALL 0003H

生成LCALL指令後,緊接著就由CPU執行,首先將當前程序計數器PC的內容(准備執行的指令的地址)壓入堆棧以保護斷點,再將中斷入口地址裝入PC,使程序轉向相應的中斷區入口地址。從中斷源所對應的向量地址中可以看出,一個中斷向量入口地址到下一個中斷向量入口地址之間只有8個單元。也就是說,中斷服務程序的長度如果超過了8B,就會佔用下一個中斷的入口地址,導致出錯。但一般情況下,很少有一段中斷服務程序只佔用少於8B的情況,為此可以在中斷入口處寫一條「LJMPXXXX」或「AJMPXXXX」指令,這樣可以把實際處理中斷的程序放到ROM的任何一個位置。

例如,若採用外中斷0,在程序的開始處可以這樣寫:

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP INT_0

;以下是主程序

MAIN:

;以下是外中斷0服務程序

INT_0:

RETI

END


中斷服務程序完成後,一定要執行一條RETI指令,執行這條指令後,CPU將會把堆棧中保存著的地址取出,送回PC,那麼程序就會從主程序的中斷處繼續往下執行了。

說明 CPU所做的保護工作是很有限的,只保護了一個地址(主程序中斷處的地址),而其他的所有東西都不保護,所以如果你在主程序中用到了如A、DPTR、PSW等,在中斷程序中要用它們,還要保證回到主程序後這裡面的數據還是沒執行中斷以前的數據,就得自己保護起來。

-

CPU會在機器周期的S5P2階段讀入中斷標志,並在下一個機器周期中檢查,如果中斷條件成立時,系統會自行產生一個LCALL到相對應的中斷服務常式中,可是如果有下面3種情況時,系統是不會對中斷要求信號有反應的:

a有相等或更高級的中斷正在執行中,這與處理突發事件的狀況相同,既然已經在處理突發情況,當然就不再接受其他中斷條件,除非接下來的中斷情形的優先權比較高。

由此得到一個觀念:所有的中斷程序都應該盡量簡捷,一處理完中斷事項後立即回主程序,才不會佔用過多時間,進而影響系統的性能。

b目前的機器周期不是該指令的最後一個周期,由於80c51在指令執行時,分別有1個、2個和4個機器周期之分,也就是說,必須完全執行完此指令後,系統對中斷信號才會有所反應。比方說,當系統正在執行MULAB指令(需花4個機器周期)時,中斷信號必須出現在第4個機器周期上才算有效。這也就意味著,中斷信號必須持續足夠長的時間,以便80c51的CPU有時間去反應。

c若正在執行的指令為RETI或者是關於中斷設置IE、IP的指令時,對正好出現的中斷信號不反應,因為上述的情況剛好是某個中斷服務程序的結束,或是允許/禁止某個中斷的指令,當然是等到這些指令執行完畢後,才會對中斷信號有所反應,這些指令最多佔用兩個機器周期的時間,所以這時的中斷信號必須保持有兩個機器周期以上的時間,才能被80c51接受。

中斷的撤除

中斷響應後,TCON或SCON中的中斷請求標志應及時清除。否則就意味著中斷請求仍然存在,弄不好就會造成中斷的重復查詢和響應,因此就存在一個中斷請求的撤除問題。

1 定時器中斷請求的撤除

定時中斷響應後,硬體自動把標志位TF0(或TF1)清0,因此定時中斷的中斷請求是自動撤除的,不需要用戶干預。

2 串列中斷軟體撤除

對於串列中斷,CPU響應中斷後,沒有用硬體清除它們的中斷標志RI、TI,必須在中斷服務程序中用軟體清除,以撤除其中斷請求。

3 外中斷請求的撤除

外部中斷的撤除包括中斷標志位IE0(或IE1)的清0和外中斷請求信號的撤除。其中IE0(或IE1)清「0」是在中斷響應後由硬體電路自動完成的。剩下的只是外中斷引腳請求信號的撤除了。下面對脈沖和電平兩種觸發方式分別進行討論。

a對於脈沖方式的中斷請求,由於脈沖信號過後就消失了,也可以說中斷請求信號是自動撤除的。

b對於電平方式的外部中斷,中斷標志的撤除是自動的,但中斷請求信號的低電平可能繼續存在,在以後機器周期采樣時,又會把已清0的IE0或IE1標志位重新置1.為此,要徹底解決電平方式外中斷的撤除,除了標志位清0之外,必要時還需在中斷響應後把中斷請求信號引腳從低電平強制改變為高電平,為此,可在系統中增加如圖所示電路

外中斷請求標志撤除電路

從圖可以看出,外部中斷0請求信號在D觸發器(可選用74LS74)的時鍾輸入端。當外部設備有中斷請求信號(為低電平)出現時,Q端輸出為低電平,/INT0有效,向CPU發出中斷請求信號。CPU響應中斷後,在中斷服務程序中由軟體安排1個低電平中斷應答信號,從P1.0送至D觸發器的/SD(置位端,低電平有效),使D觸發器的Q端輸出為高電平,從而撤除了低電平的外中斷0請求信號。/SD端所需的低電平可通過在中斷服務程序中增加一下指令的得到:

ANLP1,#0FEH ;使P1.0輸出為低電平,D觸發器置位

在中斷服務程序中還要加上撤除外中斷0標志指令,即

CLRIE0 ;清外中斷標志,以便下次可再次中斷

可見,電平方式外部中斷請求信號的撤除是通過軟、硬體相結合的方法實現的。

㈡ 單片機定時中斷實驗

跟你理清一下思路,你的問題就解決了。首先,你的程序很簡單,就是讓發光二極體1秒亮1秒滅。因此,你前提是要定時1秒,但51單片機無法定時1秒,因此,你的程序就要定時50毫秒,每到了50毫秒,你就讓num自加1,當num加到20時,換句話說,已經定時50毫秒20次了,那就是1秒咯,所以此有led1=~led1;
//讓發光管狀態取反,達到程序目的。另外,定時50毫秒你要給th0和tl0賦給初值,因此
th0=(65536-45872)/256;
//重新裝載初值tl0=(65536-45872)%256;才會有這兩句,但定時50毫秒後,你的初值也會隨之消失,因此才會在void
t0_time()這個函數中重新賦初值。的確像你所說的初值是裝滿了開始執行中斷,其實從你tmod=0x01;
//設置定時器0位工作模式1(m1,m0位0,1)這句已經開始定時了,而賦初值是為了准確的定時50毫秒罷了。明白了沒有?
(其實你可以這樣理解,定時計數器就好比一個空的瓶子,當你給tmod=0x01時,水就開始一滴一滴的往瓶子你滴,當瓶子滿了的時候,中斷就發生了。假如從一個空的瓶子滴到滿的瓶子定時是80毫秒的話,可你只需要定時50毫秒就夠了,所以就要一開始往瓶子里倒水,使滴水的起點不是空瓶子,這就是賦初值的作用。當瓶子滿了後,瓶子就會自動清空,重新從零開始。而第二次你再想定時50毫秒,你就必須從新再往瓶子里倒水,這就是第二次賦初值的作用)

㈢ 單片機問題:利用中斷實現彩燈控制系統,當沒有下降沿出現時8個彩燈全滅,有下降沿時8個彩燈循

一、P1口是輸出還是輸入?
P1口是輸入:
如果你用的是89C51單片機的話,外部中斷是在P3.2和P3.3引腳,P1口是沒有的。所以,如果你既想用外部中斷又想用P1口做控制輸入端,就需要用「與(或)」邏輯電路從P1口導出中斷信號給P3.2和P3.3引腳。
P1口是輸出(也就是P1口的引腳連著LED燈):
用P3.2和P3.3引腳做外部中斷輸入引腳,相對比較方便。

二、外部中斷設置
如果用外部中斷的話,要設置IE、IP和TCON。也就是開啟對應中斷(IE中的對應位);設置中斷許可權(IP中的對應位);設置中斷觸發方式(TCON中的對應位)。
設置好後,在對應外部中斷子程序中添加「修改自定義標志位」的指令,然後在主程序中,根據自定義標志位的狀態,選擇LED燈的亮法。或者在對應外部中斷子程序中直接寫LED燈的控制指令(不推薦)。

三、匯編和C語言編程
如果用匯編:
應該在CODE:0003H或CODE:0013H添加「跳向中斷調用子程序」的跳轉指令,也就是寫好中斷向量表中的代碼。
如果是C語言:
應該在程序開頭聲明中斷子程序。

四、用中斷的沒現成的程序;掃按鍵電平,控制LED流水燈的倒是有。想要的話再聯系吧!

㈣ 單片機中斷系統使用步驟

中斷的基本概念

1.數據傳送方式

程序控制方式

無條件傳送方式:輸入輸出操作完全取決於程序的安排,而不管外設的狀態。

程序查詢方式:先查詢外設的當前狀態,獲得埠信息;I/O操作完全由CPU控制。缺點:浪費CPU時間,效率低。

中斷傳送方式

CPU不必定時查詢介面狀態,介面在數據發送或接收數據准備好後通知CPU;

CPU通過執行一個中斷服務程序來完成數據傳送。

介面沒有準備好時,CPU繼續執行主程序,提高CPU工作效率。

DMA(Direct Memory Access):直接存儲器存取方式

I/O設備在DMA介面控制下直接把成塊信息送到主存儲器,或從主存儲器取出成塊信息送給I/O設備,中間不經CPU參與。

比中斷、查詢方式更加提高了CPU的利用率。

2.中斷概念:CPU在正常運行程序時,由於CPU以外某一事件的發生,引起CPU暫停正在運行的程序,而轉到為該事件的發生預先安排好的服務程序中去執行。

相關文章
使用單片機實現PWM調光的C語言實例免費下載
使用單片機實現花樣燈的C語言實例免費下載
使用單片機實現查表顯示LED燈的C語言實例免費下載
使用單片機實現8位LED左移的C語言實例免費下載
使用單片機實現8位LED右移的C語言實例免費下載
使用51單片機實現液晶讀寫的源代碼免費下載
抗抖動計數電路的工作原理及應用設計
使用PIC單片機實現熱敏電阻數字化方法詳細說明

㈤ 單片機實驗「定時/計數器及中斷」的一些問題

1.1)主程序各行作用如下:
第一行:設置定時器模式
第二行:設置定時器高位寄存器初值
第三行:設置定時器低位寄存器初值

第四行:T0定時器中斷使能
第五行:總中斷使能

第六行:打開T0定時器

第七行:死循環(主程序停留在此行)
主程序整體實現的功能:初始化定時器T0
1.2)void Timer0_Int(void)是定時器0中斷函數,每行作用如下:
第一行:重新設定定時器高位寄存器初值
第二行:重新設置定時器低位寄存器初值
第三行:如果P1_0 IO口是高電平則改為低電平,如是低電平改為高電平

整體實現的功能:P1_0 IO口高低電平1秒切換一次

媽呀,這么多問題,網上找找,應該有的

閱讀全文

與單片機中斷系統實驗相關的資料

熱點內容
程序員叫你找回被盜的qq操作規程 瀏覽:484
哪裡能找手機過去卸載過app 瀏覽:782
單片機怎麼用別人程序 瀏覽:632
電腦免費加密文件的軟體 瀏覽:354
魅族手機雲存儲伺服器出錯 瀏覽:450
華為雲伺服器配置標准 瀏覽:783
ann演算法的特點 瀏覽:750
程序員私單感受 瀏覽:229
安卓其它內存怎麼清理 瀏覽:184
程序員那麼可愛百度貼 瀏覽:898
程序員有遠射的機會果斷起腳 瀏覽:767
更改路由器密碼用哪個app 瀏覽:972
極速版今日頭條推薦演算法 瀏覽:850
山西稅務ukey伺服器地址 瀏覽:216
gmod為什麼刷新不出伺服器 瀏覽:459
單片機mov指令 瀏覽:202
程序員薪水調查 瀏覽:634
號碼保護取件加密 瀏覽:50
汽車安卓音響頻道怎麼設置 瀏覽:428
士兵違背命令 瀏覽:108