導航:首頁 > 操作系統 > 單片機實驗結論

單片機實驗結論

發布時間:2024-07-15 15:26:49

單片機。4.在MCS-51中,以下有關PC和DPTR的結論錯誤的是 ( )

A是正確的,DPTR可以讀和寫
B是正確的,都是16位
C是錯誤的,DPTR不能自動加1,只能靠軟體加1
D是正確的,DPTR可以拆分為DPH和DPL,PC則不能。

❷ 單片機的定時功能,計數功能,中斷功能的定義。。。

我這里有點教材,希望對你有幫助!
MCS-51中斷系統的結構:
如圖(抱歉,本圖請找本51書看一下)所示,由與中斷有關的特殊功能寄存器、中斷入口、順序查詢邏輯電路等組成,包括5個中斷請求源,4個用於中斷控制的寄存器IE、IP、ECON和SCON來控制中斷 類弄、中斷的開、關和各種中斷源的優先順序確定。
中斷請求源:
(1)外部中斷請求源:即外中斷0和1,經由外部引腳引入的,在單片機上有兩個引腳,名稱為INT0、INT1,也就是P3.2、P3.3這兩個引腳。在內部的TCON中有四位是與外中斷有關的。

IT0:INT0觸發方式控制位,可由軟體進和置位和復位,IT0=0,INT0為低電平觸發方式,IT0=1,INT0為負跳變觸發方式。這兩種方式的差異將在以後再談。

IE0:INT0中斷請求標志位。當有外部的中斷請求時,這位就會置1(這由硬體來完成),在CPU響應中斷後,由硬體將IE0清0。

IT1、IE1的用途和IT0、IE0相同。

(2)內部中斷請求源

TF0:定時器T0的溢出中斷標記,當T0計數產生溢出時,由硬體置位TF0。當CPU響應中斷後,再由硬體將TF0清0。

TF1:與TF0類似。

TI、RI:串列口發送、接收中斷,在串口中再講解。

2、中斷允許寄存器IE

在MCS-51中斷系統中,中斷的允許或禁止是由片內可進行位定址的8位中斷允許寄存器IE來控制的。見下表

EA
X
X
ES
ET1
EX1
ET0
EX0
其中EA是總開關,如果它等於0,則所有中斷都不允許。

ES-串列口中斷允許

ET1-定時器1中斷允許

EX1-外中斷1中斷允許。

ET0-定時器0中斷允許

EX0-外中斷0中斷允許。
SETB EA
SETB ET1

SETB EX1

來實現它。

3、五個中斷源的自然優先順序與中斷服務入口地址

外中斷0:0003H

定時器0:000BH

外中斷1:0013H

定時器1:001BH

串口 :0023H

它們的自然優先順序由高到低排列。

寫到這里,大家應當明白,為什麼前面有一些程序一始我們這樣寫:

ORG 0000H

LJMP START

ORG 0030H

START:



這樣寫的目的,就是為了讓出中斷源所佔用的向量地址。當然,在程序中沒用中斷時,直接從0000H開始寫程序,在原理上並沒有錯,但在實際工作中最好不這樣做。

優先順序:單片機採用了自然優先順序和人工設置高、低優先順序的策略,即可以由程序員設定那些中斷是高優先順序、哪些中斷是低優先順序,由於只有兩級,必有一些中斷處於同一級別,處於同一級別的,就由自然優先順序確定。

開機時,每個中斷都處於低優先順序,我們可以用指令對優先順序進行設置。看錶2

中斷優先順序中由中斷優先順序寄存器IP來高置的,IP中某位設為1,相應的中斷就是高優先順序,否則就是低優先順序。
X
X
X
PS
PT1
PX1
PT0
PX0
例:在上例中,如果5個中斷請求同時發生,求中斷響應的次序。

響應次序為:定時器0->外中斷1->外中斷0->實時器1->串列中斷。

