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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論