版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
4.1MCS-51單片機(jī)的中斷系統(tǒng)4.2定時(shí)/計(jì)數(shù)器4.3串行通信接口第4章中斷、定時(shí)與串行通信4.1MCS-51單片機(jī)的中斷系統(tǒng)4.1.1中斷的概念計(jì)算機(jī)暫時(shí)中止正在執(zhí)行的主程序,轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,并在中斷服務(wù)程序執(zhí)行完了之后能自動(dòng)回到原主程序處繼續(xù)執(zhí)行,這個(gè)過程叫做“中斷”。中斷需要解決兩個(gè)主要問題:一是如何從主程序轉(zhuǎn)到中斷服務(wù)程序;二是如何從中斷服務(wù)程序返回主程序。
大體說來,采用中斷系統(tǒng)改善了計(jì)算機(jī)的性能,主要表現(xiàn)在以下幾個(gè)方面:
(1)有效地解決了快速CPU與慢速外設(shè)之間的矛盾,可使CPU與外設(shè)并行工作,大大提高了工作效率。
(2)可以及時(shí)處理控制系統(tǒng)中許多隨機(jī)產(chǎn)生的參數(shù)與信息,即計(jì)算機(jī)具有實(shí)時(shí)處理的能力,從而提高了控制系統(tǒng)的性能。
(3)使系統(tǒng)具備了處理故障的能力,提高了系統(tǒng)自身的可靠性。4.1.2中斷源所謂中斷源就是引起中斷的事件,亦即是什么部件要求中斷。對于各種計(jì)算機(jī)來說,其中斷源的允許數(shù)目是不一樣的,例如Z80允許128個(gè)中斷源(不包括非屏蔽中斷),而8086/8088則允許256個(gè)中斷源。MCS-51單片機(jī)相對來說較為簡單,只提供了5個(gè)中斷源:2個(gè)外部中斷請求和個(gè)片內(nèi)定時(shí)器/計(jì)數(shù)器T0和T1的溢出中斷請求TF0和TF1及串行口中斷請求TI或RI(合為一個(gè)中斷源)。MCS-51單片機(jī)5個(gè)中斷源的中斷請求信號分別鎖存在特殊功能寄存器TCON和SCON中:
(1)TCON為定時(shí)/計(jì)數(shù)器控制寄存器,字節(jié)地址為88H,其中鎖存的中斷源請求標(biāo)志如表4―1所示。
表4―1TCON鎖存的中斷源(2)SCON串行口控制寄存器,字節(jié)地址為98H。
SCON的低2位鎖存串行口的接收中斷和發(fā)送中斷標(biāo)志,其格式如表4―2所示。表4―2SCON鎖存的中斷源TI:串行口發(fā)送中斷標(biāo)志。在串行口以方式0發(fā)送時(shí),每當(dāng)發(fā)送完8位數(shù)據(jù)后,由硬件置位TI;若以方式1、2、3發(fā)送時(shí),在發(fā)送停止位的開始時(shí)置位TI。TI=1表示串行口發(fā)送器正在向CPU申請中斷。值得注意的是當(dāng)CPU響應(yīng)該中斷后,轉(zhuǎn)向中斷服務(wù)程序時(shí)并不復(fù)位TI,TI必須由用戶在中斷服務(wù)程序中用軟件清0(可用CLRTI或其它指令)。RI:串行口接收中斷標(biāo)志。若串行口接收器允許接收并以方式0工作,則每當(dāng)接收到第8位數(shù)據(jù)時(shí)置位RI;若以方式1、2、3工作,且SM2=0時(shí),則每當(dāng)接收器接收到停止位的中間時(shí)置位RI;當(dāng)串行口以方式2或方式3工作,且SM2=1時(shí),僅當(dāng)接收到的第9位數(shù)據(jù)RB8為1后,同時(shí)還要接收到停止位的中間時(shí)置位RI。RI為1表示串行口接收器正向CPU申請中斷,同樣RI必須由用戶在中斷服務(wù)程序中清0。8031復(fù)位后,SCON也被清0。4.1.3中斷的優(yōu)先級如果正在執(zhí)行主程序時(shí)只有1個(gè)中斷源請求中斷,而這時(shí)CPU又是對中斷開放的,那么這個(gè)中斷立即得到響應(yīng)。然而由于中斷是隨機(jī)產(chǎn)生的,中斷源一般又不止1個(gè),因此往往會出現(xiàn)這樣的情況:幾個(gè)中斷源同時(shí)請求中斷;或者當(dāng)某一個(gè)中斷正在響應(yīng)中(即正在執(zhí)行該中斷源的中斷服務(wù)程序),又有其它的中斷源請求中斷,這時(shí)中斷系統(tǒng)應(yīng)如何處理呢?在一般情況下,首先把各個(gè)中斷源分成若干個(gè)優(yōu)先級,然后再按如下原則進(jìn)行處理:(1)不同級的中斷源同時(shí)申請中斷時(shí)——先高后低;
(2)同級的中斷源同時(shí)申請中斷時(shí)——事先規(guī)定;
(3)處理低級中斷又收到高級中斷請求時(shí)——停低轉(zhuǎn)高;
(4)處理高級中斷又收到低級中斷請求時(shí)——高不理低。
MCS-51單片機(jī)的中斷系統(tǒng)對優(yōu)先級的控制比較簡單,只規(guī)定了兩個(gè)中斷優(yōu)先級,對于每一個(gè)中斷源均可編程為高優(yōu)先級中斷或低優(yōu)先級中斷。在同1個(gè)優(yōu)先級中,對5個(gè)中斷源的優(yōu)先次序安排如下:
外部中斷0(IE0)
定時(shí)器/計(jì)數(shù)器T0溢出中斷(TF0)
外部中斷1(IE1)
定時(shí)器/計(jì)數(shù)器T1溢出中斷(TF1)
串行口中斷(RI+TI)MCS-51單片機(jī)中有1個(gè)中斷優(yōu)先級寄存器IP,字節(jié)地址為B8H。對于每1個(gè)中斷源,均可通過對IP的設(shè)置來確定其優(yōu)先等級,置1為高優(yōu)先級,清0為低優(yōu)先級。
IP寄存器的格式如表4―3所示。最高優(yōu)先級最低優(yōu)先級表4―3中斷優(yōu)先級寄存器IP的格式其中:PX0:外部中斷0優(yōu)先級控制位。PT0:定時(shí)器0中斷優(yōu)先級控制位。PX1:外部中斷1優(yōu)先級控制位。PT1:定時(shí)器1中斷優(yōu)先級控制位。PS:串行口中斷優(yōu)先級控制位。上面優(yōu)先級控制位規(guī)定1為高優(yōu)先級,0為低優(yōu)先級。4.1.4中斷響應(yīng)的條件、過程與時(shí)間
1.中斷響應(yīng)的條件單片機(jī)響應(yīng)中斷的條件為中斷源有請求(中斷允許寄存器IE相應(yīng)位置1),且CPU開中斷(即EA=1)。這樣,在每個(gè)機(jī)器周期內(nèi),單片機(jī)對所有中斷源都進(jìn)行順序檢測,并可在任1個(gè)周期的S6期間,找到所有有效的中斷請求,還對其優(yōu)先級進(jìn)行排隊(duì)。但是,必須滿足下列條件:(1)無同級或高級中斷正在服務(wù);
(2)現(xiàn)行指令執(zhí)行到最后1個(gè)機(jī)器周期且已結(jié)束;
(3)若現(xiàn)行指令為RETI或需訪問特殊功能寄存器IE或IP的指令時(shí),執(zhí)行完該指令且緊隨其后的另1條指令也已執(zhí)行完。單片機(jī)便在緊接著的下1個(gè)機(jī)器周期的S1期間響應(yīng)中斷。否則,將丟棄中斷查詢的結(jié)果。2.中斷響應(yīng)過程單片機(jī)一旦響應(yīng)中斷,首先對相應(yīng)的優(yōu)先級有效觸發(fā)器置位。然后執(zhí)行1條由硬件產(chǎn)生的子程序調(diào)用指令,把斷點(diǎn)地址壓入堆棧,再把與各中斷源對應(yīng)的中斷服務(wù)程序的入口地址送入程序計(jì)數(shù)器PC,同時(shí)清除中斷請求標(biāo)志(串行口中斷和外部電平觸發(fā)中斷除外),從而程序便轉(zhuǎn)移到中斷服務(wù)程序。以上過程均由中斷系統(tǒng)自動(dòng)完成。各中斷源所對應(yīng)的中斷服務(wù)程序的入口地址如下:中斷源入口地址外部中斷0003H定時(shí)器T0中斷000BH外部中斷0013H定時(shí)器T1中斷001BH串行口中斷0023HCPU從上面相應(yīng)的地址開始執(zhí)行中斷服務(wù)程序直到遇到1條RETI指令為止。RETI指令表示中斷服務(wù)程序的結(jié)束。CPU執(zhí)行該指令,一方面清除中斷響應(yīng)時(shí)所置位的優(yōu)先級有效觸發(fā)器;另一方面從堆棧棧頂彈出斷點(diǎn)地址送入程序計(jì)數(shù)器PC,從而返回主程序。若用戶在中斷服務(wù)程序的開始安排了保護(hù)現(xiàn)場指令(一般均為相應(yīng)寄存器內(nèi)容入棧或更換工作寄存器區(qū)),則在RETI指令前應(yīng)有恢復(fù)現(xiàn)場指令(相應(yīng)寄存器內(nèi)容出?;驌Q回原工作寄存器區(qū))。3.中斷響應(yīng)時(shí)間所謂中斷響應(yīng)時(shí)間是指從查詢中斷請求標(biāo)志位到轉(zhuǎn)入中斷服務(wù)程序入口地址所需的機(jī)器周期數(shù)(對單一中斷源而言)。響應(yīng)中斷最短需要3個(gè)機(jī)器周期。若CPU查詢中斷請求標(biāo)志的周期正好是執(zhí)行1條指令的最后1個(gè)機(jī)器周期,則不需等待就可以響應(yīng)。而響應(yīng)中斷執(zhí)行1條長調(diào)用指令需要2個(gè)機(jī)器周期,加上查詢的1個(gè)機(jī)器周期,一共需要3個(gè)機(jī)器周期才開始執(zhí)行中斷服務(wù)程序。4.1.5MCS-51單片機(jī)的中斷系統(tǒng)
MCS-51系列單片機(jī)的中斷系統(tǒng)屬于8位單片機(jī)中功能較強(qiáng)的1種中斷系統(tǒng),它可以提供5個(gè)中斷源,每個(gè)中斷源有兩個(gè)中斷優(yōu)先級別可供選擇,可實(shí)現(xiàn)兩級中斷服務(wù)程序嵌套。此外,所有中斷均可由軟件設(shè)定為允許中斷或禁止中斷,也就是說,用戶可以用關(guān)中斷指令(或復(fù)位)來屏蔽所有的中斷請求,也可以用開中斷指令使CPU接受中斷請求。MCS-51單片機(jī)的中斷系統(tǒng)結(jié)構(gòu)示意圖如圖4―1所示。圖4―1MCS-51的中斷系統(tǒng)4.1.6外部中斷及中斷請求的撤除
1.外部中斷
MCS-51單片機(jī)的中斷系統(tǒng)有2個(gè)外部中斷源,引腳信號為和(即P3.2和P3.3)。其中斷請求觸發(fā)信號有電平觸發(fā)和邊沿觸發(fā)兩種,當(dāng)TCON寄存器中的IT0位和IT1位為“0”時(shí)采用電平觸發(fā);為“1”時(shí)采用邊沿觸發(fā)。2.中斷請求的撤除
CPU響應(yīng)中斷請求后,在中斷返回(執(zhí)行RETI指令)前,必須撤除請求,否則會錯(cuò)誤地再一次引起中斷過程。如前所述,對于定時(shí)器T0與T1的中斷請求及邊沿觸發(fā)方式的外部中斷0和1來說,CPU在響應(yīng)中斷后用硬件清除了相應(yīng)的中斷請求標(biāo)志TF0、TF1、IE0與IE1,即自動(dòng)撤除了中斷請求。
對于電平觸發(fā)的外部中斷,由于CPU對INT0、INT1引腳沒有控制作用,也沒有相應(yīng)的中斷請求標(biāo)志位,因此需要外接電路來撤除中斷請求信號。圖4-2是可行的方案之一,外部中斷請求信號通過D觸發(fā)器加到單片機(jī)INT0或INT1引腳上。當(dāng)外部中斷信號使D觸發(fā)器的CLK端發(fā)生正跳變時(shí),由于D端接地,Q端輸出為0,因此向單片機(jī)發(fā)出中斷請求。CPU響應(yīng)中斷后,利用一根口線(如P1.0)作應(yīng)答線。在中斷服務(wù)程序用以下兩條指令:
ANLP1,#0FEH
ORLP1,#01H來撤除中斷請求。第1條指令使P1.0為0,而P1口的其它各位的狀態(tài)不變。由于P1.0接至D觸發(fā)器的置“1”端(S),故D觸發(fā)器的Q=1,從而撤除了中斷請求信號。第2條指令又使P1.0為1,即S=1,使以后產(chǎn)生新的外部中斷請求信號又能向單片機(jī)申請中斷。
圖4―2外部中斷請求(電平方式)的撤除4.1.7中斷程序舉例在中斷服務(wù)程序編程時(shí),首先要對中斷系統(tǒng)進(jìn)行初始化,也就是對幾個(gè)特殊功能寄存器的有關(guān)控制位進(jìn)行賦值。具體來說,就是要完成下列工作:
(1)開中斷和允許中斷源中斷;(2)確定各中斷源的優(yōu)先級;(3)若是外部中斷,則應(yīng)規(guī)定是電平觸發(fā)還是邊沿觸發(fā)。
例1:若規(guī)定外部中斷0為電平觸發(fā)方式,高優(yōu)先級,試寫出有關(guān)的初始化程序。解:一般可采用位操作指令來實(shí)現(xiàn):
SETBEA;開中斷
SETBEX0;允許外中斷0中斷
SETBPX0;外中斷0定為高優(yōu)先級
CLRIT0;電平觸發(fā)
例2:若規(guī)定外部中斷1為邊沿觸發(fā)方式,低優(yōu)先級,在中斷服務(wù)程序中將寄存器B的內(nèi)容左環(huán)移一位,B的初值設(shè)為01H。試編寫主程序與中斷服務(wù)程序。解:程序如下
ORG0000H;主程序
LJMPMAIN;主程序轉(zhuǎn)至MAIN處
ORG0013H;中斷服務(wù)程序
LJMPINT;中斷服務(wù)程序轉(zhuǎn)至INT處MAIN:SETBEA;開中斷
SETBEX1;允許外中斷1中斷
CLRPX1;設(shè)為低優(yōu)先級
SETBIT1;邊沿觸發(fā)
MOVB,#01H;設(shè)B的初值HALT:SJMPHALT;暫停等待中斷INT:MOVA,B;A←B
RLA;左環(huán)移一位
MOVB,A;回送
RETI;中斷返回
有以下幾點(diǎn)需要說明:
(1)由于從0003H到0023H之間分布了5個(gè)中斷源的入口地址,因此在一般情況下,主程序與中斷服務(wù)程序均用長轉(zhuǎn)移指令移至其它區(qū)域。
(2)本例題未考慮保護(hù)現(xiàn)場與恢復(fù)現(xiàn)場的問題,是否需要,應(yīng)視具體情況而定。
(3)本例是單重中斷,若為多級中斷,則情況要復(fù)雜得多。
(4)主程序處于暫停等待中斷只是為了舉例方便起見,在實(shí)際的單片機(jī)控制系統(tǒng)中一般是不會這樣用的。
(5)關(guān)于定時(shí)器中斷與串行中斷請參閱有關(guān)章節(jié)。4.2定時(shí)/計(jì)數(shù)器
在實(shí)際的控制系統(tǒng)中常要求有外部實(shí)時(shí)時(shí)鐘,以實(shí)現(xiàn)定時(shí)或延時(shí)控制;還要求有外部計(jì)數(shù)器,以實(shí)現(xiàn)對外界事件進(jìn)行計(jì)數(shù)。比如,在單片機(jī)控制的電力拖動(dòng)系統(tǒng)中,控制的對象為電動(dòng)機(jī),為了實(shí)現(xiàn)閉環(huán)控制,就需要定時(shí)地對轉(zhuǎn)速進(jìn)行采樣。若采用光電脈沖發(fā)生器作為檢測元件,則先應(yīng)對每個(gè)采樣周期中光電脈沖發(fā)生器發(fā)出的脈沖進(jìn)行計(jì)數(shù),然后再通過實(shí)時(shí)計(jì)算求得對應(yīng)的轉(zhuǎn)速。
對于定時(shí)/計(jì)數(shù)器來說,不管是獨(dú)立的定時(shí)器芯片還是單片機(jī)內(nèi)的定時(shí)器,大都有以下特點(diǎn):
(1)定時(shí)/計(jì)數(shù)器有多種工作方式,可以是計(jì)數(shù)方式也可以是定時(shí)方式。
(2)定時(shí)/計(jì)數(shù)器的計(jì)數(shù)值是可變的,當(dāng)然對計(jì)數(shù)的最大值有一定限制,這取決于計(jì)數(shù)器的位數(shù)。計(jì)數(shù)的最大值也就限制了定時(shí)的最大值。
(3)可以按照規(guī)定的定時(shí)或計(jì)數(shù)值,在定時(shí)時(shí)間到或者計(jì)數(shù)終止時(shí),發(fā)出中斷申請,以便實(shí)現(xiàn)定時(shí)控制。4.2.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)及工作原理
MCS-51單片機(jī)的定時(shí)/計(jì)數(shù)器(以下簡稱T/C)的結(jié)構(gòu)如圖4―3所示。由圖4―3可見T/C的核心是1個(gè)加1計(jì)數(shù)器,它的輸入脈沖有兩個(gè)來源:一個(gè)是外部脈沖源,另一個(gè)是系統(tǒng)機(jī)器周期(時(shí)鐘振蕩器經(jīng)12分頻以后的脈沖信號)。
當(dāng)T/C處于定時(shí)方式時(shí),加1計(jì)數(shù)器在每個(gè)機(jī)器周期加1,因此,也可以把它看作在累計(jì)機(jī)器周期。由于一個(gè)機(jī)器周期包含12個(gè)振蕩周期,所以它的計(jì)數(shù)速率是振蕩頻率的1/12。圖4―3中有2個(gè)模擬的位開關(guān),前者決定了T/C的工作狀態(tài):當(dāng)開關(guān)處于上方時(shí)為定時(shí)狀態(tài),處于下方時(shí)為計(jì)數(shù)狀態(tài)。工作狀態(tài)的選擇由特殊功能寄存器TMOD的C/T位來決定。圖4―3定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)框圖16位的加1計(jì)數(shù)器由兩個(gè)8位的特殊功能寄存器THx或TLx組成(X=0、1)。它們可被程控為不同的組合狀態(tài)。(13位、16位、兩個(gè)分開的8位等),從而形成T/C不同的4種工作方式,這只要用指令改變TMOD(工作方式控制寄存器)的相應(yīng)位即可。單片機(jī)中微處理器μp、特殊功能寄存器TCON和TMOD與定時(shí)/計(jì)數(shù)器T0、T1之間的關(guān)系如圖4―4所示,它反映了T/C在單片機(jī)中的位置和總體結(jié)構(gòu)。圖4―4定時(shí)/計(jì)數(shù)器與TMOD、TCON的結(jié)構(gòu)框圖4.2.2定時(shí)/計(jì)數(shù)器的方式和控制寄存器
MCS-51單片機(jī)有2個(gè)特殊功能寄存器TMOD和TCON:TMOD用于設(shè)置T/C的工作方式;TCON用于控制定時(shí)器T0、T1的啟動(dòng)與停止,并包含了定時(shí)器的狀態(tài)。
1.定時(shí)器工作方式寄存器TMOD
定時(shí)器工作方式寄存器TMOD用于選擇定時(shí)器的工作方式,它的高4位控制定時(shí)器T1,低4位控制定時(shí)器T0。TMOD中各位的定義如下:
其中::T/C功能選擇位,當(dāng)=1時(shí)為計(jì)數(shù)方式;當(dāng)=0時(shí)為定時(shí)方式。
M1M0:T/C工作方式定義位,其具體定義方式如表4―4所示。表4―4定時(shí)/計(jì)數(shù)器工作方式GATE:門控制位,用于控制定時(shí)器的啟動(dòng)是否受外部中斷源信號的影響。GATE=0時(shí),與外部中斷無關(guān),由TCON寄存器中的TRx位控制啟動(dòng)。GATE=1時(shí),由控制位TRx和引腳共同控制啟動(dòng),只有在沒有外部中斷請求信號的情況下(即外部中斷引腳=1時(shí)),才允許定時(shí)器啟動(dòng)。2.定時(shí)器控制寄存器TCONTCON控制寄存器各位的定義如下:
其中:
TF0(TF1):為T0(T1)定時(shí)器溢出中斷標(biāo)志位。當(dāng)T0(T1)計(jì)數(shù)溢出時(shí),由硬件置位,并在允許中斷的情況下,發(fā)出中斷請求信號。當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動(dòng)將該位清0。
TR0(TR1):為T0(T1)運(yùn)行控制位。當(dāng)TR0(TR1)=1時(shí)啟動(dòng)T0(T1);TR0(TR1)=0時(shí)關(guān)閉T0(T1)。該位由軟件進(jìn)行設(shè)置。
TCON的低4位與外部中斷有關(guān),可參閱中斷一節(jié)的有關(guān)內(nèi)容。
TCON寄存器在復(fù)位時(shí)也被清0。4.2.3定時(shí)/計(jì)數(shù)器的工作方式
MCS-51單片機(jī)的T/C有4種工作方式,分別由TMOD寄存器中的M1、M0兩位的二進(jìn)制編碼所決定。
1.方式0
當(dāng)M1M0=00時(shí),T/C設(shè)定為工作方式0,構(gòu)成13位的T/C。其邏輯結(jié)構(gòu)如圖4―5所示。在此工作方式下,T/C構(gòu)成一個(gè)13位的計(jì)數(shù)器,由THx的8位和TLx的低5位組成,TLx的高3位未用,滿計(jì)數(shù)值為213。T/C啟動(dòng)后立即加1計(jì)數(shù),當(dāng)TLx的低5位計(jì)數(shù)溢出時(shí)向THx進(jìn)位,THx計(jì)數(shù)溢出則對相應(yīng)的溢出標(biāo)志位TFx置位,以此作為定時(shí)器溢出中斷標(biāo)志。當(dāng)單片機(jī)進(jìn)入中斷服務(wù)程序時(shí),由內(nèi)部硬件自動(dòng)清除該標(biāo)志。圖4―5T/C方式0的邏輯結(jié)構(gòu)圖2.方式1
當(dāng)M1M0=01時(shí),T/C設(shè)定為工作方式1,構(gòu)成16位定時(shí)/計(jì)數(shù)器,其中THx作為高8位,TLx作為低8位,滿計(jì)數(shù)值為216,其余同方式0類似。其邏輯結(jié)構(gòu)如圖4―6所示。圖4―6T/C方式1的邏輯結(jié)構(gòu)圖3.方式2
當(dāng)M1M0=10時(shí),T/C工作在方式2,構(gòu)成1個(gè)自動(dòng)重裝載的T/C,滿計(jì)數(shù)值為28。在方式0和方式1中,當(dāng)計(jì)數(shù)滿后,若要進(jìn)行下一次定時(shí)/計(jì)數(shù),需用軟件向THx和TLx重新予置計(jì)數(shù)初值。在方式2中THx和TLx被當(dāng)作兩個(gè)8位計(jì)數(shù)器,計(jì)數(shù)過程中,THx寄存8位初值并保持不變,由TLx進(jìn)行8位計(jì)數(shù)。計(jì)數(shù)溢出時(shí),除產(chǎn)生溢出中斷請求外,還自動(dòng)將THx中的初值重新裝到TLx中去,即重裝載。除此之外,方式2也同方式0類似。其邏輯結(jié)構(gòu)如圖4―7所示。
圖4―7T/C方式2的邏輯結(jié)構(gòu)圖4.方式3
方式3只適用于定時(shí)器T0。當(dāng)定時(shí)器T1處于方式3時(shí)相當(dāng)于TR1=0,停止計(jì)數(shù)。當(dāng)T0工作在方式3時(shí),TH0和TL0被拆成2個(gè)獨(dú)立的8位計(jì)數(shù)器。這時(shí),TL0既可作為定時(shí)器使用,也可作為計(jì)數(shù)器使用,它占用了定時(shí)器T0所使用的控制位(C/、GATE、TR0、TF0),其功能和操作與方式0或方式1完全相同;而TH0只能作定時(shí)器用,并且占據(jù)了定時(shí)器T1的兩個(gè)控制信號TR1和TF1。在這種情況下,定時(shí)器T1雖仍可用于方式0、1、2,但不能使用中斷方式。方式3下的定時(shí)器T0和T1的邏輯結(jié)構(gòu)如圖4-8所示。圖4―8T/C方式3的邏輯結(jié)構(gòu)圖4.2.4定時(shí)/計(jì)數(shù)器應(yīng)用舉例由于MCS-51單片機(jī)的定時(shí)/計(jì)數(shù)器是可編程的,因此在使用之前需要進(jìn)行初始化。在編程時(shí)主要注意兩點(diǎn):第一要能正確寫入控制字;第二能進(jìn)行計(jì)數(shù)初值的計(jì)算。一般情況下,包括以下幾個(gè)步驟:
(1)確定工作方式,即對TMOD寄存器進(jìn)行賦值。
(2)計(jì)算計(jì)數(shù)初值,并寫入寄存器TH0、TL0或TH1、TL1中。
(3)根據(jù)需要,置位ETx允許T/C中斷。
(4)置位EA使CPU開中斷(需要時(shí))。
(5)置位TRx啟動(dòng)計(jì)數(shù)。
計(jì)數(shù)初值的計(jì)算方法如下:由于定時(shí)/計(jì)數(shù)器是以加1的方式計(jì)數(shù),因此同常用的減1計(jì)數(shù)器的算法不同。在定時(shí)方式下:假定時(shí)間常數(shù)為Tc,定時(shí)時(shí)間為T,而T=Tc·Tp,則時(shí)間常數(shù)為
(4―1)
其中4p為機(jī)器周期,即12/晶振頻率。應(yīng)裝入定時(shí)/計(jì)數(shù)器的初值為
X=2n-Tc(n為計(jì)數(shù)器的位數(shù))(5―2)
例1:若晶振頻率為6MHz,試計(jì)算MCS-51單片機(jī)定時(shí)/計(jì)數(shù)器的最小定時(shí)時(shí)間和最大定時(shí)時(shí)間。解:先確定機(jī)器周期:①計(jì)算最小定時(shí)時(shí)間:對于定時(shí)器的幾種工作方式來說,最小定時(shí)時(shí)間都是一樣的,即Tmin=Tc·Tp=1×2μs=2μs在計(jì)數(shù)方式下:假定計(jì)數(shù)值為N,則應(yīng)裝入的計(jì)數(shù)初值為
X=2n-N(n同上)晶振頻率②計(jì)算最大定時(shí)時(shí)間:當(dāng)T/C工作在方式1下的定時(shí)時(shí)間最長,則最大定時(shí)時(shí)間為
Tmax=Tc·Tp=216×2μs=131072μs=131ms
例2:若單片機(jī)的晶振頻率為6MHz,要求定時(shí)/計(jì)數(shù)器T0產(chǎn)生100ms的定時(shí),試確定計(jì)數(shù)初值以及TMOD寄存器的內(nèi)容。解:當(dāng)晶振頻率為6MHz時(shí),產(chǎn)生100ms的定時(shí)接近最大值(131ms),故只能采用方式1(16位定時(shí)器)。機(jī)器周期為:晶振頻率時(shí)間常數(shù)為:計(jì)數(shù)初值為:
設(shè)置TMOD方式字:對于T0來說:M1M0=01、、GATE=0。由于T1不用,可任意設(shè)置,現(xiàn)取為全0,因此,TMOD寄存器的內(nèi)容為:
TMOD=00000001B=01H
例3:利用定時(shí)/計(jì)數(shù)器T0通過P1.0引腳輸出周期為2ms的方波,設(shè)晶振頻率為12MHz。試確定計(jì)數(shù)初值、TMOD內(nèi)容及編制相應(yīng)程序。解:若要產(chǎn)生周期為2ms的方波,只要每1ms將信號的幅值由0變到1或由1變到0即可,可采用取反指令CPL來實(shí)現(xiàn)。為了提高CPU的效率,可采用定時(shí)中斷的方式,每1ms產(chǎn)生一次中斷,在中斷服務(wù)程序中將輸出信號取反即可。定時(shí)器T0的中斷入口地址為000BH。①計(jì)算計(jì)數(shù)初值:對于定時(shí)1ms來說,用定時(shí)器方式0(13位定時(shí)器)就可實(shí)現(xiàn)。
機(jī)器周期為:晶振頻率時(shí)間常數(shù)為:計(jì)數(shù)初值為:則其高8位為EOH,低5位為18H,故TH0=E0H,TL0=18H。②確定TMOD方式字:對于定時(shí)器T0來說,M1M0=00H、=0、GATE=0。定時(shí)器T1不用,取為全0。于是
TMOD=00000000B=00H③程序設(shè)計(jì):
ORG000BH;T0中斷服務(wù)程序入口
LJMPINT;轉(zhuǎn)至INT處
ORG2000H;主程序
MOVTMOD,#00H;置T0為定時(shí)方式0MOVTH0,#0E0H
;設(shè)置計(jì)數(shù)初值MOVTL0,#18H
SETBEA
;CPU開中斷
SETBET0
;允許T0中斷
SETBTR0
;啟動(dòng)T0HALT:SJMP$
;暫停,等待中斷INT:CPLP1.0
;輸出方波
MOVTH0,#0E0H;重新裝入計(jì)數(shù)初值
MOVTL0,#18H
RETI
;中斷返回
需要說明的是:以上程序在定時(shí)器初始化之后,即進(jìn)入虛擬的主程序,暫停等待定時(shí)器溢出中斷。這種主程序處于暫停狀態(tài)等待中斷的方法一般只用于例題程序,而在實(shí)際系統(tǒng)中則很少采用,因?yàn)檫@涉及到CPU的效率。還有一點(diǎn)要注意:當(dāng)采用方式0、1、3時(shí),只要不關(guān)閉定時(shí)/計(jì)數(shù)器,那么每當(dāng)計(jì)數(shù)器回0溢出時(shí),都需要重新裝入計(jì)數(shù)初值,以保證計(jì)數(shù)值不變。
例4:用查詢方式產(chǎn)生例3中所要求的方波。解:程序和例3很相似,不同之處為不需要中斷和中斷服務(wù)程序。查詢的對象是定時(shí)器T0的溢出標(biāo)志TF0,在計(jì)數(shù)過程中,TF0為0;當(dāng)定時(shí)時(shí)間到,計(jì)數(shù)器溢出使TF0置1。由于未采用中斷,TF0置1后不會自動(dòng)復(fù)位為0,故需用指令使TF0復(fù)位為0。計(jì)數(shù)初值的計(jì)算以及TMOD的選取同例3。
MOVTMOD,#00H;置定時(shí)器T0為方式0MOVTH0,#0E0H;設(shè)置計(jì)數(shù)初值
MOVTL0,#18HMOVIE,#00H;禁止中斷
SETBTR0;啟動(dòng)T0定時(shí)LOOP:JBCTF0,LOOP1;查詢計(jì)數(shù)溢出
SJMPLOOP;TF0=0,則反復(fù)查詢LOOP1:CPLP1.0;輸出方波
MOVTH0,#0E0H;重新裝入計(jì)數(shù)初值
MOVTL0,#18HSJMPLOOP;重復(fù)循環(huán)
例5:軟件擴(kuò)展定時(shí)設(shè)片內(nèi)RAM的70H單元的初值為01H,要求每1秒鐘將其內(nèi)容左環(huán)移一位,采用定時(shí)器T1,晶振頻率為6MHz。解:當(dāng)晶振頻率為6MHz時(shí),一個(gè)定時(shí)器的最大定時(shí)值為131ms,現(xiàn)要求定時(shí)1s,已超過該最大定時(shí)值,故只能采用定時(shí)器定時(shí)和軟件計(jì)數(shù)相結(jié)合的方法來擴(kuò)展定時(shí)時(shí)間。在本例中,要獲得1s定時(shí),可將定時(shí)器的定時(shí)值設(shè)為100ms,另設(shè)一個(gè)軟件計(jì)數(shù)器(常用Rn寄存器),初值為10。
每100ms定時(shí)時(shí)間一到,產(chǎn)生定時(shí)溢出中斷,在中斷服務(wù)程序中首先使軟件計(jì)數(shù)器減1,若不為0,則立即退出中斷;若已減為0,說明1s定時(shí)時(shí)間已到,可進(jìn)入中斷處理。當(dāng)中斷處理完后,再重新設(shè)置軟件計(jì)數(shù)器。其它要求與前例類似。①計(jì)算計(jì)數(shù)初值:采用定時(shí)方式1,計(jì)數(shù)初值為:x=3CB0H(參閱例2)。②確定TMOD方式字:對于定時(shí)器T1來說,M1M0=01、=0、GATE=0,而定時(shí)器T0不用,取為全0。于是
TMOD=00010000B=10H③程序設(shè)計(jì):ORG001BH;T1中斷入口LJMPINT;轉(zhuǎn)至INT處ORG2000H;主程序MOVTMOD,#10H;T1工作于方式1MOVTH1#3CH;設(shè)置計(jì)數(shù)初值MOVTL1,#B0HSETBEA;CPU開中斷SETBET1;允許T1中斷SETBTR1;啟動(dòng)T1定時(shí)MOV70H,#01H;將初值送入70H單元中MOVR0,#0AH;設(shè)置軟件計(jì)數(shù)器HALT:SJMP$;暫停,等待中斷
INT:DJNZR0,NEXT;中斷服務(wù)程序
MOVA,70H;時(shí)間已到,將70H單元內(nèi)容送ARLA;左環(huán)移一位
MOV70H,A;回送
MOVR0,#0AH;重新設(shè)置軟件計(jì)數(shù)器NEXT:MOVTH1,#3CH;重新設(shè)置計(jì)數(shù)初值
MOVTL1,#B0HRETI;中斷返回
例6:設(shè)晶振頻率為6MHz、定時(shí)/計(jì)數(shù)器T0工作于方式3,TL0和TH0作為兩個(gè)獨(dú)立的8位定時(shí)器,要求TL0使P1.0產(chǎn)生400μs的方波,TH0使P1.1產(chǎn)生800μs的方波。解:當(dāng)采用方式3時(shí),對于TH0來說,需要借用定時(shí)器T1的控制信號。①計(jì)算計(jì)數(shù)初值:
X0=28-200×10-6/2×10-6=156=9CHX1=28-400×10-6/2×10-6=56=38H②確定TMOD方式字:對定時(shí)器T0來說,M1M0=11、=0、GATE=0,定時(shí)器T1不用,取為全0。于是
TMOD=00000011B=03H③程序設(shè)計(jì):
ORGMAIN;主程序
MAIN:MOVTMOD,#03H;T0工作于方式3MOVTL0,#9CH;置計(jì)數(shù)初值
MOVTH0,#38HSETBEA;CPU開中斷
SETBET0;允許T0中斷(用于TL0)SETBET1;允許T1中斷(用于TH0)SETBTR0;啟動(dòng)TL0SETBTR1;啟動(dòng)TH0HALT:SJMPHALT;暫停,等待中斷
ORG000BH;TL0中斷服務(wù)程序
CPLP1.0;P1.0取反
MOVTL0,#9CH;重新裝入計(jì)數(shù)初值
RETI;中斷返回
ORG001BH;TH0中斷服務(wù)程序
CPLP1.1;P1.1取反
MOVTH0,#38H;重新裝入計(jì)數(shù)初值
RETI;中斷返回4.3串行通信接口4.3.1串行通信的基本知識
1.并行通信與串行通信在實(shí)際應(yīng)用中,不但計(jì)算機(jī)與外部設(shè)備之間常常要進(jìn)行信息交換,而且計(jì)算機(jī)之間也需要交換信息,所有這些信息的交換均稱為“通信”。通信的基本方式分為并行通信和串行通信兩種。
并行通信是構(gòu)成1組數(shù)據(jù)的各位同時(shí)進(jìn)行傳送,例如8位數(shù)據(jù)或16位數(shù)據(jù)并行傳送。其特點(diǎn)是傳輸速度快,但當(dāng)距離較遠(yuǎn)、位數(shù)又多時(shí)導(dǎo)致了通信線路復(fù)雜且成本高。串行通信是數(shù)據(jù)一位接一位地順序傳送。其特點(diǎn)是通信線路簡單,只要一對傳輸線就可以實(shí)現(xiàn)通信(如電話線),從而大大地降低了成本,特別適用于遠(yuǎn)距離通信。缺點(diǎn)是傳送速度慢。圖4―9為以上兩種通信方式的示意圖。由圖4―9可知,假設(shè)并行傳送N位數(shù)據(jù)所需時(shí)間為T,那么串行傳送的時(shí)間至少為NT,實(shí)際上總是大于NT的。
圖4―9通信的兩種基本方式(a)并行通信;(b)串行通信
串行通信可分為異步傳送和同步傳送兩種基本方式。
1)異步傳送方式異步傳送的特點(diǎn)是數(shù)據(jù)在線路上的傳送不連續(xù)。在傳送時(shí),數(shù)據(jù)是以一個(gè)字符為單位進(jìn)行傳送的。它用一個(gè)起始位表示字符的開始,用停止位表示字符的結(jié)束。異步傳送的字符格式如圖4―10(a)所示。
一個(gè)字符由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位4個(gè)部分組成。起始位為0信號占1位;其后接著的就是數(shù)據(jù)位,它可以是5位、6位、7位或8位,傳送時(shí)低位在先、高位在后;再后面的1位為奇偶校驗(yàn)位,可要也可以不要;最后是停止位,它用信號1來表示字符的結(jié)束,可以是1位、1位半或2位。
圖4―10串行異步傳送的字符格式(a)字符格式;(b)有空閑位的字符格式
例如,采用串行異步通信方式傳送ASCII碼字符‘5’,規(guī)定為7位數(shù)據(jù)位,1位偶校驗(yàn)位,1位停止位,無空閑位。由于‘5’的ASCII碼為35H,其對應(yīng)7位數(shù)據(jù)位為0110101,如按低位在前、高位在后順序排列應(yīng)為1010110。前面加1位起始位,后面配上偶校驗(yàn)位1位0,最后面加1位停止位1,因此傳送的字符格式為0101011001,其對應(yīng)的波形如圖4―11所示。圖4―11傳送ASCII碼字符‘5’的波形圖
在串行異步傳送中,CPU與外設(shè)之間事先必須約定:①字符格式。雙方要事先約定字符的編碼形式、奇偶校驗(yàn)形式及起始位和停止位的規(guī)定。例如用ASCII碼通信,有效數(shù)據(jù)為7位,加1個(gè)奇偶校驗(yàn)位、1個(gè)起始位和1個(gè)停止位共10位。當(dāng)然停止位也可大于1位。②波特率(Baudrate)。波特率就是數(shù)據(jù)的傳送速率,即每秒鐘傳送的二進(jìn)制位數(shù),單位為位/秒。它與字符的傳送速率(字符/秒)之間存在如下關(guān)系:波特率=位/字符×字符/秒=位/秒要求發(fā)送端與接收端的波特率必須一致。
例如,假設(shè)字符傳送的速率為120字符/秒,而每1個(gè)字符為10位,那么傳送的波特率為
10位/字符×120字符/秒=1200位/秒=1200波特每1位二進(jìn)制位的傳送時(shí)間Td就是波特率的倒數(shù),例如上例中
Td=1/1200=0.833ms2)同步傳送在異步傳送中,每1個(gè)字符都要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,占用了一定的時(shí)間。為了提高傳送速度,有時(shí)就去掉這些標(biāo)志,而采用同步傳送,即1次傳送1組數(shù)據(jù)。在這1組數(shù)據(jù)的開始處要用同步字符SYN來加以指示,如圖4―12所示。
圖4―12同步傳送2.數(shù)據(jù)傳送方向串行通信的數(shù)據(jù)傳送方向有3種形式。
(1)單工方式。如圖4―13(a)所示,A端為發(fā)送站,B端為接收站,數(shù)據(jù)僅能從A站發(fā)至B站。
(2)半雙工方式。如圖4―13(b)所示,數(shù)據(jù)既可從A站發(fā)送到B站,也可以由B站發(fā)送到A站。不過在同一時(shí)間只能作1個(gè)方向的傳送。
(3)全雙工方式。如圖4―13(c)所示,每個(gè)站(A、B)既可同時(shí)發(fā)送,也可同時(shí)接收。
圖4―13串行通信的三種方式(a)單工方式;(b)半雙工方式;(c)全雙工方式3.信號的調(diào)制和解調(diào)計(jì)算機(jī)通信是1種數(shù)字信號的通信,如圖4―14所示。它要求傳送線的頻帶很寬,而在長距離通訊時(shí),通常是利用電話線來傳送的,該線不可能有這樣寬的頻帶。如果用數(shù)字信號經(jīng)過傳送線直接通訊,信號就會畸變,如圖4―15所示。圖4―14通訊信號示意圖圖4―15數(shù)字信號通過電話線傳送產(chǎn)生的畸變
因此要在發(fā)送端用調(diào)制器(Modulator)把數(shù)字信號轉(zhuǎn)換為模擬信號,在接收端用解調(diào)器(Demodulator)檢測此模擬信號,再把它轉(zhuǎn)換成數(shù)字信號,如圖4―16所示。
FSK(FrequencyShiftKeying)是1種常用的調(diào)制方法,它把數(shù)字信號的“1”與“0”調(diào)制成不同頻率的模擬信號,其工作原理如圖4―17所示。圖4―16調(diào)制與解調(diào)示意圖圖4―17FSK調(diào)制法原理圖4.數(shù)據(jù)終端與調(diào)制器的接口調(diào)制后的信號與數(shù)據(jù)終端連接時(shí),經(jīng)常使用EIARS-232C接口。它是目前最常用的1種串行通信接口。這是1種有25個(gè)管腳的連接器,不但它的每一個(gè)管腳的規(guī)定是標(biāo)準(zhǔn)的,而且對各種信號的電平規(guī)定也是標(biāo)準(zhǔn)的,因而便于互相連接。其最基本的最常用的信號規(guī)定如圖4―18所示。圖4―18RS-232C的引腳圖
其次,標(biāo)準(zhǔn)的另1個(gè)重要的含義是這些信號的電氣性能也是標(biāo)準(zhǔn)的。對各種信號的規(guī)定如下:
(1)在TXD和RXD線上:
MARK(即表示為1)=-3~-25VSPACE(即表示為0)=+3~+25V(2)在等線上:
ON=+3~+25VOFF=-3~-25V
顯然,EIARS-232C標(biāo)準(zhǔn)規(guī)定的信號電平及極性與TTL是不同的,需要經(jīng)過轉(zhuǎn)換,包括從TTL電平轉(zhuǎn)換為EIARS-232C電平,或從EIARS-232C電平轉(zhuǎn)換為TTL電平。由于目前大部分計(jì)算機(jī)都采用TTL電平,所以用EIARS-232C標(biāo)準(zhǔn)進(jìn)行串行通信時(shí),需要有一套轉(zhuǎn)換電路(接口電路)。1488和1489就是能實(shí)現(xiàn)從TTL電平轉(zhuǎn)換為RS-232C(發(fā)送器)電平及從RS-232C電平轉(zhuǎn)換為TTL(接收器)電平的器件,如圖4-19所示。該圖中EIA通信電纜的任何一個(gè)引腳能夠直接接至任何別的引腳而不會引起對發(fā)送器和接收器的損壞。圖4―19接收器和發(fā)送器電路
計(jì)算機(jī)和遠(yuǎn)方以及當(dāng)?shù)亟K端(用查詢方式交換信息)的連接示意圖如圖4-20所示。當(dāng)?shù)亟K端可直接通過EIARS-232C接口連接;而遠(yuǎn)方的終端則要經(jīng)過調(diào)制后通過電話線傳送,在數(shù)據(jù)終端與調(diào)制器之間用EIARS-232C接口。圖4―20計(jì)算機(jī)與遠(yuǎn)方終端和當(dāng)?shù)亟K端連接示意圖5.帶I2C總線的接口
1)I2C總線的主要特點(diǎn)
I2C總線是Philips公司推出的串行總線,整個(gè)系統(tǒng)僅靠數(shù)據(jù)線(SDA)和時(shí)鐘線(SCL)實(shí)現(xiàn)完善的全雙工數(shù)據(jù)傳輸,即CPU與各個(gè)外圍器件僅靠這兩條線實(shí)現(xiàn)信息交換。I2C總線系統(tǒng)與傳統(tǒng)的并行總線系統(tǒng)相比具有結(jié)構(gòu)簡單、可維護(hù)性好、易實(shí)現(xiàn)系統(tǒng)擴(kuò)展、易實(shí)現(xiàn)模塊化標(biāo)準(zhǔn)化設(shè)計(jì)、可靠性高等優(yōu)點(diǎn)。I2C總線的主要特點(diǎn)如下:(1)只要求兩條總線線路:一條串行數(shù)據(jù)線SDA,一條串行時(shí)鐘線SCL。(2)每個(gè)連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機(jī)/從機(jī)關(guān)系軟件設(shè)定地址,主機(jī)可以作為主機(jī)發(fā)送器或主機(jī)接收器。(3)它是一個(gè)真正的多主機(jī)總線,如果兩個(gè)或更多主機(jī)同時(shí)初始化,數(shù)據(jù)傳輸可以通過沖突檢測和仲裁防止數(shù)據(jù)被破壞。(4)串行的8位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kb/s,快速模式下可達(dá)400kb/s,高速模式下可達(dá)3.4Mb/s。(5)連接到相同總線的集成電路數(shù)量只受到總線的最大電容400pF限制。
2)I2C總線的基本結(jié)構(gòu)
I2C總線通過上拉電阻接正電源。當(dāng)總線空閑時(shí),兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號變低,即各器件的SDA及SCL都是線“與”關(guān)系。每個(gè)接到I2C總線上的器件都有唯一的地址。主機(jī)與其它器件間的數(shù)據(jù)傳送可以是由主機(jī)發(fā)送數(shù)據(jù)到其它器件,這時(shí)主機(jī)即為發(fā)送器,由總線上接收數(shù)據(jù)的器件則為接收器。I2C的總線結(jié)構(gòu)如圖4-21所示。圖4-21
I2C總線接口電路圖
3)I2C總線的信息傳送當(dāng)I2C總線沒有進(jìn)行信息傳送時(shí),數(shù)據(jù)線(SDA)和時(shí)鐘線(SCL)都為高電平。I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線上的信號為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。起始信號:在I2C總線工作過程中,當(dāng)SCL為高電平時(shí),SDA由高電平向低電平跳變,定義為起始信號,起始信號由主控機(jī)產(chǎn)生。停止信號:當(dāng)SCL為高電平時(shí),SDA由低電平向高電平跳變,定義為停止信號,此信號也只能由主控機(jī)產(chǎn)生。應(yīng)答信號:I2C總線傳送的每個(gè)字節(jié)為8位,受控的器件在接收到8位數(shù)據(jù)后,在第9個(gè)脈沖必須輸出低電平作為應(yīng)答信號,同時(shí),要求主控器在第9個(gè)時(shí)鐘脈沖位上釋放SDA線,以便受控器發(fā)出應(yīng)答信號,將SDA拉低,表示接收數(shù)據(jù)的應(yīng)答。如果在第9個(gè)脈沖收到受控器的非應(yīng)答信號,則表示停止數(shù)據(jù)的發(fā)送或接收。其次,每啟動(dòng)一次總線,傳輸?shù)淖止?jié)數(shù)沒有限制。主控件和受控器件都可以工作于接收和發(fā)送狀態(tài)??偩€必須由主器件控制,也就是說必須由主控器產(chǎn)生時(shí)鐘信號﹑起始信號、停止信號。在時(shí)鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保特穩(wěn)定,數(shù)據(jù)線上的數(shù)據(jù)狀態(tài)僅在時(shí)鐘為低電平期間才能改變,而當(dāng)時(shí)鐘線為高電平期間,數(shù)據(jù)線狀態(tài)的改變被用來表示起始和停止條件。圖4-22所示為總線的完整時(shí)序,在這里有一點(diǎn)要加以說明的,當(dāng)主控器接收數(shù)據(jù)時(shí),在最后一個(gè)數(shù)據(jù)字節(jié),必須發(fā)送一個(gè)非應(yīng)答信號,使受控器釋放數(shù)據(jù)線,以便主控器產(chǎn)生一個(gè)停止信號來終止總線的數(shù)據(jù)傳送。圖4-22總線的完整時(shí)序
4)I2C總線讀、寫操作(1)當(dāng)前地址讀:該操作將從所選器件的當(dāng)前地址讀,讀的字節(jié)數(shù)不指定,格式如下:
(2)指定單元讀:該操作將從所選器件的指定地址讀,讀的字節(jié)數(shù)不指定,格式如下:(3)指定單元寫:該操作將從所選器件的指定地址寫,寫的字節(jié)數(shù)不指定,格式如下:4.3.2MCS-51單片機(jī)的串行接口
MCS-51單片機(jī)內(nèi)部有1個(gè)功能很強(qiáng)的全雙工串行口,可同時(shí)發(fā)送和接收數(shù)據(jù)。它有4種工作方式,可供不同場合使用。波特率由軟件設(shè)置,通過片內(nèi)的定時(shí)/計(jì)數(shù)器產(chǎn)生。接收、發(fā)送均可工作在查詢方式或中斷方式,使用十分靈活。MCS-51的串行口除了用于數(shù)據(jù)通信外,還可以非常方便地構(gòu)成1個(gè)或多個(gè)并行輸入/輸出口,或作串并轉(zhuǎn)換,用來驅(qū)動(dòng)鍵盤與顯示器。圖4―23MCS-51串行口的原理結(jié)構(gòu)圖1.串行接口的特殊功能寄存器
1)串行口數(shù)據(jù)緩沖器SBUFSBUF是兩個(gè)在物理上獨(dú)立的接收、發(fā)送緩沖器,可同時(shí)發(fā)送、接收數(shù)據(jù)。兩個(gè)緩沖器只用一個(gè)字節(jié)地址99H,可通過指令對SBUF的讀寫來區(qū)別是對接收緩沖器的操作還是對發(fā)送緩沖器的操作。CPU寫SBUF,就是修改發(fā)送緩沖器;讀SBUF,就是讀接收緩沖器。串行口對外也有兩條獨(dú)立的收發(fā)信號線RXD(P3.0)和TXD(P3.1),因此可以同時(shí)發(fā)送、接收數(shù)據(jù),實(shí)現(xiàn)全雙工傳送。2)串行口控制寄存器SCONSCON寄存器用來控制串行口的工作方式和狀態(tài),它可以是位尋址。在復(fù)位時(shí)所有位被清0,字地址為98H。SCON的格式為SM0、SM1:串行口工作方式選擇位(具體內(nèi)容參閱工作方式一節(jié))。
SM2:多機(jī)通信控制位。主要用于工作方式2和方式3。在方式2和方式3中,如SM2=1,則接收到的第9位數(shù)據(jù)(RB8)為0時(shí)不啟動(dòng)接收中斷標(biāo)志RI(即RI=0),并且將接收到的前8位數(shù)據(jù)丟棄;RB8為1時(shí),才將接收到的前8位數(shù)據(jù)送入SBUF,并置位RI產(chǎn)生中斷請求。當(dāng)SM2=0時(shí),則不論第9位數(shù)據(jù)為0或1,都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中斷請求。在方式0時(shí),SM2必須為0。REN:允許串行接收控制位。若REN=0,則禁止接收;若REN=1,則允許接收。該位由軟件置位或復(fù)位。
TB8:發(fā)送數(shù)據(jù)位8。在方式2和方式3時(shí),TB8為所要發(fā)送的第9位數(shù)據(jù)。在多機(jī)通信中,以TB8位的狀態(tài)表示主機(jī)發(fā)送的是地址還是數(shù)據(jù):TB8=0為數(shù)據(jù),TB8=1為地址;也可用作數(shù)據(jù)的奇偶校驗(yàn)位。該位由軟件置位或復(fù)位。
RB8:接收數(shù)據(jù)位8。在方式2和方式3時(shí),它是接收到的第9位數(shù)據(jù),可作為奇偶校驗(yàn)位或地址幀/數(shù)據(jù)幀的標(biāo)志。在方式1時(shí),若SM2=0,則RB8是接收到的停止位。在方式0時(shí),不使用RB8。TI:發(fā)送中斷標(biāo)志位。在方式0時(shí),當(dāng)串行發(fā)送數(shù)據(jù)字第8位結(jié)束后,由內(nèi)部硬件使TI置位,向CPU請求中斷。CPU在響應(yīng)中斷后,必須用軟件使TI清0。在其它方式時(shí),發(fā)送停止位后,由硬件置位TI。同樣,也必須在響應(yīng)中斷后,由軟件使其復(fù)位。此外,TI也可供查詢使用。
RI:接收中斷標(biāo)志位。在方式0時(shí),當(dāng)接收到的第8位結(jié)束后,由內(nèi)部硬件使RI置位,向CPU請求中斷。在其它方式時(shí),接收到停止位的中間便由硬件置位RI,同樣,也必須在響應(yīng)中斷后,由軟件使其復(fù)位。RI也可供查詢使用。
3)特殊功能寄存器PCONPCON主要是為CHMOS型單片機(jī)的電源控制而設(shè)置的專用寄存器,單元地址為87H,不能位尋址。其內(nèi)容如下:
在HMOS單片機(jī)中,該寄存器除最高位外,其它位都是虛設(shè)的。最高位SMOD為串行口波特率選擇位,當(dāng)SMOD=1時(shí),方式1、2、3的波特率加倍;當(dāng)SMOD=0時(shí),系統(tǒng)復(fù)位。
2.串行接口的工作方式串行口有4種工作方式,它是由SCON中的SM0、SM1來定義的,如表4―5所示。表4―5串行口的工作方式1)方式0
串行接口的工作方式0為同步移位寄存器方式,其波特率是固定的,為fosc(振蕩頻率)的1/12。方式0發(fā)送:數(shù)據(jù)從RXD引腳串行輸出,TXD引腳輸出同步脈沖。當(dāng)1個(gè)數(shù)據(jù)寫入串行口發(fā)送緩沖器時(shí),串行口將8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳輸出,從低位到高位。發(fā)送完后置中斷標(biāo)志TI為1,呈中斷請求狀態(tài),在再次發(fā)送數(shù)據(jù)之前,必須用軟件將TI清0。
方式0接收:在滿足REN=1和RI=0的條件下,串行口處于方式0輸入。此時(shí),RXD為數(shù)據(jù)輸入端,TXD為同步信號輸出端,接收器也以fosc/12的波特率采樣RXD引腳輸入的數(shù)據(jù)信息。當(dāng)接收器接收完8位數(shù)據(jù)后,置中斷標(biāo)志RI=1為請求中斷,在再次接收之前,必須用軟件將RI清0。
在方式0工作時(shí),必須使SCON寄存器中的SM2位為“0”,這并不影響TB8位和RB8位。方式0發(fā)送或接收完8位數(shù)據(jù)后由硬件置位TI或RI中斷請求標(biāo)志,CPU在響應(yīng)中斷后要用軟件清除TI或RI標(biāo)志。若串行口要作為并行口輸入輸出,這時(shí)必須設(shè)置“串入并出“或”并入串出”的移位寄存器來配合使用(如CD4094或CD4014等)。例如將串行口作為并行輸出口使用時(shí),可采用如圖4―24所示的方法。圖4―24一種串行轉(zhuǎn)換為并行的方法2)方式1
在方式1時(shí),串行口被設(shè)置為波特率可變的8位異步通信接口。方式1發(fā)送:串行口以方式1發(fā)送時(shí),數(shù)據(jù)位由TXD端輸出,發(fā)送1幀信息為10位,其中1位起始位、8位數(shù)據(jù)位(先低位后高位)和一個(gè)停止位“1”。CPU執(zhí)行1條數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令,就啟動(dòng)發(fā)送器發(fā)送。當(dāng)發(fā)送完數(shù)據(jù),就置中斷標(biāo)志TI為1。方式1所傳送的波特率取決于定時(shí)器T1的溢出率和特殊功能寄存器PCON中SMOD的值,即方式1的波特率=(2SMOD/32)×定時(shí)器T1的溢出率。
方式1接收:當(dāng)串行口置為方式1,且REN=1時(shí),串行口處于方式1輸入狀態(tài)。它以所選波特率的16倍的速率采樣RXD引腳狀態(tài)。
3)方式2
串行口工作于方式2時(shí),被定義為9位異步通信接口。方式2發(fā)送:發(fā)送數(shù)據(jù)由TXD端輸出,發(fā)送1幀信息為11位,其中1位起始位(0)、8位數(shù)據(jù)位(先低位后高位)、1位可控位為1或0的第9位數(shù)據(jù)、1位停止位。附加的第9位數(shù)據(jù)為SCON中的TB8,它由軟件置位或清0,可作為多機(jī)通信中地址/數(shù)據(jù)信息的標(biāo)志位,也可作為數(shù)據(jù)的奇偶校驗(yàn)位。PIPL:PUSHPSW;保護(hù)現(xiàn)場
PUSHACLRTI;清0發(fā)送中斷標(biāo)志
MOVA,@R0;取數(shù)據(jù)
MOVC,P;奇偶位送CMOVTB8,C;奇偶位送TB8MOVSBUF,A;數(shù)據(jù)寫入發(fā)送緩沖器,啟動(dòng)發(fā)送
INCR0;數(shù)據(jù)指針加1POPA;恢復(fù)現(xiàn)場
POPPSWRETI;中斷返回
方式2接收:當(dāng)串行口置為方式2,且REN=1時(shí),串行口以方式2接收數(shù)據(jù)。方式2的接收與方式1基本相似。數(shù)據(jù)由RXD端輸入,接收11位信息,其中1位起始位(0)、8位數(shù)據(jù)位、1位附加的第9位數(shù)據(jù)、1位停止位(1)。方式2的波特率=(2SMOD/64)×fosc
若附加的第9位數(shù)據(jù)為奇偶校驗(yàn)位,在接收中斷服務(wù)程序中應(yīng)作檢驗(yàn)處理,參考程序如下:PIPL:PUSHPSW;保護(hù)現(xiàn)場
PUSHACLRRI;清0接收中斷標(biāo)志
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 紋身配樂課程設(shè)計(jì)
- 自動(dòng)裝料系統(tǒng)plc課程設(shè)計(jì)
- 藝術(shù)課體驗(yàn)課課程設(shè)計(jì)
- 大地測量GPS課程設(shè)計(jì)
- 《刮痧西學(xué)中》課件
- 九年級歷史下冊期末綜合檢測課件
- 制造企業(yè)員工手冊
- 數(shù)據(jù)化課程設(shè)計(jì)
- 流水燈課程設(shè)計(jì)概述
- 能源環(huán)保行業(yè)顧問工作總結(jié)
- 熱動(dòng)復(fù)習(xí)題材料熱力學(xué)與動(dòng)力學(xué)
- 馬工程-公共財(cái)政概論-課程教案
- GB/T 38058-2019民用多旋翼無人機(jī)系統(tǒng)試驗(yàn)方法
- GB/T 30902-2014無機(jī)化工產(chǎn)品雜質(zhì)元素的測定電感耦合等離子體發(fā)射光譜法(ICP-OES)
- GB/T 22638.2-2016鋁箔試驗(yàn)方法第2部分:針孔的檢測
- GB/T 13275-1991一般用途離心通風(fēng)機(jī)技術(shù)條件
- 千年菩提路解說詞
- 田中靖久頸椎病癥狀量表20分法
- 配氣機(jī)構(gòu)的設(shè)計(jì)
- 鹿茸血與養(yǎng)生課件
- 軟件開發(fā)-項(xiàng)目-監(jiān)理細(xì)則
評論
0/150
提交評論