MCS-51的中斷響應過程:
1、中斷響應的條件:講到這兒,我們依然對於計算機響應中斷感到神奇,我們人可以響應外界的事件,是因為我們有多種「感測器「――眼、耳可以接受不同的信息,計算機是如何做到這點的呢?其實說穿了,一點都不希奇,MCS51工作時,在每個機器周期中都會去查詢一下各個中斷標記,看他們是否是「1「,如果是1,就說明有中斷請求了,所以所謂中斷,其實也是查詢,不過是每個周期都查一下而已。這要換成人來說,就相當於你在看書的時候,每一秒鍾都會抬起頭來看一看,查問一下,是不是有人按門鈴,是否有電話。。。。很蠢,不是嗎?可計算機本來就是這樣,它根本沒人聰明。
了解了上述中斷的過程,就不難解中斷響應的條件了。在下列三種情況之一時,CPU將封鎖對中斷的響應:

CPU正在處理一個同級或更高級別的中斷請求。
現行的機器周期不是當前正執行指令的最後一個周期。我們知道,單片機有單周期、雙周期、三周期指令,當前執行指令是單位元組沒有關系,如果是雙位元組或四位元組的,就要等整條指令都執行完了,才能響應中斷(因為中斷查詢是在每個機器周期都可能查到的)。

當前正執行的指令是返回批令(RETI)或訪問IP、IE寄存器的指令,則CPU至少再執行一條指令才應中斷。這些都是與中斷有關的,如果正訪問IP、IE則可能會開、關中斷或改變中斷的優先順序,而中斷返回指令則說明本次中斷還沒有處理完,所以都要等本指令處理結束,再執行一條指令才可以響應中斷。
2、中斷響應過程
CPU響應中斷時,首先把當前指令的下一條指令(就是中斷返回後將要執行的指令)的地址送入堆棧,然後根據中斷標記,將相應的中斷入口地址送入PC,PC是程序指針,CPU取指令就根據PC中的值,PC中是什麼值,就會到什麼地方去取指令,所以程序就會轉到中斷入口處繼續執行。這些工作都是由硬體來完成的,不必我們去考慮。這里還有個問題,大家是否注意到,每個中斷向量地址只間隔了8個單元,如0003-000B,在如此少的空間中如何完成中斷程序呢?很簡單,你在中斷處安排一個LJMP指令,不就可以把中斷程序跳轉到任何地方了嗎?
一個完整的主程序看起來應該是這樣的:
ORG 0000H
LJMP START
ORG 0003H
LJMP INT0 ;轉外中斷0
ORG 000BH
RETI ;沒有用定時器0中斷,在此放一條RETI,萬一 「不小心「產生了中斷,也不會有太大的後果。
中斷程序完成後,一定要執行一條RETI指令,執行這條指令後,CPU將會把堆棧中保存著的地址取出,送回PC,那麼程序就會從主程序的中斷處繼續往下執行了。注意:CPU所做的保護工作是很有限的,只保護了一個地址,而其它的所有東西都不保護,所以如果你在主程序中用到了如A、PSW等,在中斷程序中又要用它們,還要保證回到主程序後這裡面的數據還是沒執行中斷以前的數據,就得自己保護起來。

一、計數概念的引入

從選票的統計談起:畫「正」。這就是計數,生活中計數的例子處處可見。例:錄音機上的計數器、家裡面用的電度表、汽車上的里程錶等等,再舉一個工業生產中的例子,線纜行業在電線生產出來之後要計米,也就是測量長度,怎麼測法呢?用尺量?不現實,太長不說,要一邊做一邊量呢,怎麼辦呢?行業中有很巧妙的方法,用一個周長是1米的輪子,將電纜繞在上面一周,由線帶輪轉,這樣輪轉一周不就是線長1米嘛,所以只要記下輪轉了多少圈,就可以知道走過的線有多長了。

二、計數器的容量

從一個生活中的例子看起:一個水盆在水龍頭下,水龍沒關緊,水一滴滴地滴入盆中。水滴不斷落下,盆的容量是有限的,過一段時間之後,水就會逐漸變滿。錄音機上的計數器最多隻計到999….那麼單片機中的計數器有多大的容量呢?8031單片機中有兩個計數器,分別稱之為T0和T1,這兩個計數器分別是由兩個8位的RAM單元組成的,即每個計數器都是16位的計數器,最大的計數量是65536。

