《單片機功能部件》PPT課件.ppt_第1頁
《單片機功能部件》PPT課件.ppt_第2頁
《單片機功能部件》PPT課件.ppt_第3頁
《單片機功能部件》PPT課件.ppt_第4頁
《單片機功能部件》PPT課件.ppt_第5頁
已閱讀5頁,還剩136頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

MCS-51單片機內部功能部件 MCS-51系統(tǒng)擴展 MCS-51功能擴展,MCS-51單片機內部功能部件,第6章 中斷系統(tǒng) 第7章 定時/計數器 第8章 串行通信接口,中斷的概念 現代的計算機都具有實時處理功能,能對外部發(fā) 生的事件如人工干預、外部事件及意外故障做出及時 的響應或處理,這是依靠計算機的中斷系統(tǒng)來實現的。 在MCS51應用系統(tǒng)中,經常需要處理如下問題: 1定時器問題 在溫度控制系統(tǒng)中,需對受控對象的溫度進行定 時采樣,兩次采樣之間的時間間隔是固定的,如每秒 一次。在電機恒速控制系統(tǒng)中,需對受控電機的轉速 進行定時采樣,兩次采樣之間的時間間隔也是固定的, 如每秒兩次。為了定時采樣,就必須使用定時器。當 CPU啟動定時器后,就要等待定時器的定時超時標志, 然后就進行采樣,周而復始,循環(huán)不止。,2鍵盤按鍵問題 鍵盤是計算機系統(tǒng)操作者對系統(tǒng)進行參數設置和狀態(tài)控制的常用設備,操作者何時對鍵盤進行操作是無法事先確定的。單片機應快速響應鍵盤操作。 3串行通信問題 一個單片機控制系統(tǒng)可能與另一個計算機系統(tǒng)有聯系,它們之間的數據交換是通過異步串行通信接口RS-232C進行的。MCS51單片機有一個串行通信控制器,當CPU將要發(fā)送的一個字節(jié)數據提交給串行通信控制器后,需要等串行通信控制器把這個字節(jié)數據發(fā)送完畢,才能發(fā)送下一個字節(jié)數據。這時,CPU要等待串行通信控制器的一個標志,表明串行通信控制器的發(fā)送緩沖器空閑,才能把下一個要發(fā)送字節(jié)數據提交給串行通信控制器。CPU除了發(fā)送數據之外,還要接收對方發(fā)送來的數據,而對方什么時候要發(fā)送數據是無法確定的。MCS51單片機的串行通信控制器會自動處理數據接收,一旦接收到一個字節(jié)的數據,串行通信控制器會設置數據接收完成標志,CPU檢測到該標志后,就從串行通信控制器中將數據讀出。,上述三個問題中,一個共性的問題是:CPU需要對 一個標志進行檢測判斷,以決定是否進行一項預定的工 作(即執(zhí)行一個特定的程序段)。對一個可能隨機出現 的標志進行檢測判斷,可以采用兩種方法:查詢/中斷。 查詢是指CPU在程序流程中循環(huán)判斷標志的改變。 如:啟動定時器時,定時器的定時超時標志TF為0,定 時間隔到時,定時器將定時超時標志TF置為1,程序中 CPU用循環(huán)結構判斷該標志是否為1等待定時結束: while(TF = = 0); TF = 1; 調用采樣函數, (TF定時到標志),或者在主函數的流程中按順序判斷各個標志的狀態(tài),以確定要做的工作。 while(1) if(TI) 調用發(fā)送函數; if(RI) 調用接受函數; if(keypress)調用按鍵處理函數; 這里,TI、RI、keypress分別為定時到標志、發(fā)送緩沖器空標志、接收緩沖器滿標志和有鍵按下標志。,所謂中斷是指,單片機內部有一個中斷管理系統(tǒng),它對內部的定時器事件、串行通信的發(fā)送和接收事件及外部事件(如鍵盤按鍵動作)等進行自動的檢測判斷,當有某個事件產生時,中斷管理系統(tǒng)會置位相應標志通知CPU,請求CPU迅速去處理。CPU檢測到某個標志時,會停止當前正在處理的程序流程,轉去處理所發(fā)生的事件(針對發(fā)生的事件,調用某一特定的函數,稱為該事件的中斷服務函數),處理完以后,再回到原來被中斷的地方,繼續(xù)執(zhí)行原來的程序。這個過程稱為中斷。(CPU對中斷標志的檢測是在程序指令執(zhí)行的周期中順帶進行的,不影響指令的連續(xù)執(zhí)行。 ) 注:程序中的一般函數是由主函數或其它函數調用的,而中斷服務函數不能被其它函數調用,它的執(zhí)行完全是隨機的。,中斷管理系統(tǒng)可以處理的事件稱為中斷源。一般計算機系統(tǒng)允許有多個中斷源,當幾個中斷源同時向CPU請求中斷,要求為它們服務的時候,就存在CPU優(yōu)先響應哪一個中斷請求源的問題,一般根據中斷源(所發(fā)生的實時事件)的輕重緩急排隊,優(yōu)先處理最緊急事件的中斷請求,于是規(guī)定每一個中斷源都有自己的中斷優(yōu)先級別。 當CPU正在處理一個中斷源請求時,又發(fā)生了另一個優(yōu)先級比它高的中斷請求,如果CPU能夠暫時中止執(zhí)行當前的中斷服務程序,轉而去處理優(yōu)先級更高的中斷請求,待處理完以后,再繼續(xù)執(zhí)行原來的低級中斷處理程序,這樣的過程稱為中斷嵌套,這樣的中斷系統(tǒng)稱為多級中斷系統(tǒng)。沒有中斷嵌套功能的中斷系統(tǒng)稱為單級中斷系統(tǒng)。,中斷系統(tǒng)要解決的問題,CPU在不斷的執(zhí)行指令中,是如何檢測到隨機發(fā)生的中斷請求 中斷能夠人為控制嗎(允許中斷或禁止中斷) 中斷是隨機產生的,不能用一般的子程序調用,那么如何處理中斷處理子程序呢 當有多個中斷時怎么處理 中斷服務完畢,如何正確回到原斷點處,MCS51中斷系統(tǒng) MCS51系列中不同型號單片機的中斷源數量是不同的(511個),最典型的8051單片機有5個中斷源(外部中斷0、1,內部定時器中斷0、1,串口中斷),具有兩個中斷優(yōu)先級。與中斷系統(tǒng)有關的特殊功能寄存器有中斷允許寄存器IE、中斷優(yōu)先級控制寄存器IP、中斷控制寄存器TCON和SCON中有關位。MCS51單片機基本的中斷系統(tǒng)結構如圖41所示。,1中斷源與中斷標志 MCS51中典型的8051單片機有5個中斷源: 兩個外部中斷:(P3.2 INT0、P3.3 INT1) 上輸入的外部中斷源,低電平或負跳變有效,置位TCON中的IE0和IE1中斷請求標志位; 三個內部中斷源:定時器計數器T0、T1的溢出中斷 源和串行口的發(fā)送/接收中斷。對T0和T1中斷,當定 時計數回0溢出時,由硬件自動置位TCON中的TF0 或TF1中斷請求標志位;對串行接收發(fā)送中斷,當 完成一串行幀的接收發(fā)送時,由硬件自動置SCON 中的中斷請求標志位TI(發(fā)送)或RI(接收),必須 由用戶在中斷服務程序中復位TI或RI。,中斷控制寄存器TCON的各位(可位尋址): IE0:外部中斷0請求源(INT0)標志。 IE01,外部中斷0正在向CPU請求中斷,當 CPU響應該中斷時由硬件清零IE0(邊沿觸發(fā)方式)。 IT0:外部中斷源 INT0 觸發(fā)方式控制位。 IT0 0,外部中斷0程控為電平觸發(fā)方式,當P3.2輸入低電平時,置位IE0。IT0 1,外部中斷0程控為邊沿觸發(fā)方式,相繼的兩次采樣,一個周期中采樣到為高電平,接著的下個周期中采樣到為低電平,則置1 IE0。,IE1:外部中斷1請求(INT1,P3.3)標志。 IE1 1外部中斷1向 CPU請求中斷,當 CPU響應外部中斷時,由硬件清0 IE1(邊沿觸發(fā)方式)。 IT1:外部中斷1觸發(fā)方式控制位。 IT1 0,外部中斷1程控為電平觸發(fā)方式,IT1 1,外部中斷1為邊沿觸發(fā)方式。其功能和IT0類似。 TR0:定時計數器T0運行控制位。(啟動/停止) TF0:定時計數器T0溢出中斷標志位,CPU執(zhí)行中斷服務程序時由硬件復位。 TR1:定時計數器T1運行控制位。 TF1:定時計數器T1溢出中斷標志位,CPU執(zhí)行中斷服務程序時由硬件復位。,串行口中斷:串行口的接收中斷標志RI(SCON.0)和發(fā)送中斷標志TI(SCON.1)邏輯或以后作為內部的一個中斷源。當串行口發(fā)送完一個字符由內部硬件置位發(fā)送中斷標志TI,接收到一個字符后也由內部硬件置位接收中斷標志RI。應該注意,CPU響應串行口的中斷時,并不清0 TI和RI中斷標志,TI和RI必須由軟件清0(中斷服務程序中必須有清 TI、RI的指令)。 SCON:串行通信控制寄存器,2中斷控制 (1)中斷允許寄存器IE MCS51的CPU對中斷源的開放或屏蔽,即每一個中斷源是否被允許中斷,是由內部的中斷允許寄存器IE(IE為特殊功能寄存器,它的字節(jié)地址A8H,可位尋址)控制的,其格式如下: EA:CPU的中斷開放標志。 EA 1,CPU開放中斷; EA 0,CPU屏蔽所有的中斷申請。 EX0:外部中斷0中斷允許位。 EX0 1,允許中斷;EX0 0,禁止中斷。,ET0:T0的溢出中斷允許位。 ET0 1,允許T0中斷; ET0 0,禁止T0中斷。 EX1:外部中斷1中斷允許位。 EX1 1,允許外部中斷1中斷; EX1 0,禁止外部中斷1中斷。 ET1:定時器計數器 T1的溢出中斷允許位。 ET1 1,允許T1中斷; ET1 0禁止T1中斷。 ES: 串行口中斷允許位。 ES 1,允許串行口中斷; ES 0禁止串行口中斷。,(2)中斷優(yōu)先級控制 MCS51有兩個中斷優(yōu)先級,每一中斷請求源可編程為高優(yōu)先級中斷或低優(yōu)先級中斷,實現二級中斷嵌套。一個正在被執(zhí)行的低優(yōu)先級中斷服務程序能被高優(yōu)先級中斷所中斷,但不能被另一個同級的或低優(yōu)先級中斷源所中斷。若CPU正在執(zhí)行高優(yōu)先級的中斷服務程序,則不能被任何中斷源所中斷,一直執(zhí)行到結束,遇到返回指令RETI,返回主程序后再執(zhí)行一條指令才能響應新的中斷源申請。 *為了實現上述功能,MCS51的中斷系統(tǒng)有兩個不可尋址的優(yōu)先級狀態(tài)觸發(fā)器,一個指出CPU是否正在執(zhí)行高優(yōu)先級中斷服務程序,另一個指出CPU是否正在執(zhí)行低級中斷服務程序。這兩個觸發(fā)器的1狀態(tài)分別屏蔽所有的中斷申請和同一優(yōu)先級的其他中斷源申請。 另外,MCS51的片內有一個中斷優(yōu)先級寄存器IP(IP為特殊功能寄存器,它的字節(jié)地址為B8H,可位尋址),其格式如下:,PX0:外部中斷0中斷優(yōu)先級控制位。 PX0 1,外部中斷0中斷定義為高優(yōu)先級中斷; PX0 0,外部中斷0中斷定義為低優(yōu)先級中斷。 PT0:定時器T0中斷優(yōu)先級控制位。 PT0 1,定時器T0中斷定義為高優(yōu)先級中斷; PT0 0,定時器T0中斷定義為低優(yōu)先級中斷。 PX1:外部中斷1中斷優(yōu)先級控制位。 PX1 = 1,外部中斷1中斷定義為高優(yōu)先級中斷; PX1 0,外部中斷1中斷定義為低優(yōu)先級中斷。 PT1:定時器T1中斷優(yōu)先級控制位。 PT1 1,定時器T1中斷定義為高優(yōu)先級中斷; PT1 0,定時器T1中斷定義為低優(yōu)先級中斷。,PS:串行口中斷優(yōu)先級控制位。 PS 1,串行口中斷定義為高優(yōu)先級中斷; PS 0,行口中斷定義為低優(yōu)先級中斷。 在 CPU接收到同樣優(yōu)先級的幾個中斷請求源時,一個內部的硬件查詢序列確定優(yōu)先服務于哪一個中斷申請,這樣在同一個優(yōu)先級里,由查詢序列確定了優(yōu)先級結構,其優(yōu)先級別排列如下: 外部中斷0 最高 定時器T0中斷 外部中斷1 定時器T1中斷 串行口中斷 最低,# MCS51復位以后,特殊功能寄存器IE、IP的內容均為0,由初始化程序對IE、IP編程,以開放中央處理器CPU中斷、允許某些中斷源中斷和改變中斷的優(yōu)先級。 *3中斷響應過程 MCS51的CPU在每一個機器周期順序檢查每一個中斷源。在機器周期的S6采樣并按優(yōu)先級處理所有被激活的中斷請求,如果沒有被下述條件所阻止,將在下一個機器周期的狀態(tài)S1響應激活了的最高級中斷請求。 CPU正在處理相同的或更高優(yōu)先級的中斷; 現行的機器周期不是所執(zhí)行指令的最后一個機器周期;,正在執(zhí)行的指令是中斷返回指令(RETI)或者是對IE、IP的寫操作指令(執(zhí)行這些指令后至少再執(zhí)行一條指令后才會響應中斷)。 *如果上述條件中有一個存在,CPU將丟棄中斷查詢的結果;若一個條件也不存在,將在緊接著的下一個機器周期執(zhí)行中斷查詢的結果。 處理器響應中斷時,先置位相應的優(yōu)先級狀態(tài)觸發(fā)器(該觸發(fā)器指出CPU開始處理的中斷優(yōu)先級別),然后執(zhí)行一條硬件子程序調用,清0中斷請求源申請標志(TI和RI除外)。接著把程序計數部PC的內容壓入堆棧(但不保護PSW),將被響應的中斷服務程序的入口地址送程序計數器PC,各中斷源服務程序的入口地址為:,外部中斷0 0003H 定時器T0 000BH 外部中斷1 0013H 定時器T1 001BH 串行口中斷 0023H 通常在中斷入口,安排一條跳轉指令,以轉移到用戶設計的中斷處理程序入口。 CPU執(zhí)行中斷處理程序一直到RETI指令為止。RETI指令是表示中斷服務程序的結束,CPU執(zhí)行完這條指令后,清0響應中斷時所置位的優(yōu)先級狀態(tài)觸發(fā)器,然后從堆棧中彈出頂上的兩個字節(jié)到程序計數器 PC,CPU從原來打斷處重新執(zhí)行被中斷的程序。由此可見,用戶的中斷服務程序末尾必須安排一條返回指令RETI,CPU現場的保護和恢復必須由用戶的中斷服務程序實現。,*一、中斷處理過程 中斷處理過程分為四個階段:中斷請求,中斷響應,中斷處理、中斷返回。MCS51系列單 片機的中斷過程流程如圖6.2所示。,N,N,Y,Y,Y,N,執(zhí) 行 指 令,中斷標志1? (中斷請求?),指令 最后一個T周期?,EA=1? 允 許 位 = 1?,CPU 判 別優(yōu) 先權 ,響 應優(yōu) 先權高 的中斷,斷點的PC進棧, 中斷服務入口地址送PC,撤 除 中 斷 標 志,中 斷 服 務,中 斷 返 回, 斷 點 出 棧 送 PC,中斷請求.,中斷響應,中斷服務,中斷返回,中斷請求、中斷響應過程由硬件完成。 中斷服務程序應根據需要進行編寫。程序中要注意保護現場和恢復現場。 中斷返回是通過執(zhí)行一條RETI中斷返回指令,使堆棧中被壓入的斷 點地址送PC,從而返回主程序的斷點繼續(xù)執(zhí)行主程序。另外RETI還有恢復優(yōu)先級狀態(tài)觸發(fā)器 的作用,因此不能以RET指令代替“RETI”指令。,*二、中斷請求的撤除 CPU響應中斷后,應撤除該中斷請求標志,否則會再次中斷。 對定時計數器T0、T1的溢出中斷,CPU響應中斷后,硬件自動清除中斷請求標志TF0 TF1。 對邊沿觸發(fā)的外部中斷INT1和INT0,CPU響應中斷后硬件自動清除中斷請求標志IE0和IE1。 對于串行口中斷,CPU響應中斷后,沒有用硬件清除中斷請求標志TI、RI,即這些中斷標志 不會自動清除,必須用軟件清除,這是在編串行通信中斷服務中應該注意的。 對電平觸發(fā)的外部中斷,CPU在響應中斷時也不會自動清除中斷標志,因此,在CPU響應中斷后應立即撤除INT1或INT0的低電平信號。,*4外部中斷響應時間 INT0和INT1電平在每一個機器周期的S5P2被采樣并鎖存到IE0、IE2中,這個新置入的IE0、IEI狀態(tài)等到下一個機器周期才被查詢電路查詢到。如果中斷被激活,并且滿足響應條件,CPU接著執(zhí)行一條硬件子程序調用指令以轉到相應的服務程序入口,該調用指令本身需兩個機器周期。這樣,在產生外部中斷請求到開始執(zhí)行中斷服務程序的第一條指令之間,最少需要三個完整的機器周期。,如果中斷請求被前面列出的三個條件之一所阻止,則需要更長的響應時間。如果已經在處理同級或更高級中斷,額外的等待時間明顯地取決于別的中斷服務程序的處理過程。當沒有處理同級或更高級中斷時,如果正在處理的指令沒有執(zhí)行到最后的機器周期,所需的額外等待時間不會多于3個機器周期,因為最長的指令(乘法指令MUL和除法指令 DIV)也只有 4個機器周期,如果正在執(zhí)行的指令為IE、IP的指令,額外的等待時間不會多于 5個機器周期(最多需一個周期完成正在處理的指令,完成下一條指令(設MUL或DIV)4個機器周期)。這樣,在一個單一中斷優(yōu)先級的系統(tǒng)里,外部中斷響應時間總是在38個機器周期之間。,*外部中斷觸發(fā)方式選擇 1電平觸發(fā)方式 若外部中斷定為電平觸發(fā)方式,外部引腳中斷輸入必須有效(保持低電平),直到CPU實際響應該中斷時為止,同時在中斷服務程序返回之前,外部中斷輸入必須無效(高電平),否則CPU返回后會再次引起中斷。所以電平觸發(fā)方式適合于外部中斷輸入以低電平輸入的、而且中斷服務程序能清除外部中斷輸入請求信號的情況。在用戶系統(tǒng)中,可將中斷輸入信號經一個D觸發(fā)器接入,并使D觸發(fā)器的D端接地,當外部中斷請求的正脈沖信號出現在D觸發(fā)器的CLK端時,D觸發(fā)器的Q端產生負電平,INTx有效,發(fā)出中斷請求,CPU執(zhí)行中斷服務程序時,利用一根口線,如P1.0,輸出一負電平脈沖使D觸發(fā)器置位,撤消中斷請求。,2邊沿觸發(fā)方式 外部中斷若定義為邊沿觸發(fā)方式,外部中斷申請觸發(fā)器能鎖存外部中斷輸入線上的負跳變,即使CPU暫時不能響應,中斷申請標志也不會丟失。在這種方式里,如果相繼連續(xù)兩次采樣,一個周期采樣到外部中斷輸入為高電平,下個周期采樣到低電平,則置位中斷申請觸發(fā)器,直到CPU響應此中斷時才清0。這樣不會丟失中斷,但輸入的脈沖寬度至少保持12個時鐘周期(若晶振頻率為6MHz,即 2S)才能被CPU采樣到。外部中斷的邊沿觸發(fā)方式適合于以脈沖形式輸入的外部輸入請求,如ADC0809的AD轉換結果的標志信號EOC為正脈沖,取反后連到8031的INTx,就可以中斷方式讀取AD的轉換結果。,中斷服務程序及例程 使用MCS51的中斷,要為使用到的中斷源編寫中斷服務程序。C51為中斷服務程序的編寫提供了方便的方法。C51的中斷服務程序是一種特殊的函數,它的說明形式為: void 函數名(void) interrupt n using m 函數體語句 這里,interrupt和using是為編寫C51中斷服務程序而引入的關鍵字,interrupt表示該函數是一個中斷服務函數,interrupt后的整數n表示該中斷服務函數是對應哪一個中斷源。,每個中斷源都有系統(tǒng)指定的中斷編號: 中 斷 源 中 斷 編 號 外部中斷0 0 定時器T0 1 外部中斷1 2 定時器T1 3 串行口中斷 4 using指定該中斷服務程序要使用的工作寄存器組號,m為03。 關鍵字interrupt和using只能用于中斷服務函數的說明而不能用于其它函數。 程序中的任何函數都不能調用中斷服務函數,中斷服務函數是由系統(tǒng)調用的。,例:INT0端口接一開關,P1.0接一發(fā)光二極管。 開關閉合(接地)時,發(fā)光二極管改變一次狀態(tài)。 #include “reg51.h” #include “intrins.h” Sbit P10=P10 void delay(void) int a = 5000; while(a) _nop_( ); /*INTRINS.H中說明的內部函數*/ ,P1.0,INT0,void int0_srv(void) interrupt 0 using 1 delay(); if(INT0 = 0) P10 = !P10 ; while(INT0 = 0 ); void main() P10 = 0; 初始化TCON、IE、IP EA = 1; IT0=0; EX0 = 1; while(1); ,例6-1,例如,對本節(jié)的例1用C語言編程 #include int0() interrupt 0 /*INT0中斷函數*/ P1=0x0f; /*輸入端先置1,燈滅*/ P1=4; /* 讀入開關狀態(tài),并左移四位, 使開關反映在發(fā)光二極管上*/ main() EA=1; /*開中斷總開關*/ EX0=1; /*允許INT0中斷*/ IT0=1; /*下降沿產生中斷*/ while(1); /*等待中斷*/ ,*法1:在主程序中控制中斷次數 #include char i; code char tab16= 0x3f,0x06,0x5b, 0x4F,0x66,0x6d,0x7d, 0x07, 0x7f,0x6f,0x77, 0x7c,0x39, 0x5e,0x79,0x71; int( ) interrupt 2 i+; /*計中斷次數*/ P1=tabi; /*查表,次數送顯示*/ ,main() EA=1; EX1=1; IT1=1; ap5: P1=0x3f; /*顯示“0”*/ for(i=0;i16;); /*當I16等待中斷*/ goto ap5; /*當i=16重復下 一輪16次中*/ ,法二:在中斷服務程序中控制中斷次數 #include char i; code char tab16= 0x3f,0x06, 0x5b,0x4F0x66, 0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71;,int() interrupt 2 i+ if (i16)P1=tabi; elsei=0;P1=0x3f; main() EA=1;EX1=1; IT1=1; P1=0x3f; while(1); /*等待中斷*/ ,作業(yè):中斷控制流水燈,定時/計數器,定時/計數器控制寄存器 定時/計數器運行控制 定時/計數器工作方式,通常實現定時/計數有3種主要方法: 軟件定時,即讓機器執(zhí)行一個程序段,這段程序本身沒有具體的執(zhí)行目的,只是為了磨時間。執(zhí)行這段程序所需要的時間就是延時時間。這種程序前面已設計過。這種方法定時占用CPU執(zhí)行時間,降低了CPU利用率。 數字電路硬件定時:采用小規(guī)模集成電路器件如555,外接定時部件(電阻和電容)構成。這樣的定時電路簡單,但要改變定時范圍,必須改變電阻和電容,這種定時電路在硬件連接好以后,修改不方便。 可編程定時/計數器是為方便微型計算機系統(tǒng)的設計和應用而研制的,它是硬件定時,又很容易地通過軟件來確定和改變它的定時值,通過初始化編程,能夠滿足各種不同的定時和計數要求,因而在嵌入式系統(tǒng)的設計和應用中得到廣泛的應用。(基本原理),8051型有兩個十六位定時/計數器T0、T1,有四種工作方式。 MCS51系列單片機的定時/計數器有幾個相關的特殊功能寄存器: 方式控制寄存器TMOD; 加法計數寄存器TH0、TH1 (高八位) TL0、TL1 (低八位); 定時/計數到標志TF0、TF1(中斷控制寄存器TCON) 定時/計數器啟??刂莆籘R0、TR1(TCON) 定時/計數器中斷允許位ET0、ET1(中斷允許寄存IE) 定時/計數器中斷優(yōu)先級控制位PT0、PT1(中斷優(yōu)IP),1. 定時工作方式, 設置為定時工作方式時,定時器計數的脈沖是由51單片機片內振蕩器經12分頻后產生的。 每經過一個機器周期定時器(T0或T1)的數值加1直至計數滿產生溢出。 如:當8051采用12MHz晶體時,每個機器周期為1s,計5 個機器周期即為5 s,即定時5 s 。,2. 計數工作方式, 設置為計數工作方式時,定時/計數器對引腳 P3.4 (T0)和P3.5 (T1)輸入的外部脈沖信號計數。 當輸入脈沖信號產生由1至0的下降沿時,定時器的值 加 1。測量過程是: CPU前一個機器周期采樣脈沖值為高,下一個機器周期采樣脈沖值為低,則計數器加 1。, 由于檢測一個1至0的跳變需要二個機器周期,故最高計數頻率為振蕩頻率的二十四分之一。 雖然對輸入信號的占空比無特殊要求,但為了確保某個電平在變化之前至少被采樣一次,要求電平保持時間至少是一個完整的機器周期。,無論是定時還是計數,當軟件設定了定時/計數器的工作方式,啟動以后,定時/計數器就按規(guī)定的方式工作,不占用CPU的操作時間,此時CPU可執(zhí)行其他程序,到了計滿規(guī)定的時間或規(guī)定的個數(定時/計數器溢出),定時/計數器會給出溢出標志,你可以通過查詢或中斷方式了解是否溢出。這種工作的方式如同人帶的手表,人在工作或睡覺,而手表依然滴滴答答行走,你可以通過看表或設鬧鐘方式,到了規(guī)定的時間,干你想干的事。,定時計數器方式控制寄存器TMOD 定時計數器的工作方式由TMOD的各位控制, TMOD的格式為: TMOD的低四位為T0的方式字,高四位為T1的方 式字。TMOD不能位尋址,必須整體賦值。TMOD各 位的含義如下: 1. 工作方式選擇位M1、M0 M1、M0的狀態(tài)決定定時器的工作方式:,2. 定時和外部事件計數方式選擇位C/T C/T0為定時器方式。在該方式中,以振蕩器輸出時 鐘脈沖(fosc)的十二分頻信號(即機器周期)作為計數信號,也就是每一個機器周期,定時器加1,若晶振為12MHz,則定時器計數頻率為1MHz,計數的脈沖周期為1S。定時器從初值開始加1計數直至定時器溢出。,C/T1為外部事件計數器方式,這種方式將外部引腳(T0為P3.4、T1為P3.5)上的輸入脈沖作為計數脈沖。(下降沿進行計數) 外部事件計數時最高計數頻率為晶振頻率的二十四分之一,外部輸入脈沖高電平和低電平時間必須在一個機器周期以上。 對外部輸入脈沖計數的目的通常是為了測試脈沖的周期、頻率或對輸入的脈沖數進行累加。,3. 門控位GATE GATE與TR0、TR1配合決定定時/計數器的啟停。 GATE = 0時,定時器/計數器的啟停只受定時器 運行控制位(TR0、TR1)的控制。 (軟件啟動) GATE = 1時,定時器/計數器的啟停除受TR0、 TR1控制外,還受外部引腳(INT0、 INT1)輸入電 平的控制(為高)。即TR0和INT0控制T0的運行,TR1和INT1控制T1的運行 (軟硬啟動),定時器運行控制位 在特殊功能寄存器 TCON中存放著定時器的運行控制位和溢出標志位。 1定時器T0運行控制位TR0 TR0(TCON.4)由軟件置位和清零。 當GATE=0時,T0的計數僅由TR0控制,TR0=1時允許T0計 數,TR0=0時禁止T0計數,這時,定時器僅由軟件控制。 當GATE=1時,僅當TR0=1且P3.2的輸入信號為高電平時T0 才計數,當TR0為0或P3.2的輸入為低電平時都禁止T0計數,這 時,若置TR0為1,則定時器僅由引腳信號的狀態(tài)控制啟停,因 而是硬件控制的。用TR0和INT0一起控制定時器的啟停,則為 軟、硬件配合控制。 2定時器 T1運行控制位TR1,定時/計數器的工作方式 MCS51的定時器有方式0、方式1、方式2和 方式3這4種工作方式。 1.方式0 當M1M0=00時,定時器工作于方式0。,與,方式 0為13位的計數器,由TL0的低5位和TH0的8位 組成,TL0低5位計數溢出時向TH0進位,TH0計數溢出時 置位溢出標志TF0。若T0工作于定時方式,設計數初值為 a,晶振頻率為12MHz,則T0從初值開始計數到溢出的定 時時間為 t(213a)1S。 2. 方式1 當M1M0=01時,定時器工作于方式1。,T1工作于方式1時,由TH1作為高8位,TL1作為低8位,構成一個十六位的計數器。若T1工作于定時方式1,計數初值為 a,晶振頻率為12MHz,則T1從計數初值計數到溢出的定時時間為t =(216a)S。 3. 方式2 M1M0=10時,定時器計數器工作于方式2,方式2為自動恢復初值的 8位計數器。TL1作為8位計數器,TH1作為計數初值寄存器。 t =(28a)S。,*4.方式3 M1M0=11時,被設置為方式3。,若T1設置為工作方式3時,則使T1停止計數。若T0被設置為方式3,則T0分為兩個獨立的8位計數器TL0和TH0。 TL0可作為八位定時/計數器,可使用T0的所有狀態(tài)控制位(GATE、TR0、INT0(P3.2)、T0(P3.4)、TF0等),TL0計數溢出時置位溢出標志TF0,TL0計數初值必須由軟件每次設定。 TH0只能作為一個8位定時器,并使用T1的狀態(tài)控制位TR1、TF1。TRl為1時,允許TH0計數,當TH0計數溢出時,置1溢出標志TF1。 一般只有當T1用于串行口的波特率發(fā)生器時,T0才在需要時用于方式3,以增加一個計數器。這時T1的啟停也受TR1控制,當T1計數溢出時不置位TF1。,定時/計數器應用舉例 使用MCS51單片機的定時/計數器的步驟是: 1設定TMOD,確定: 工作狀態(tài)(用作定時器/計數器); 工作方式; 控制方式。 如:T1用于定時器、方式1,T0用于計數器、方式2,均用軟件控制。則TMOD的值應為:0001 0110,即0x16。 2設置合適的計數初值,以產生期望的定時間隔。由于定時/計數器在方式0、方式1和方式2時的最大計數間隔取決于使用的晶振頻率fosc,如下表所示,當需要的定時間隔較大時,要采用適當的方法,即將定時間隔分段處理。,計數初值的計算方法如下,設晶振頻率為fosc,則定時/計數器計數頻率為fosc/12,定時/計數器的計數總次數T_all在方式0、方式1和方式2時分別為213 = 8192、216 = 65536和28 = 256,定時間隔為T,計數初值為a,則有 T = 12(T_all a)/fosc a = T_all Tfosc/12 a = Tfosc/12 (注意單位) THx = a / 256; TLx = a % 256;,3確定定時/計數器工作于查詢方式還是中斷方式,若工作于中斷方式,則在初始化時開放定時/計數器的中斷及總中斷: ET0 = 1; EA = 1; 還需要編寫中斷服務函數: void T0_srv(void) interrupt 1 using 1 TL0 = a % 256; TH0 = a / 256; 中斷服務程序段 4啟動定時器:TR0(TR1)= 1。,如圖所示, P1中接有八個發(fā)光二極管,編程使八個管輪流點亮,每個管亮100ms,設晶振為6MHz。,7.4.3 應用編程舉例,例1: 從P1.0輸出方波信號,周期為50ms。 采用定時/計數器T0用于定時器,定時間隔為25ms,軟件控制,方式1,中斷方式。設fosc = 6MHz。 定時計數初值為: a = -0.025*6000000/12= -12500 #include “reg51.h” void main() TMOD = 0x01; TH0 = -12500 / 256; TL0 = -12500 %256;,ET0 = 1;EA = 1; TR0 = 1; While(1); void T0_srv(void) interrupt 1 using 1 TL0 = -12500 %256; TH0 = -12500 / 256; P10 = !P10; ,例2: 從P1.0輸出方波信號,周期為2s。(同72) 實現一:硬件定時+軟件計數 采用T0做定時器,方式1,定時間隔為0.1s,中斷方 式。另設一全局變量ah1用于計數,每隔0.1秒ah1加1。 定時計數初值為: (設fosc = 6MHz) a = -0.1*6000000/12= -50000 #include “reg51.h” char ah1; void main() TMOD = 0x01; TH0 = -50000 / 256; TL0 = -50000 %256;,ET0 = 1;EA = 1; TR0 = 1; While(1); void T0_srv(void) interrupt 1 using 1 TL0 = -50000 %256; TH0 = -50000 / 256; ah1+; if (ah1=10) ah1=0 ; P10 = !P10; ,*實現二: (1)T1做計數器,初值為-10,方式2,中斷方式。 P1.1與T1(P3.5)相連。 (2)T0不變還做定時器,定時間隔為0.1s,方式1,中斷 方式。每隔0.1s,P1.1輸出一個方波:P11=1;P11=0; #include “reg51.h” char ah1; void main() TMOD = 0x61; TH0 = -5000 / 256; TL0 = -5000 %256;,TH1 = -10; TL1 = -10; ET0 = 1; ET1 = 1; EA = 1; TR0 = 1; TR1 = 1; While(1); void T0_srv(void) interrupt 1 using 1 TL0 = -50000 %256; TH0 = -50000 / 256; P11=1;P11=0; ,void T1_srv(void) interrupt 3 using 2 P10=!P10; ,*例3: 波形展寬程序.P124 設P3.4輸入低頻的窄脈沖信號,要求在P3.4輸入發(fā)生負跳變時,P1.0輸出一個500S的同步脈沖。 設fosc = 6MHz,P1.0的初態(tài)為高電平 (1)平時T0選為方式2做計數器用, 初值為-1(0FFH); (2)一旦P3.4輸入發(fā)生負跳變時,程序查詢到TF0變?yōu)?,則T0改為做定時器(500S),并使P1.0輸出低電平,T0溢出后恢復P1.0高電平,T0又工作于計數器方式。,#include “reg51.h” void main() TMOD = 0x06; /*T0計數器,方式2,軟件控制*/ TH0 = -250; TL0 = -1 ; /* 或TL0 = 255 */ TR0 = 1;,while(1) while(TF0=0); TF0 = 0; /非中斷方式 TMOD = 0x02; /* T0定時器,方式2*/ P10 = 0; while(!TF0); TF0 = 0; P10 = 1; TMOD = 0x06; /* T0 恢復為計數器 */ TL0 = -1; 請大家回去想想中斷的寫法,*例4 測量正脈沖寬度P125 說明:當TMOD中的GATE=1,則定時/計數器T0(T1)的啟停由INT0(INT1)引腳控制,所以將該脈沖信號接到INT0(INT1)。,#include “reg51.h” void main() char a,b; int c; TMOD = 0x09; /*T0定時器,方式1,硬件控制*/ TH0 = 0; TL0 = 0 ; while(INT0=1); TR0 = 1; while(INT0=0); /*等待INT0上跳 等INT0=1時,T0開始工作 */ while(INT0=1); /*等待INT0下跳*/ a=TH0; b=TL0; c=256*a+b; c=c*T; ,第8章 串行通信接口,串行通信的基本概念 串行接口的控制寄存器 串行接口的工作方式 *波特率的設定及編程,8 1 概 述 單片機應用與數據采集或工業(yè)控制時,往往作為前端機安裝在工業(yè)現場,遠離主機,現場數據采用串行通信方式發(fā)往主機進行處理,以降低通信成本,提高通信可靠性。如下圖所示。 應用, 數據通信方式有兩種:并行通信與串行通信 并行通信: 所傳送數據的各位同時發(fā)送或接收, 數據有多少位就需要多少根數據線。 特點: 速度快,成本高,適合近距離傳輸 如計算機并口,打印機,8255 。 串行通信:所傳送數據的各位按順序一位一位 地發(fā)送或接收。 只需一根數據,一根地線,共2 根 特點:成本低,硬件方便,適合遠距離通信, 傳輸速度低。,計算機技術中常見的一些接口,1、串行通信的基本概念 在串行通信系統(tǒng)中,根據數據流動方向可以分為三種方式: 單工通信:數據只能單向傳送。 半雙工通信:通信是雙向的,但每一時刻,數據流通的方 向是單向的。 全雙工通信:允許數據同時在兩個方向流動,即通信雙方的 數據發(fā)送和接收是同時進行的。,在串行通信過程中,通信雙方必須采用相同的通信速率,即每秒鐘發(fā)送或接收的位數,稱為波特率,如600,1200,2400,4800,9600,19200bps等。 P135 波特率與有效波特率 2、異步串行通信/同步串行通信 異步串行通信采用如下的幀結構: 起始位 + 8位數據位 + 停止位 或 起始位 + 9位數據位 + 停止位 其中:起始位為低電平,停止位為高電平。,優(yōu)點:硬件結構簡單。 缺點:傳輸速度慢。,P,1,D0,D1,D2,D3,D4,D5,D6,D7,P,1,0,第n個字符(一幀),n-1,n+1,0,D0,起始位,數據位(58位),校驗位,停止位, 在同步通信中,發(fā)送方在數據或字符開始處就用同步字符(常約定12個字節(jié))指示一幀的開始 ,由時鐘來實現發(fā)送端和接收端同步,接收方一旦檢測到與規(guī)定的同步字符符合,下面 就連續(xù)按順序傳送若干個數據 ,最后發(fā)校驗字節(jié)。見下圖:,SYN字符1,SYN字符2,數據1,數據2,.,數據n,連續(xù)傳送n 個數據,校驗,3錯誤校驗 在串行通信過程中,傳輸的電信號會受到各種干擾而產生畸變,因而使接收方接收到錯誤的數據。所以進行錯誤校驗。(在發(fā)送的數據信號中加入多余的信息位而達到錯誤校驗的目的) 在異步串行通信系統(tǒng)中,奇偶校驗是一種簡單的錯誤校驗編碼。奇偶校驗分為奇校驗和偶校驗。奇校驗是指數據各位與校驗位中1碼的總個數為奇數個,偶校驗是指數據各位與校驗位中1碼的總個數為偶數個。,通信的雙方針對上面情況應該有一個約定,什么時候開始發(fā)送,什么時候發(fā)送完畢;接收方收到的信息是否正確等,這就是通信協(xié)議。 所謂通信協(xié)議就是通信雙方必須共同遵守的 一種約定,約定包括數據的格式、同步的方式、傳送的步驟、檢糾錯方式及控制字符的定義 等,4*串行通信過程和UART 基本的計算機異步串行通信系統(tǒng)中,兩臺計算機之間通過三根信號線TxD、RxD和GND連接起來,TxD與GND構成發(fā)送線路,RxD與GND構成接收線路。一臺計算機的TxD、RxD線分別與另一臺計算機的RxD、TxD線相連。,Receive Data Transmit Data,實現串行通信的必要過程是并串(并行數據被CPU或外 設處理,串行數據在線路上傳輸)。 發(fā)送過程: CPU將要發(fā)送的一個字節(jié)并行數據 串行數據序列; 組幀(加一個起始位和一個停止位,還可能加入校驗位); 按事先約定的通信波特率發(fā)送起始位,然后發(fā)送數據位和校驗位,最后發(fā)送停止位。 接收過程: 當通信線路處于空閑狀態(tài)(雙方都沒有數據發(fā)送)時,接 收線RxD為高電平。 CPU以16倍于波特率的頻率對RxD進行采樣,當采樣到低 電平后,延時半位寬度,在該位中部進行三次采樣,進行多數 判決,確認若為低電平,則確定接收到起始位。然后,延時一 位寬度接收一位數據,直至接收到停止位。然后將串行數據拆 幀并轉換為并行數據,交CPU處理。(每接收一位數據時,采 用三次采樣的判決方法),由于在串行通信過程中的并串轉換、串并轉換、線路檢測、采樣判決、組幀、拆幀、發(fā)送和接收等操作需消耗CPU大量時間,以至CPU無法處理其它工作,因而開發(fā)出專用于處理異步串行通信發(fā)送和接收工作的芯片UART(通用異步串行通信接收發(fā)送器)。,UART 傳輸結構,CPU只需將要發(fā)送的一個字節(jié)數據交給UART,其它發(fā)送工作由UART自動完成,當UART將一幀數據發(fā)送完畢,會通知CPU 已發(fā)送完,可提交下一個字節(jié) 。 UART自動監(jiān)測線路狀態(tài)并完成數據接收工作,當接收到一個字節(jié)數據后,UART會通知CPU來讀取。采用UART后,CPU的負擔大大減輕了。,(1)實現數據格式化 因為CPU發(fā)出的數據是并行數據,接口電路應實現不同串行通信方式下的數據格式化任務, 如自動生成起止方式的幀數據格式(異步方式)或在待傳送的數據塊前加上同步字符等。,總的來說,串行接口的基本任務就是:,(2)進行串、并轉換 在發(fā)送端,接口將CPU送來的并行信號轉換成串行數據進行傳送;而在接收端,接口要將接 收到串行數據變成并行數據送往CPU,由CPU進行處理。 (3)控制數據的傳輸速率 接口應具備對數據傳輸率波特率的控制選擇能力,即具有波特率發(fā)生器。 (4)進行傳送錯誤檢測 在發(fā)送時,對傳送的數據自動生成校驗位或校驗碼,在接收端能檢查校驗位或校驗 碼,以確定傳送中是否有誤碼。,近距離傳送電路 (比如主板上的兩個芯片),串行通信線的連接:,微 機,接 口,調 制 解 調 器,調 制 解 調 器,接 口,微 機,電 話 分 機,電 話 分 機,遠距離傳送電路,數字信號通過調制器變成模擬信號通過電話線傳送到對方,接收方通過解調器將模擬信號轉換成數字信號接收。,5.常用串口與串口標準,常用串口 設備級:COM、USB 芯片級:SPI、I2C RS-232標準串口的形式p136 電平轉換芯片MAX232 TTL電平和RS-232電平的轉換p137 單片機串口通信接口電路,串行通信接口,串行擴展接口,串行通信接口總線標準,計算機通信主要采用異步串行通信方式,常用的異步總線標準有三種: RS-232(RS-232A RS-232B RS-232C) RS-449 (RS422 RS423 RS485) 20mA電流環(huán) 這里重點介紹RS-232 RS-232C:速率:20Kbit/S, 最大通信距離 : 15m RS422: 10Mbit/s, : 300m 90Kbit/s, :1200m,RS232C,美國電子工業(yè)協(xié)會(EIA)公布的一種異步通信標準。 RS232C標準是:P135 設備之間通信的距離不大于15米 最大傳輸速率20Kb/S 采用負邏輯:“1” 3V 15V “0” +3V + 15V 不帶負載時輸出電平:25V +25V 輸出短路電流: 0.5A 最大負載電容: 2500pF 當計算機采用RS232標準時必須通過電平轉換,MAX232 是EIA和TTL電平轉換芯片。內部具有電壓提升電路,并有兩路接收器和發(fā)送器。其連線和引腳如圖,T1IN,T2IN,R1OUT,R2OUT,V+,V-,T1OUT,T2OUT,R1IN,R2IN,+5V,1.0,1.0,1.0,1.0,1.0,+10V,-10V,TTL/CMOS,TTL/CMOS,RS-232,RS-232,VCC,V+,V-,T2OUT,T1OUT,R2IN,VCC,R1IN,R1OUT,T1IN,T2IN,R2OUT,GND,MAX232,MAX232 連線圖,MAX232 引腳圖,電路圖 實物圖,6MCS51的串行通信接口 MCS51單片機內部集成有一個UART,用于全雙工 方式的串行通信,可以同時發(fā)送、接收數據。它有兩個互 相獨立的接收、發(fā)送緩沖器,這兩個緩沖器同名SBUF, 共用一個地址號(99H)。 發(fā)送SBUF:只能寫,不能讀; SBUF = a; 接收SBUF:只能讀,不能寫。 a = SBUF; 串行接口有四種工作方式,有的工作方式時其波特率 是可變的。用戶可以用軟件編程的方法在串行控制寄存器 SCON中寫入相應的控制字就可改變串行口的工作方式。,發(fā)送 SBUF (99H),門,8,8,圖8.7 串行口

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論