三、定時

8031中的計數器除了可以作為計數之用外,還可以用作時鍾,時鍾的用途當然很大,如打鈴器,電視機定時關機,空調定時開關等等,那麼計數器是如何作為定時器來用的呢?

一個鬧鍾,我將它定時在1個小時後鬧響,換言之,也可以說是秒針走了(3600)次,所以時間就轉化為秒針走的次數的,也就是計數的次數了,可見,計數的次數和時間之間的確十分相關。那麼它們的關系是什麼呢?那就是秒針每一次走動的時間正好是1秒。

圖1

結論:只要計數脈沖的間隔相等,則計數值就代表了時間的流逝。

由此,單片機中的定時器和計數器是一個東西,只不過計數器是記錄的外界發生的事情,而定時器則是由單片機提供一個非常穩定的計數源。

那麼提供組定時器的是計數源是什麼呢?看圖1,原來就是由單片機的晶振經過12分頻後獲得的一個脈沖源。晶振的頻率當然很准,所以這個計數脈沖的時間間隔也很准。問題:一個12M的晶振,它提供給計數器的脈沖時間間隔是多少呢?當然這很容易,就是12M/12等於1M,也就是1個微秒。

結論:計數脈沖的間隔與晶振有關,12M的晶振,計數脈沖的間隔是1微秒。

四、溢出

讓我們再來看水滴的例子,當水不斷落下,盆中的水不斷變滿,最終有一滴水使得盆中的水滿了。這時如果再有一滴水落下,就會發生什麼現象?水會漫出來,用個術語來講就是「溢出」。

水溢出是流到地上,而計數器溢出後將使得TF0變為「1」。至於TF0是什麼我們稍後再談。一旦TF0由0變成1,就是產生了變化,產生了變化就會引發事件,就象定時的時間一到,鬧鍾就會響一樣。至於會引發什麼事件,我們下次課再介紹,現在我們來研究另一個問題:要有多少個計數脈沖才會使TF0由0變為1。

五、任意定時及計數的方法

剛才已研究過,計數器的容量是16位,也就是最大的計數值到65536,因此計數計到65536就會產生溢出。這個沒有問題,問題是我們現實生活中,經常會有少於65536個計數值的要求,如包裝線上,一打為12瓶,一瓶葯片為100粒,怎麼樣來滿足這個要求呢?

……

提示:如果是一個空的盆要1萬滴水滴進去才會滿,我在開始滴水之前就先放入一勺水,還需要10000滴嘛?

對了,我們採用預置數的方法,我要計100,那我就先放進65436,再來100個脈沖,不就到了65536了嗎。

定時也是如此,每個脈沖是1微秒,則計滿65536個脈沖需時65.536毫秒,但現在我只要10毫秒就可以了,怎麼辦?

……

10個毫秒為10000個微秒,所以,只要在計數器裡面放進55536就可以了。

閱讀全文

與單片機實驗結論相關的資料

熱點內容
51單片機波特率115200 瀏覽:891
服從命令圖片動畫片 瀏覽:191
Web與雲伺服器的區別 瀏覽:996
linux沒有rz 瀏覽:305
理正勘察加密鎖 瀏覽:698
安卓程序結構是什麼 瀏覽:297
活塞式壓縮機檢修規程 瀏覽:762
伺服器未響怎麼辦 瀏覽:698
超短指標公式源碼 瀏覽:708
什麼是opc的客戶端和伺服器 瀏覽:33
ug編程指令軟體自學網 瀏覽:290
android板子 瀏覽:751
單機版ERP系統怎麼用伺服器 瀏覽:472
編程序實現兩個變數值的交換 瀏覽:501
qt移植到linux 瀏覽:998
php常用數據結構 瀏覽:879
泰拉瑞亞伺服器為什麼別人進不來 瀏覽:743
app鎖定怎麼解開 瀏覽:464
怎麼查看郵件源碼 瀏覽:880
小說推薦網源碼 瀏覽:201