單片機(jī)原理及接口技術(shù)-基于C51 Proteus仿真(第二版)課件 第6、7章 80C51單片機(jī)定時器計數(shù)器最終;單片機(jī)系統(tǒng)的并行擴(kuò)展_第1頁
單片機(jī)原理及接口技術(shù)-基于C51 Proteus仿真(第二版)課件 第6、7章 80C51單片機(jī)定時器計數(shù)器最終;單片機(jī)系統(tǒng)的并行擴(kuò)展_第2頁
單片機(jī)原理及接口技術(shù)-基于C51 Proteus仿真(第二版)課件 第6、7章 80C51單片機(jī)定時器計數(shù)器最終;單片機(jī)系統(tǒng)的并行擴(kuò)展_第3頁
單片機(jī)原理及接口技術(shù)-基于C51 Proteus仿真(第二版)課件 第6、7章 80C51單片機(jī)定時器計數(shù)器最終;單片機(jī)系統(tǒng)的并行擴(kuò)展_第4頁
單片機(jī)原理及接口技術(shù)-基于C51 Proteus仿真(第二版)課件 第6、7章 80C51單片機(jī)定時器計數(shù)器最終;單片機(jī)系統(tǒng)的并行擴(kuò)展_第5頁
已閱讀5頁,還剩120頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章80C51單片機(jī)定時器/計數(shù)器

126.1定時器/計數(shù)器T0和T1的結(jié)構(gòu)及工作原理6.1.1定時器/計數(shù)器T0和T1的基本結(jié)構(gòu)6.1.280C51單片機(jī)定時器/計數(shù)器的工作原理6.2定時器/計數(shù)器T0和T1的控制寄存器6.3定時器/計數(shù)器的工作方式6.4定時器/計數(shù)器T0、T1的應(yīng)用3第6章80C51單片機(jī)定時器/計數(shù)器在工業(yè)測控應(yīng)用中,經(jīng)常需要產(chǎn)生精確的定時或者延時控制,如果采用軟件定時,則需要占用CPU運(yùn)行時間,降低單片機(jī)工作效率;許多場合還要用到對外部事件計數(shù)的功能。MCS-51系列中51子系列單片機(jī)片內(nèi)集成2個16位可編程控制的定時器/計數(shù)器T0和T1,52子系列片內(nèi)集成3個,第3個是定時器T2。T0、T1是MCS-51單片機(jī)的片內(nèi)功能部件,它們既可用作定時器方式,又可用作計數(shù)器方式。本章主要介紹80C51單片機(jī)定時器/計數(shù)器T0和T1的結(jié)構(gòu)、工作原理及應(yīng)用。6.1定時器/計數(shù)器T0和T1的結(jié)構(gòu)及工作原理只有掌握T0和T1的結(jié)構(gòu)及工作原理,才能熟練使用MCS-51系列單片機(jī)片內(nèi)的定時器和計數(shù)器。6.1.1定時器/計數(shù)器T0和T1的結(jié)構(gòu)80C51單片機(jī)定時器/計數(shù)器T0、T1的結(jié)構(gòu)如圖6-1所示,T0、T1是2個16位加法計數(shù)器,T0由TH0和TL02個SFR組成加計4數(shù)單元,T1由TH1和TL12個SFR組成加計數(shù)單元。TH1、TL1、TH0、TL0只能按照字節(jié)訪問。對T0、T1定時或計數(shù)的模式、工作方式選擇以及控制是由2個SFRTCON和TMOD的設(shè)置確定的。TMOD、TCON與T0計數(shù)單元TH0和TL0、T1計數(shù)單元TH1和TL1間通過內(nèi)部總線及邏輯電路連接,TMOD用于控制定時器的模式和工作方式,TCON用于控制定時器的啟動與停止。一旦設(shè)置好T0(或T1)的工作方式并啟動,T0(或T1)就開始獨(dú)立工作,不占CPU操作時間,當(dāng)加計數(shù)器計滿置位TF0(或TF1)。CPU可通過軟件主動查詢是否定時時間到或計數(shù)滿時,也可以選擇定時中斷。5圖6-180C51定時器/計數(shù)器的基本結(jié)構(gòu)6.1.280C51單片機(jī)定時器/計數(shù)器的工作原理定時/計數(shù)器T0、T1都可以獨(dú)立設(shè)定為定時模式或者計數(shù)模式,定時和計數(shù)的實質(zhì)都是加計數(shù)器,區(qū)別在于計數(shù)信號來源不同。6

1.定時器的原理T0(或T1)用作定時器時,是對內(nèi)部機(jī)器周期Tcy的加計數(shù)器。即每個機(jī)器周期TH0、TL0(或TH1、TL1)計數(shù)器在初值的基礎(chǔ)上加1,計滿溢出時,置位TF0(或TF1),也可以選擇產(chǎn)生中斷請求。因此,一個N位的加1計數(shù)器,從初值a開始每個機(jī)器周期加1計數(shù),直至溢出,定時時間T為:

上式中,Tcy為機(jī)器周期,a為計數(shù)初值,N是由定時方式?jīng)Q定的,當(dāng)T0、T1工作在方式0、1和2時,N取值分別為13、16和8?!纠?-1】設(shè)單片機(jī)晶振頻率為24MHz,T0、T1工作在方式0、1、2,最大定時時間各為多少?在初值為0時,有最大的定時時間。7

所以T0(或T1)在工作方式0下,其最大定時時間為

同樣可以求得方式1下的最大定時時間為32.768ms;方式2下的最大定時時間為0.128ms。

2.計數(shù)器的原理T0(或T1)用作計數(shù)器時,是對P3.4引腳(或P3.5)輸入的外部脈沖的加計數(shù)器,每輸入一個外部脈沖(每當(dāng)外部脈沖產(chǎn)生負(fù)跳變),TH0、TL0(或TH1、TL1)計數(shù)器在初值a基礎(chǔ)上加1,計滿溢出時置位TF0(或TF1),也可以選擇產(chǎn)生中斷請求。因此,一個N位的加計數(shù)器,從初值a開始每來一個外部脈沖加1計數(shù),直至溢出,計數(shù)總個數(shù)C為:8

上式中,a為計數(shù)初值,N是由計數(shù)方式?jīng)Q定的,當(dāng)T0、T1工作在方式0、1和2時,N取值分別為13、16和8。由于單片機(jī)需要兩個機(jī)器周期來識別一個從“1”到“0”的跳變,因此外部計數(shù)脈沖的最高計數(shù)頻率為晶振頻率的1/24?!纠?-2】單片機(jī)T0、T1工作在計數(shù)器各種方式下,計數(shù)范圍各為多少。由于初值a取值從0~2N-1。T0、T1工作在計數(shù)器方式0下,N=13,計數(shù)范圍是:1~8192(213)。在工作方式1下,N=16,計數(shù)范圍是:1~65536(216)。在工作方式2下,N=8,計數(shù)范圍是:1~256(28)。

3.對T0和T1的主要特性總結(jié)如下:(1)T0和T1可以通過編程選擇定時模式或者計數(shù)模式,定時和計數(shù)的區(qū)別是:定時是對內(nèi)部機(jī)器周期計數(shù)實現(xiàn)的,而計數(shù)是對外部信號計數(shù)實現(xiàn)。9

(2)T0和T1均可通過編程設(shè)定多種工作方式,其中T0有4種工作方式;T1有3種工作方式,T2有3種工作方式。(3)T0和T1定時時間到或計數(shù)滿時,都會使計數(shù)器溢出,從而置位相應(yīng)的溢出位,是否定時到或計數(shù)滿可通過查詢或中斷方式處理。6.2T0和T1的控制寄存器對T0和T1的控制主要通過設(shè)置TMOD和TCON這2個SFR。TMOD用來確定T0和T1的工作模式及工作方式,TCON用來設(shè)定和表征T0和T1的工作過程。

1.定時器/計數(shù)器方式寄存器TMODTMOD字節(jié)地址為89H,其格式如表6-1所示。TMOD的8位分為2組,2組含義相同,高4位為T1的控制字段,低4位為T0的控制字段。10

(1)M1位和M0位M1和M0為工作方式控制位,其含義如表6-2所示(其中i=0,1)。

表6-2定時器工作方式控制位11

(2)C/位定時與計數(shù)的模式選擇位。C/=0時,設(shè)置為定時器模式;C/=1時,設(shè)置為計數(shù)器模式。(3)門控位GATE當(dāng)GATE=0時,僅控制位TR0(或TR1)置1可啟動T0(或T1)。僅TR0(或TR1)清0可停止T0(或T1)工作。當(dāng)GATE=1時,控制位TR0(或TR1)置1,同時還需(或)引腳為高電平方可啟動定時器,即允許外部硬件通過P3.2(或P3.3)控制T0(或T1)啟動。TMOD不能位尋址,只能用字節(jié)指令設(shè)置一次設(shè)置8位。復(fù)位時,TMOD=00H。例如:要求T1非門控,定時模式,工作方式1;語句為:TMOD=0x10;

2.定時器/計數(shù)器控制寄存器TCONTCON的字節(jié)地址為88H,可以位尋址,清溢出標(biāo)志位或啟動定時器都可以用位操作指令。TCON的格式如表6-3所示,12TCON低4位用于控制外部中斷,在第5章中已介紹,TCON高4位的功能是控制T0(或T1)的啟動、停止以及標(biāo)志T0(或T1)的溢出。當(dāng)系統(tǒng)復(fù)位時,TCON=0x00。低4位含義如下。

(1)T1溢出標(biāo)志位TFl當(dāng)T1計滿數(shù)溢出時,由硬件自動置TF1=1,向CPU發(fā)出T1中斷請求,在中斷允許時響應(yīng)。進(jìn)入中斷服務(wù)程序后,由硬件自動使TF1=0。當(dāng)中斷屏蔽時,TF1可由軟件查詢,此時只能由指令清0(編寫TF1=0語句)。(2)T1運(yùn)行控制位TR1TR1=0時,關(guān)閉T1;13

TR1=1時,分2種情況:當(dāng)GATE=0時,則啟動T1;當(dāng)GATE=l時,則引腳為高電平,才可以啟動Tl。(3)T0溢出標(biāo)志位TF0其功能及操作情況同TF1。(4)T0運(yùn)行控制位TR0其功能及操作情況同TR1。6.3定時器/計數(shù)器的工作方式80C51片內(nèi)T0、T1可以通過對特殊功能寄存器TMOD中M1、M0兩位的設(shè)置來選擇工作方式,其中T0有方式0、1、2和3等4種工作方式;T1有方式0、1和2共3種工作方式。1.工作方式0當(dāng)M1、M0設(shè)置為00時,T0(或T1)工作在方式0。T0方式0的邏輯圖如圖6-2所示。14

(1)計數(shù)器單元在方式0下,16位計數(shù)器單元只用了13位,由TH0的8位和TL0的低5位組成一個13位計數(shù)器,TL0(或TL1)的高3位未用,方式0計數(shù)器單元如圖6-3所示,當(dāng)TL0(TL1)的低5位溢出時,會向TH0(TH1)進(jìn)位,當(dāng)13位計數(shù)器加1到全“1”后,再加1就溢出。這時,置TCON的溢出標(biāo)志位TF0(TF1)為1,同時把13位TH0和TL0(或TH1和TL1)變?yōu)槿?”。圖6-2T0方式0邏輯圖15圖6-3T0和T1方式0計數(shù)器單元

(2)定時/計數(shù)模式控制位C/①C/=0:為定時器工作模式,對內(nèi)部機(jī)器周期信號計數(shù);②C/=1:為計數(shù)器工作模式,對P3.4(或P3.5)引腳外部輸入脈沖負(fù)跳變計數(shù)。(3)定時/計數(shù)運(yùn)行控制位GATEGATE位決定了T0(或T1)的運(yùn)行取決于軟件控制還是硬件-軟件共同控制。GATE=0時,當(dāng)TR0/TR1=1,13位計數(shù)器就開始計數(shù);當(dāng)TR0/TR1=0,T0(或T1)關(guān)閉。16圖6-4T0方式1邏輯圖17

3.工作方式2當(dāng)M1、M0設(shè)置為10時,T0(或T1)工作在方式2。T0方式2的邏輯圖如圖6-5所示。方式2把TL0(TL1)配置成一個可以自動恢復(fù)初值(初始常數(shù)自動重新裝入)的8位計數(shù)器,TH0(TH1)作為常數(shù)緩沖器,由軟件預(yù)置值;當(dāng)TL0(TL1)溢出時,一方面使溢出標(biāo)志TF0(TR1)置1,同時把TH0(TH1)中的8位數(shù)據(jù)重新裝入TL0(TL1)中。圖6-5T0方式2邏輯圖218

在實際應(yīng)用中,工作方式0和工作方式1在定時時間到或者計數(shù)滿產(chǎn)生溢出時,計數(shù)單元清0,如果想循環(huán)定時或者循環(huán)計數(shù)就需要頻繁重新給計數(shù)單元裝初值,這不但影響定時/計數(shù),也給程序設(shè)計帶來麻煩。方式2常用于循環(huán)精確地定時/計數(shù)控制。例如,80C51單片機(jī)晶振頻率為12MHz,希望每隔200s產(chǎn)生一個定時控制脈沖,可在定時方式2下,把TH0和TL0同時預(yù)置為56實現(xiàn)。方式2還用作串行口波特率發(fā)生器。

4.工作方式3方式3只適用于T0。方式3使80C51具有3個定時器/計數(shù)器(增加了一個附加的8位定時器/計數(shù)器)。(1)T0工作在方式319(a)TL0作為8位定時器/計數(shù)器圖6-6定時器/計數(shù)器T0工作方式320

(2)T0工作在方式3下的T1通常,當(dāng)T1用作串口波特率發(fā)生器時,T0才定義為方式3,以增加一個8位計數(shù)器。T0工作在方式3時,TH0使用了T1的中斷標(biāo)志位(TF1),這時T1還可以設(shè)置為方式0~2,用于任何不需要中斷控制的場合,或用作串行口的波特率發(fā)生器。①T1工作在方式0T1工作在方式0,作為波特率發(fā)生器,需要設(shè)置M1、M0=00,工作示意圖如圖6-7所示。圖6-7T0工作在方式3下T1工作在方式0工作示意圖21

②T1工作在方式1T1工作在方式1,作為波特率發(fā)生器,需要設(shè)置M1、M0=01,工作示意圖如圖6-8所示。圖6-8T0工作在方式3下T1工作在方式1工作示意圖

③T1工作在方式2T1工作在方式2,由于方式2可循環(huán)計數(shù)或定時,不需要重置計數(shù)初值,在波特率產(chǎn)生器中常用。需要設(shè)置M1、M0=10,工作示意圖如圖6-9所示。22圖6-9T0方式3時T1為方式2時工作示意圖6.4定時器/計數(shù)器T0、T1的應(yīng)用本節(jié)介紹T0、T1的初始化設(shè)計及編程應(yīng)用。

1.T0和T1的初始化由于T0和T1的功能實現(xiàn)是由軟件編程確定的,所以使用前首先要初始化,步驟如下。(1)確定工作模式與工作方式,為TMOD賦值。(2)確定計數(shù)器單元初值,為T0計數(shù)單元TH0、TL0(或T1計數(shù)單元TH1、TL1)預(yù)置初值。2324

(4)給TCON送命令字,以啟動或禁止定時器/計數(shù)器的運(yùn)行。(5)確定定時時間到或計數(shù)滿,以便進(jìn)行相應(yīng)的處理。若用查詢方式則不需要第3步,可查詢溢出標(biāo)志位TF0(或TF1),溢出標(biāo)志為1,則進(jìn)行相應(yīng)處理;若用中斷方式處理,設(shè)置IE、TR0(TR1)后,一旦TF0(或TF1)標(biāo)志為1,則自動轉(zhuǎn)向中斷服務(wù)程序。

2.T0、T1的編程應(yīng)用【例6-5】T0和T1作為計數(shù)器的應(yīng)用電路如圖6-10所示,外部計數(shù)輸入端T0(P3.2)接一按鈕開關(guān)K1,外部計數(shù)輸入端T1(P3.3)接信號源,P1.7引腳接一LED燈。要求:按下開關(guān)K1開始對信號源計數(shù),當(dāng)計滿10個脈沖時,LED閃爍10次,T0、T1都采用中斷方式。25圖6-102個計數(shù)器的使用26

(1)確定TMODT0、T1都計數(shù),T0計數(shù)1次,選擇用方式1;T1計數(shù)10次選擇方式1,都選擇非門控。所以TMOD=0x55。(2)確定計數(shù)初值T0計數(shù)1次,方式1,計數(shù)初值為65535=0xFFFF,TH0=0xFF;TL0=0xFF,T1計數(shù)10次,選擇方式1,初值為65536-10=65526=0xFFF6,TH1=0xFF;TL1=0xF6。(3)設(shè)置IE、IP由于T0、T1均采用中斷方式,不設(shè)置優(yōu)先級。IE=0x8A,IP=0;(4)啟動T0、T1T0啟動在主程序中,T1啟動在T0的中斷服務(wù)程序中。參考程序如下:#include<reg51.h>#defineucharunsignedcharsbitP1_7=P1^7;27voidDelay(unsignedintx)//延時1ms函數(shù){ucharj;while(x--){for(j=0;j<125;j++);}}voidmain(){TMOD=0x55;TH0=0xFF;TL0=0xFF;TH1=0xFF;TL1=0xF6;IE=0x8A;TR0=1;P1_7=1;28while(1);}voidc0(void)interrupt1//T0中斷服務(wù)程序{TR0=0;TR1=1;}voidc1(void)interrupt3//T1中斷服務(wù)程序{uchari;for(i=0;i<10;i++){P1_7=0;Delay(500);P1_7=1;Delay(500);}TR1=0;}29

在實際應(yīng)用中,經(jīng)常用T0、T1產(chǎn)生精確的周期性波形。利用T0、T1產(chǎn)生周期性波形的思想是:利用T0、T1定時,定時時間到對輸出端作相應(yīng)的處理。如產(chǎn)生方波可在定時時間到對輸出端取反。例6-6】電路如圖6-11所示,設(shè)80C51晶振頻率為12MHz,用T1編程實現(xiàn)從P1.7引腳輸出頻率為2kHz的音頻信號。分析:從P1.7引腳輸出頻率為2kHz的超聲波,即周期為500us的方波,可定時250us,定時時間到時,讓P1.7取反一次。T1可分別工作于方式0、方式1、方式2,可分別采用查詢和中斷方式實現(xiàn)。當(dāng)晶振頻率為12MHz,機(jī)器周期為1us。30圖6-11定時器T1產(chǎn)生超聲波31

(1)T1采用方式0、中斷方式處理方式控制字應(yīng)設(shè)定為00000000B(0x00)。定時250μs,初值X=8192-250/1=7942=0x1F06,則TH1=0xF8,TL1=0x06。參考程序:#include<reg51.h>//包含特殊功能寄存器庫sbitP1_7=P1^7;voidmain(){TMOD=0x00;TH1=0xF8;TL1=0x06;EA=1;ET1=1;TR1=1;while(1);}32voidti1(void)interrupt3//中斷服務(wù)程序{TH1=0xF8;TL1=0x06;P1_7=!P1_7;}

仿真時,用鼠標(biāo)右鍵單擊虛擬數(shù)字示波器,在菜單中選擇“DigitalOscilloscope”選項,調(diào)整時間旋鈕在合適位置,會看到P1.7引腳輸出給A通道的頻率為2kHz的音頻信號,如圖6-12所示。33圖6-12頻率為2kHz的音頻信號34

(2)T1采用方式1、中斷方式處理方式控制字應(yīng)設(shè)定為00010000B(0x10)。定時250μs,初值X=65536-250/1=65286=FF06,則TH1=0xFF,TL1=0x06。參考程序:#include<reg51.h>//包含特殊功能寄存器庫sbitP1_7=P1^7;voidmain(){TMOD=0x10;TH1=0xFF;TL1=0x06;EA=1;ET1=1;TR1=1;while(1);}35voidti1(void)interrupt3//中斷服務(wù)程序{TH1=0xFF;TL1=0x06;P1_7=!P1_7;}(3)T1采用方式2、中斷方式處理方式控制字應(yīng)設(shè)定為00100000B(0x20)。定時250μs,初值X=256-250/1=06,則TH1=TL1=0x06。參考程序:#include<reg51.h>//包含特殊功能寄存器庫sbitP1_7=P1^7;voidmain(){TMOD=0x20;TH1=0x06;TL1=0x06;EA=1;36ET1=1;TR1=1;while(1);}voidti0(void)interrupt3//中斷服務(wù)程序{P1_7=!P1_7;}(4)T1采用方式2、查詢方式處理參考程序:#include<reg51.h>//包含特殊功能寄存器庫sbitP1_7=P1^7;voidmain(){chari;TMOD=0x20;37TH0=0x06;TL0=0x06;TR1=1;for(;;){if(TF1){TF1=0;P1_7=!P1_7;}//查詢計數(shù)溢出}}若需要定時器定時時間超過定時器最大值時,即方式1時的216個機(jī)器周期時,用一個定時器直接處理不能實現(xiàn),可用兩個定時器級聯(lián)或一個定時器配合軟件計數(shù)方式處理?!纠?-7】電路如圖6-13所示,設(shè)晶振頻率為12MHz,定時控制P1口連接的8只LED自上而下點(diǎn)亮的跑馬燈,每只燈點(diǎn)亮0.5s。每只燈點(diǎn)亮0.5s,這時應(yīng)產(chǎn)生500ms的周期性的定時,定時時間到時點(diǎn)亮下一盞燈??捎肨0產(chǎn)生10ms定時,然后對10ms計數(shù)50次或用T1對10ms計數(shù)50次實現(xiàn)。38

晶振頻率12MHz,T0定時10ms,可選方式1,則TMOD=00000001B(0x01),初值X:X=65536-10000/1=55536=1101100011110000B則TH0=11011000B=0xD8,TL0=11110000B=0xF0。圖6-13定時控制P1口連接的8只LED跑馬燈39

(1)T0定時10ms、軟件計數(shù)50次,中斷處理方式。參考程序:#include<reg51.h>//包含特殊功能寄存器庫#include<intrins.h>#defineucharunsignedcharuchari;voidmain(){TMOD=0x01;TH0=0xD8;TL0=0xF0;EA=1;ET0=1;i=0;TR0=1;P1=0xFE;40while(1);}voidtime0_int(void)interrupt1//T0中斷服務(wù)程序{TH0=0xD8;TL0=0xF0;i++;if(i==50){P1=_crol_(P1,1);i=0;}}

(2)T0定時10ms、T1計數(shù)25次,T0和T1都采用中斷方式工作。由于T1工作于計數(shù)方式時,計數(shù)脈沖通過T1(P3.5)輸入,設(shè)定時器T0定時10ms時間到,對T1(P3.5)取反一次,則T141(P3.5)每20ms產(chǎn)生一個計數(shù)脈沖。定時500ms需要T1計數(shù)25次。T0工作于方式1,定時10ms,則TH0=11011000B=0xD8,TL0=11110000B=0xF0。設(shè)計數(shù)器T1工作于方式2,初值X=256-25=231=0xE7,TH1=TL1=0xE7。方式控制字TMOD=01100001B=0x61。參考程序如下:#include<reg51.h>#include<intrins.h>#defineucharunsignedcharsbitP3_5=P3^5;voidmain(){TMOD=0x61;TH0=0xD8;TL0=0xF0;42TH1=0xE7;TL1=0xE7;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;P1=0xFE;while(1);}voidtime0_int(void)interrupt1//T0中斷服務(wù)程序{TH0=0xD8;TL0=0xF0;P3_5=!P3_5;}43voidtime1_int(void)interrupt3//T1中斷服務(wù)程序{P1=_crol_(P1,1);}【例6-8】利用門控位GATE測量正脈沖信號的寬度。模式控制寄存器TMOD中的GATE位置1時,可使T0(或T1)的啟動受外部引腳和TR0(或和TR1)的共同控制,利用這個特點(diǎn),可測量引腳上正脈沖的寬度,即正脈沖中包含的機(jī)器周期數(shù)。測量正脈沖信號寬度的電路原理如圖6-14所示,T0的計數(shù)輸入端外接信號源,P2、P1口外接16只LED,用于以二進(jìn)制形式顯示周期信號的高電平中包含的機(jī)器周期數(shù),其中P2口顯示低8位,P1口顯示高8位。設(shè)置信號源周期數(shù),LED顯示的脈沖信號寬度會發(fā)生變化。44圖6-14測量正脈沖信號寬度電路45

參考程序如下:#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitP3_2=P3^2; //位變量定義voiddelay(uintz) //延時函數(shù){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voidmain(){ while(1){TMOD=0x09; //定時器T0為方式1定時TH0=0;46TL0=0;while(P3_2==1); //等待變低TR0=1;//啟動T0while(P3_2==0);//等變高,T0開始計數(shù)while(P3_2==1);//等變低TR0=0;P1=~TH0;P2=~TL0; delay(200);}}在proteus仿真中,晶振頻率為12MHz,設(shè)置信號源輸出頻率為50Hz,其高電平寬度為10ms時,即10000個機(jī)器周期,因為10000=0x2710。則P1口、P2口輸出分別為0x27、0x10。4748

第7章單片機(jī)系統(tǒng)的并行擴(kuò)展

49507.1MCS-51單片機(jī)的最小系統(tǒng)7.1.18051/8052的最小系統(tǒng)7.1.28031最小應(yīng)用系統(tǒng)7.2MCS-51單片機(jī)系統(tǒng)并行擴(kuò)展技術(shù)7.2.1并行擴(kuò)展總線原理7.2.2I/O口擴(kuò)展概述7.2.3并行擴(kuò)展地址譯碼技術(shù)7.3存儲器擴(kuò)展技術(shù)7.3.1存儲器的概述7.3.2程序存儲器的擴(kuò)展7.3.3數(shù)據(jù)存儲器的擴(kuò)展7.4 I/O接口擴(kuò)展概述7.5簡單74系列并行I/O接口的擴(kuò)展7.6通用可編程I/O接口芯片82C55的擴(kuò)展7.6.1并行I/O接口芯片82C557.6.2并行I/O接口82C55的3種工作方式7.6.380C51單片機(jī)與82C55的接口設(shè)計51第7章單片機(jī)系統(tǒng)的并行擴(kuò)展MCS-51系列單片機(jī)雖具有很強(qiáng)的功能,但片內(nèi)駐留的程序存儲器容量、數(shù)據(jù)存儲器的容量、并行I/O口等是有限的,在不能滿足應(yīng)用系統(tǒng)需要時,需要進(jìn)行系統(tǒng)擴(kuò)展。系統(tǒng)擴(kuò)展分為并行擴(kuò)展和串行擴(kuò)展,本章介紹應(yīng)用系統(tǒng)的并行擴(kuò)展,第11章介紹串行擴(kuò)展。7.1MCS-51單片機(jī)的最小系統(tǒng)單片機(jī)最小系統(tǒng),是指一個可用的最小配置系統(tǒng)。根據(jù)片內(nèi)有無程序存儲器,MCS-51單片機(jī)最小系統(tǒng)分兩種情況,若單片機(jī)內(nèi)部程序存儲器資源已能滿足系統(tǒng)需要,則增加晶振及復(fù)位電路直接構(gòu)成最小系統(tǒng)。7.1.18051/8052的最小系統(tǒng)8051/8052片內(nèi)有4K(8052有8K)ROM/EPROM,因此,僅需要外接晶振和復(fù)位電路就可構(gòu)成最小系統(tǒng)。8051/8052的最小系統(tǒng)如圖7-1所示。52圖7-18051/8052的最小系統(tǒng)8051/8052的最小系統(tǒng)特點(diǎn)如下。(1)片外無需擴(kuò)展存儲器,P0、P1、P2、P3都可以作為用戶I/O口。(2)片內(nèi)有128B(地址00H~7FH)RAM,無片外數(shù)據(jù)存儲器。53(3)內(nèi)部有4KB(地址空間0000H~0FFFH)ROM,EA應(yīng)接高電平。7.1.28031最小應(yīng)用系統(tǒng)8031片內(nèi)無程序存儲器片,其最小應(yīng)用系統(tǒng)不僅要外接晶體振蕩器和復(fù)位電路,還應(yīng)擴(kuò)展程序存儲器,8031最小應(yīng)用系統(tǒng)如圖7-2所示。

該最小系統(tǒng)特點(diǎn)如下:(1)P0在擴(kuò)展程序存儲器時作為低8位地址/數(shù)據(jù)分時復(fù)用線,P2口作為高8位地址線,不能作為I/O線,只有P1、P3可作為I/O口使用。(2)片內(nèi)有128B(地址空間00H~7FH)RAM,沒有片外RAM。(3)片外擴(kuò)展了程序存儲器,其地址空間隨芯片容量不同而不一樣。圖7-2中使用的是27512芯片,容量為64KB(地址空間為0000H~FFFFH)。由于只使用片外程序存儲器,EA接低電平。54圖7-28031/8032的最小系統(tǒng)7.2MCS-51單片機(jī)系統(tǒng)并行擴(kuò)展技術(shù)根據(jù)單片機(jī)應(yīng)用系統(tǒng)具體應(yīng)用中需要的ROM、RAM及I/O空間,可以方便地設(shè)計并行擴(kuò)展。本節(jié)首先介紹并行擴(kuò)展總線原理,然后簡單概況I/O接口擴(kuò)展,最后重點(diǎn)介紹并行擴(kuò)展地址譯碼技術(shù)。557.2.1并行擴(kuò)展總線原理本小節(jié)介紹并行擴(kuò)展的三總線結(jié)構(gòu),并行擴(kuò)展遵循的擴(kuò)展原則,以及單片機(jī)系統(tǒng)并行擴(kuò)展的內(nèi)容。1.三總線結(jié)構(gòu)MCS-51單片機(jī)外部都有單獨(dú)的并行地址總線、數(shù)據(jù)總線、控制總線。其中P0口作數(shù)據(jù)總線和低8位地址總線復(fù)用,為了能把分時復(fù)用的數(shù)據(jù)總線和地址總線分離,以便同外部擴(kuò)展的芯片正確連接,需要在單片機(jī)的外部增加地址鎖存器(例如74LS373),從而構(gòu)成三總線結(jié)構(gòu),如圖7-3所示。56圖7-380C51的三總線結(jié)構(gòu)(1)地址總線單片機(jī)地址總線(AddressBus,AB)用于單向傳送單片機(jī)送出的地址信號,以便進(jìn)行存儲器單元和I/O端口的選擇。地址總線的數(shù)目決定了可直接訪問的存儲單元和I/O端口的數(shù)目。地址總線由P2構(gòu)成的高8位地址與P0構(gòu)成的低8位地址組成16位地址總線,達(dá)到64KB的尋址能力。實際應(yīng)用中,如果不需要擴(kuò)展16位地址,擴(kuò)展后剩余的地址線仍可作一般I/O57口使用。

(2)數(shù)據(jù)總線數(shù)據(jù)總線(DataBus,DB)用于單片機(jī)與存儲器(或I/O接口)間雙向的的數(shù)據(jù)傳送。MCS-51單片機(jī)的數(shù)據(jù)總線與其字長一致,為8位。

(3)控制總線控制總線(ControlBus,CB)是控制片外ROM、RAM和I/O口讀/寫操作的。

2.并行擴(kuò)展原則:三總線對接MCS-51單片機(jī)系統(tǒng)的并行總線接口擴(kuò)展是通過擴(kuò)展三總線實現(xiàn)的,總結(jié)為“三總線對接”,連線時應(yīng)遵守下列原則:(1)單片機(jī)擴(kuò)展存儲器和I/O口芯片時,雙方數(shù)據(jù)線與數(shù)據(jù)線相連,地址線與地址線相連,控制線與控制線相連。(2)擴(kuò)展多片存儲器和I/O口芯片時,控制線相同的芯片地址線不能相同,地址線相同的芯片控制線不能相同。58

(3)由于只有片選信號有效的芯片才被選中,當(dāng)一類芯片僅有1片時,片選端可接地;當(dāng)同類芯片存在多片時,可用單片機(jī)地址線(通常是高位地址線)通過線選法或譯碼法(全譯碼和部分譯碼)等方法分時選中各芯片片選端,在單片機(jī)應(yīng)用中大多采用線選法。

3.單片機(jī)系統(tǒng)并行擴(kuò)展的內(nèi)容MCS-51單片機(jī)系統(tǒng)并行擴(kuò)展的內(nèi)容包括外部存儲器的擴(kuò)展(外部RAM、ROM)和I/O接口部件的擴(kuò)展。主要包含如下內(nèi)容。

(1)外部ROM的擴(kuò)展①紫外線擦除的EPROM主要有Intel2716(2KB)、2732(4KB)、2764(8KB)、27128(16KB)、27256(32KB)和27512(64KB)等。②電擦除的EEPROM主要有高壓(+21V)電寫入的2816和2817(2KB),以及+5V59電寫入的2816A和2817A(2KB)等。

(2)外部RAM的擴(kuò)展①靜態(tài)RAM有Intel6116(2KB)、6264(8KB)、62256(32KB)等。②動態(tài)RAM主要是2164A(64K×1)。(3)I/O接口的擴(kuò)展①專用I/O擴(kuò)展:8255(3×8并行口)、8243(4×4并行口)②復(fù)合芯片:8155具有可編程的I/O及RAM擴(kuò)展接口電路,含有2個8位I/O口、1個6位I/O口、256個RAM字節(jié)單元,具有1個14位的減法定時器/計數(shù)器。③TTL芯片:通過P0口擴(kuò)展的鎖存、緩沖器:74LS373、74LS273、74LS244、74LS245。(4)其它主要有8259、8279、ADC0809、8251和DAC0832等。7.2.2I/O接口擴(kuò)展概述60

由于MCS-51的I/O接口和外部RAM是統(tǒng)一編址的,因此,可以把外部64KB的RAM空間的一部分用作擴(kuò)展I/O的地址空間。這樣,單片機(jī)可以像訪問外部RAM一樣訪問I/O接口,對其進(jìn)行讀/寫。Intel公司常用外圍器件如表7-1所示。表7-1Intel公司常用外圍器件617.2.3并行擴(kuò)展地址譯碼技術(shù)并行擴(kuò)展包括片外存儲器的擴(kuò)展(RAM和ROM)和I/O接口的擴(kuò)展,其中,片外ROM有獨(dú)立的64KB地址空間,I/O口與片外RAM統(tǒng)一編址,占據(jù)相同的64KB地址空間。擴(kuò)展時,占據(jù)相同地址空間的芯片要共同劃分單片機(jī)64KB地址空間。

1.并行擴(kuò)展的地址譯碼方法并行擴(kuò)展的核心問題是擴(kuò)展芯片的編址問題,即給存儲單元和I/O接口單元分配地址。對于擴(kuò)展多個存儲器和I/O接口芯片的單片機(jī)系統(tǒng),編址分為兩個層次:擴(kuò)展芯片的選擇和擴(kuò)展芯片片內(nèi)單元的選擇。占據(jù)相同地址空間的擴(kuò)展芯片(ROM之間或者RAM和I/O之間)與單片機(jī)地址連接方式如下:(1)片內(nèi)單元的選擇:單片機(jī)地址總線A0~A15由低位到高位與擴(kuò)展芯片片內(nèi)地址線順次相接,選中芯片片內(nèi)單元。62

(2)對存儲器芯片、I/O接口芯片訪問時,片選端信號必須有效。單片機(jī)的剩余高位地址線作為片選線,經(jīng)譯碼后與擴(kuò)展芯片的片選端相接,選中芯片。(3)擴(kuò)展芯片的選擇:由高位地址實現(xiàn),擴(kuò)展芯片片選端連接方式有線選法和譯碼法。1)線選法若系統(tǒng)只擴(kuò)展少量的ROM或者少量的RAM和I/O接口,可采用線選法,即把單片機(jī)單獨(dú)的地址線(通常是P2的某一條線)連接到擴(kuò)展芯片片選端上,只要此地址線為低電平,就選中該芯片。線選法的連接方法有多種:一線二用、一線一選和綜合線選方式。線選法的特點(diǎn)是:電路簡單,不需另外增加硬件電路,體積小,成本低。由于除了片選端和片內(nèi)地址是確定的,其余單片機(jī)地址無論取1或0,都不會影響對片內(nèi)單元的確定,因此會出現(xiàn)地址重疊。63

2)譯碼法譯碼法分全譯碼和部分譯碼,全譯碼需使用地址譯碼器。當(dāng)譯碼器輸入為某一個固定編碼時,其輸出只有某一個固定的引腳為低電平,其余的為高電平。因此,使用較少的單片機(jī)地址信號編碼即可產(chǎn)生較多的譯碼信號,從而實現(xiàn)對多塊ROM或者多塊RAM和I/O器件的選擇。①全譯碼全譯碼就是擴(kuò)展芯片的地址線與單片機(jī)系統(tǒng)的地址線順次相接后,剩余的單片機(jī)高位地址線全部參加譯碼。由于地址譯碼器使用了全部剩余高位地址線,地址與存儲單元一一對應(yīng),也就是1個存儲單元只占用1個唯一的地址。全譯碼的特點(diǎn):這種譯碼方法存儲器芯片的地址空間是唯一確定的,但譯碼電路相對復(fù)雜。常用的譯碼器有74LS138(3-8譯碼器)、74LS139(雙2-4譯碼器)和74LS154(4-16譯碼器)。64

②部分譯碼單片機(jī)系統(tǒng)的地址線與擴(kuò)展芯片的片內(nèi)地址線順次相接后,剩余的單片機(jī)高位地址線僅一部分參加譯碼。部分譯碼的特點(diǎn):由于地址譯碼器僅使用部分剩余地址線,沒有使用的地址取0和1都可行,使得1個存儲單元或I/O接口單元占用了多個地址。擴(kuò)展芯片的地址空間有重疊,造成單片機(jī)系統(tǒng)地址空間的浪費(fèi)。

2.避免地址重疊方法在并行擴(kuò)展芯片編址時,對于某一擴(kuò)展芯片,如果單片機(jī)地址線部分沒有用到,沒用到的地址可取0或1,使得1個存儲單元或I/O接口單元占用了多個地址,出現(xiàn)擴(kuò)展芯片單元地址重疊,避免單元地址重復(fù)方法如下:(1)用來選擇其他芯片的片選地址線取為1,其他未用到地址線全取為1;(2)用來選擇其他芯片的片選地址線取為1,其他未用到地址線全取為0。653.典型3-8譯碼器74LS13874LS138譯碼器是一種常用的地址譯碼器芯片,其引腳如圖7-4所示,其中,、、、、、、、為8個輸出端,C、B、A為譯碼輸入端,其8種邏輯組合選通各輸出端。G1、、為控制端,只有當(dāng)G1為“1”,且、均為“0”時,譯碼器才能譯碼輸出。否則譯碼器的8個輸出端全為高阻狀態(tài)。74LS138譯碼器控制端、譯碼輸入端與輸出端之間的譯碼關(guān)系如表7-2所示。圖7-474LS138譯碼器引腳66表7-274LS138譯碼器真值表

4.并行擴(kuò)展地址譯碼的應(yīng)用【例7-1】80C51單片機(jī)采用線選法擴(kuò)展RAM和I/O接口,電路如圖7-5所示,單片機(jī)擴(kuò)展1片RAM芯片6116(存儲容量為2KB),擴(kuò)展I/O接口82C55、8155、DAC0832和定時/計數(shù)器8253等各1片。擴(kuò)展外圍芯片除了片選端外,還有片內(nèi)地址,67將單片機(jī)地址總線A0~A15由低位到高位的順序與RAM地址線、I/O片內(nèi)地址線依次相接,由于6116內(nèi)部有2KB的存儲空間,占用11根地址線,單片機(jī)剩余高位地址線A11~A15依次直接與各芯片片選端相接。將A11接6116片選端,A12接82C55片選端,A13接8155片選端、A14接DAC0832片選端,A15接定時/計數(shù)器8253片選端。除片內(nèi)地址和片選端外,各擴(kuò)展芯片未用到的地址位均設(shè)成“1”狀態(tài)(也可設(shè)成“0”狀態(tài)),根據(jù)圖7-5中地址線的連接方法,則各芯片地址如表7-3所示。表7-3線選法方式RAM及I/O地址譯碼表68圖7-5片選法擴(kuò)展RAM和I/O接口69

對于RAM和I/O容量較大的應(yīng)用系統(tǒng),當(dāng)擴(kuò)展芯片所需的片選線多于可利用的高位地址線時,常采用地址譯碼法。它將低位地址線作為芯片片內(nèi)地址,用譯碼器對剩余高位地址線譯碼,譯出的信號作為片選線。【例7-2】80C51單片機(jī)采用全譯碼方式擴(kuò)展RAM和I/O接口,電路如圖7-6所示,單片機(jī)擴(kuò)展2片RAM芯片6264(存儲容量為8KB)、2片RAM芯片6116(存儲容量為2KB),擴(kuò)展I/O接口82C55、8155、DAC0832和定時/計數(shù)器8253等各一片。由于片內(nèi)單元數(shù)最多的6264是8KBRAM,需要13條低位地址線(A0~A12)為片內(nèi)單元尋址,高位地址線僅剩3條(A13~A15),不能對8個芯片采用線選法編址,此時,可采用全譯碼方式,用一片74LS138分別選通8個擴(kuò)展芯片的片選線。圖7-6中,將A15~A13連接74LS138的C、B、A輸入端,Y0連接定時/計數(shù)器8253片選端,Y1連接D/A變換器700832片選端,Y2連接8155片選端,Y3連接82C55片選端,Y4、Y5分別連接2片6116片選端,Y6、Y7分別連接2片6264片選端。除片內(nèi)地址和片選端外,各擴(kuò)展芯片未用到的地址位均設(shè)成“1”狀態(tài)(也可設(shè)成“0”狀態(tài)),根據(jù)圖7-6中地址線的連接方法,則各芯片地址如表7-4所示。71圖7-6單片機(jī)全譯碼擴(kuò)展RAM和I/O接口72表7-4全譯碼方式RAM及I/O地址譯碼表

7.3存儲器擴(kuò)展技術(shù)本節(jié)首先介紹存儲器擴(kuò)展的一般方法,然后介紹如何擴(kuò)展程序存儲器和數(shù)據(jù)存儲器。

7.3.1存儲器的概述一個最小的單片機(jī)系統(tǒng)必須包括程序存儲器和數(shù)據(jù)存儲器。存儲器是單片機(jī)系統(tǒng)的主要組成部分,運(yùn)行程序、處理數(shù)73據(jù)和存儲數(shù)據(jù)都需要存儲器。

1.存儲器的主要指標(biāo)存儲器的主要指標(biāo)有存儲容量和存取速度。(1)存儲容量用字?jǐn)?shù)位數(shù)表示,或者用位數(shù)表示。(2)存取速度用完成一次存取需要的時間表示。高速存儲器的存取時間僅有10ns左右。選擇存儲器件的考慮因素有易失性、只讀性、位容量、功耗、速度、價格和可靠性等。

2.存儲器的類型存儲器的主要類型如下:(1)掩膜ROM(ROM):在制造過程中編程,只適合于大批量生產(chǎn)。(2)可編程ROM(PROM):用獨(dú)立的編程器寫入,只能寫入一次。(3)可擦除可編程ROM(EPROM):電信號編程,紫外線擦除的只讀存儲器芯片。74

(4)電可擦除可編程ROM(EEPROM):電信號編程,電擦除。讀寫操作與RAM相似,寫入速度稍慢。(5)隨機(jī)存儲器(RAM):易失性的存儲器包括靜態(tài)存儲器SRAM(static?random?access?memory)和動態(tài)存儲器DRAM?(dynamic?random?access?memory)。?SRAM和DRAM在掉電的時候均會失去保存的數(shù)據(jù)。(6)閃存(FlashMemory):又稱閃爍存儲器,簡稱閃存。電改寫,電擦除,讀寫速度快(70ns),讀寫次數(shù)多(1萬次)。(7)鐵電存儲器(FRAM):將ROM的非易失性數(shù)據(jù)存儲特性和RAM的無限次讀寫、高速讀寫以及低功耗等優(yōu)勢結(jié)合在一起。FRAM產(chǎn)品包括各種接口(如工業(yè)標(biāo)準(zhǔn)的串口和并口),具有工業(yè)標(biāo)準(zhǔn)的封裝類型和密度(4Kbit、16Kbit、64Kbit、256Kbit和1Mbit等)。

3.?dāng)U展存儲器所需芯片數(shù)目的確定若擴(kuò)展存儲器字長與單片機(jī)字長一致,則只需擴(kuò)展容量。所需芯片數(shù)目按下式確定:75若所選存儲器芯片字長與單片機(jī)字長不一致,則不僅需擴(kuò)展容量,還需字?jǐn)U展。所需芯片數(shù)目按下式確定:

4.存儲器擴(kuò)展的一般方法(1)地址總線16位,可擴(kuò)展片外程序存儲器64KB,地址為0x0000~0xFFFF;可擴(kuò)展片外數(shù)據(jù)存儲器及I/O口共64KB,地址為0x0000~0xFFFF。(2)存儲器芯片的地址線的數(shù)目由芯片的容量決定。容量(Q)與地址線數(shù)目(N)滿足關(guān)系式:Q=2N。一般來說,存儲器芯片的地址線數(shù)目總是少于單片機(jī)地址總線的數(shù)目,連接時,存儲器芯片的地址線與單片機(jī)的地址總線(A0~A15)按從低到高的順序依次相接。連接后,單片機(jī)的高位地址線如有剩余。剩余地址線一般作為譯碼76線,譯碼輸出與存儲器芯片的片選信號線相接。(3)對外擴(kuò)的程序存儲器芯片,其輸出允許控制線與單片機(jī)的信號線相連;對外擴(kuò)的數(shù)據(jù)存儲器芯片,其輸出允許控制線和寫控制線分別與單片機(jī)的讀信號線和寫信號線相連。(4)存儲器芯片的數(shù)據(jù)線與單片機(jī)的數(shù)據(jù)總線(P0.0~P0.7)按由低到高的順序依次相接。【例7-3】在80C51片外擴(kuò)展24KBRAM,采用6264芯片,計算需要幾片6264芯片。解:根據(jù)公式7-1可得,芯片數(shù)=24KB/8KB=3片

5.常用的存儲器(1)EPROM存儲器EPROM是以往單片機(jī)最常選用的一種紫外線可擦除可編程的存儲器,主要有27C系列的EPROM,如27C16(2KB)、27C32(4KB)、27C64(8KB)、27C128(16KB)、27C256(32KB),除了27C16和27C32為24個引腳外,其余均為28個引腳。擴(kuò)展程序存儲器時,應(yīng)盡量用大容量的芯片。77

(2)EEPROM存儲器常用的AT24C02是采用CMOS工藝制作的串行EEPROM存儲器,它具有可用電擦除的256字節(jié)的容量,由3~15V電源進(jìn)行供電。AT24C02將在11.3.4節(jié)具有I2C串行總線的EEPROMAT24C02的設(shè)計中介紹。(3)典型的SRAM存儲器IntelSRAM的典型芯片有6116(2K×8位)、6264(8K×8位)、62256(32K×8位)、628128(128K×8位)等。其中,6264芯片應(yīng)用較廣泛。6264是一種8KB

×

8的靜態(tài)存儲器,它采用CMOS工藝,數(shù)據(jù)存取時間為200ns。其內(nèi)部組成包括512×16×8的存儲器矩陣、行/列地址譯碼器以及數(shù)據(jù)輸入輸出控制邏輯電路。在存儲器讀周期,選中單元的8位數(shù)據(jù)經(jīng)過列I/O控制電路輸出;在存儲器寫周期,外部8位數(shù)據(jù)經(jīng)過輸入數(shù)據(jù)控制電路和列I/O控制電路寫入所選中的單元中。6264有28個引腳,引腳結(jié)構(gòu)如圖7-7所示,采用雙列直插式結(jié)構(gòu),使用單一

+

5V電源。其引腳功能如下:78圖7-76264引腳結(jié)構(gòu)796264的、、、CS共同作用決定了芯片的運(yùn)行方式,如表7-5所示。表7-56264的操作邏輯表

7.3.2程序存儲器的擴(kuò)展51系列單片機(jī)為外部程序存儲器的擴(kuò)展提供了專門的讀指令控制信號,使外部程序存儲器形成獨(dú)立的64KB空間。

1.單片程序存儲器的擴(kuò)展【例7-4】80C51單片機(jī)擴(kuò)展單片27C64A作為程序存儲器,電路如圖7-8所示。27C64A是8K

×

8位的EPROM芯片,將單片機(jī)地址A12~A0連接2764片內(nèi)地址A12~A0,27C6480片選端直接接地,單片機(jī)程序存儲器讀選通信號接2764的端,由此A15~A13組成8個重疊的地址范圍為如表7-6所示。圖7-8單片機(jī)擴(kuò)展單片27C64A程序存儲器81表7-6單片27C64A程序存儲器重疊地址表

2.多片程序存儲器的擴(kuò)展【例7-5】80C51單片機(jī)擴(kuò)展2片27C64A作為程序存儲器,電路如圖7-9所示。圖中,A15連接27C64A(U3)端,并經(jīng)過74LS04反向后連接27C64A(U4)端,由于單片機(jī)地址A12~A0連接2片2764片內(nèi)地址A12~A0,剩余地址A13、A14可以是0或者1,組成4種邏輯狀態(tài),由此,2片27C64A82各有4組重疊地址空間,且各占據(jù)32KB的程序存儲空間,如表7-7所示。圖7-9單片機(jī)擴(kuò)展2764作為程序存儲器83表7-7單片27C64A程序存儲器重疊地址表

7.3.3數(shù)據(jù)存儲器的擴(kuò)展51子系列單片機(jī)片內(nèi)只有128B數(shù)據(jù)RAM,對于數(shù)據(jù)處理量不大的智能儀表及控制系統(tǒng),片內(nèi)的數(shù)據(jù)存儲器完全夠用。但在單片機(jī)需要采集及處理的數(shù)據(jù)量較大時,需要考慮擴(kuò)展片外RAM,可擴(kuò)展的最大容量為64KB。目前使用的RAM有兩類,即靜態(tài)RAM和動態(tài)RAM。在單片機(jī)系統(tǒng)中,外部擴(kuò)展大多為靜態(tài)RAM,如6116、6264、62256。隨著串行接口芯片技術(shù)的發(fā)展,現(xiàn)多采用串行接口EEPROM存儲器,如24CXX系列等。84【例7-6】80C51單片機(jī)采用全譯碼方式擴(kuò)展8片6264RAM,電路如圖7-10所示。單片機(jī)地址A12~A0連接8片6264片內(nèi)地址A12~A0,剩余地址A15、A14、A13連接74LS138譯碼器的C、B、A輸入端,譯碼器輸出端Y0連接6264(U3)片選端,Y1連接6264(U4)片選端,Y2連接6264(U5)片選端,Y3連接6264(U6)片選端,Y4連接6264(U7)片選端,Y5連接6264(U9)片選端,Y6連接6264(U10)片選端,Y7連接6264(U11)片選端。根據(jù)圖7-10中地址線的連接方法,全地址譯碼如表7-8所示。采用全地址譯碼方式,單片機(jī)發(fā)地址碼時,每次只能選中一個存儲單元。同類存儲器間不會產(chǎn)生地址重疊的問題。85圖7-10單片機(jī)全譯碼擴(kuò)展8片6264RAM86表7-8擴(kuò)展8片6264RAM地址表

【例7-7】80C51單片機(jī)采用部分譯碼器法擴(kuò)展2片8KBEPROM2764,2片8KBRAM6264,電路如圖7-11所示。A13和A14分別連接2-4譯碼器74LS139輸入端A、B,74LS139輸出端Y0連接6264(U3)片選端,Y1連接6264(U4)片選端,Y2連接2764(U5)片選端,Y3連接2764(U6)片選端,80C51地址A15引腳未連接線,使得當(dāng)單片87機(jī)地址輸出時,A15可以為0或者1,因此每個芯片都有2個8KB的地址空間。表7-9是80C51擴(kuò)展2片2764和2片6264的地址表。88圖7-11采用部分譯碼器法擴(kuò)展2片8KBEPROM2764和2片8KBRAM626489表7-9擴(kuò)展2片2764和2片6264地址表

7.4I/O接口擴(kuò)展概述I/O(輸入/輸出)接口是MCS-51與外設(shè)交換數(shù)字信息的橋梁,也屬于系統(tǒng)擴(kuò)展的一部分。MCS-51真正用作I/O口線的只有P1口的8位I/O線和P3口的某些位線。在多數(shù)應(yīng)用系統(tǒng)中,MCS-51單片機(jī)都需要外擴(kuò)I/O接口電路。90

1.I/O接口的功能I/O接口電路應(yīng)滿足以下要求:(1)實現(xiàn)和不同外設(shè)的速度匹配大多數(shù)外設(shè)的速度很慢,無法和μs量級的單片機(jī)速度相比。單片機(jī)只有在確認(rèn)外設(shè)已為數(shù)據(jù)傳送做好準(zhǔn)備的前提下,才能進(jìn)行I/O操作。外設(shè)是否準(zhǔn)備好,需I/O接口電路與外設(shè)之間傳送狀態(tài)信息。(2)輸出數(shù)據(jù)鎖存由于單片機(jī)工作速度快,數(shù)據(jù)在數(shù)據(jù)總線上保留的時間十分短暫,無法滿足慢速外設(shè)的接收數(shù)據(jù)的要求。I/O電路應(yīng)具有數(shù)據(jù)鎖存器,以保證接收設(shè)備可靠接收。(3)輸入數(shù)據(jù)三態(tài)緩沖輸入設(shè)備向單片機(jī)輸入數(shù)據(jù),但數(shù)據(jù)總線上面可能“掛”有多個數(shù)據(jù)源,為不發(fā)生沖突,只允許當(dāng)前正在進(jìn)行數(shù)據(jù)傳送的數(shù)據(jù)源使用數(shù)據(jù)總線,其余的應(yīng)處于隔離狀態(tài)。91

2.I/O接口與I/O端口的區(qū)別I/O接口(Interface)是指單片機(jī)與外設(shè)間的I/O接口芯片。I/O端口(Port)是指具有端口地址的寄存器或緩沖器。一個I/O接口芯片可以有多個I/O端口,每個I/O端口是一個數(shù)據(jù)口、命令口或者狀態(tài)口。

3.I/O端口編址I/O端口編址是給所有I/O接口中的寄存器編址,I/O端口編址有兩種方式:獨(dú)立編址與統(tǒng)一編址。(1)獨(dú)立編址方式I/O寄存器地址空間和存儲器地址空間分開編址,但需專門讀寫I/O的指令和控制信號。(2)統(tǒng)一編址方式I/O寄存器與數(shù)據(jù)存儲器單元同等對待,統(tǒng)一編址。不需要專門的I/O指令,直接使用訪問數(shù)據(jù)存儲器的指令進(jìn)行I/O操作,簡單、方便且功能強(qiáng)。92

MCS-51使用統(tǒng)一編址的方式。

4.I/O數(shù)據(jù)的傳送方式為實現(xiàn)MCS-51和不同速度的外設(shè)的匹配,I/O接口必須選擇恰當(dāng)?shù)腎/O數(shù)據(jù)傳送方式。I/O數(shù)據(jù)傳送方式有同步傳送、查詢傳送方式和中斷傳送。(1)同步傳送方式(無條件傳送)當(dāng)外設(shè)速度和單片機(jī)的速度相當(dāng)時,常采用同步傳送方式,最典型的同步傳送就是單片機(jī)和外部數(shù)據(jù)存儲器之間的數(shù)據(jù)傳送。(2)查詢傳送方式(條件傳送,異步式傳送)MCS-51查詢外設(shè)“準(zhǔn)備好”后,再進(jìn)行數(shù)據(jù)傳送。查詢方式通用性好,硬件連線和查詢程序十分簡單;但是效率不高。為提高效率,通常采用中斷傳送方式。(3)中斷傳送方式外設(shè)準(zhǔn)備好后,發(fā)出中斷請求,單片機(jī)進(jìn)入與外設(shè)數(shù)據(jù)傳送的中斷服務(wù)程序,進(jìn)行數(shù)據(jù)的傳送,中斷服務(wù)完成后又返回主程序繼續(xù)執(zhí)行。中斷傳送方式工作效率高。93

7.5簡單74系列并行I/O接口的擴(kuò)展MCS-51有四組I/O口P0~P3,但是在某些特定的場合,可能會出現(xiàn)I/O口不夠用的情況。需要通過擴(kuò)展I/O以滿足使用的需要。 在MCS-51單片機(jī)應(yīng)用系統(tǒng)中,經(jīng)常采用74系列TTL電路或4000系列CMOS電平的鎖存器或三態(tài)門電路構(gòu)成簡單并行I/O口。例如:74LS273、74LS373、74LS377等鎖存器可構(gòu)成輸出口,用74LS244緩沖驅(qū)動器可作為輸入口,74LS245三態(tài)輸出8路收發(fā)/驅(qū)動器可作為雙向口使用。這種應(yīng)用通常是利用P0口的第二功能擴(kuò)展I/O。由于P0口第二功能是地址/數(shù)據(jù)總線分時復(fù)用,擴(kuò)展的原則是:“輸出要鎖存,輸入要三態(tài)緩沖或鎖存選通”。【例7-8】80C51單片機(jī)利用74LS244和74LS373芯片擴(kuò)展簡單I/O口,電路如圖7-12所示,將P0口擴(kuò)展成簡單的輸入、輸出口的電路。74LS244是緩沖驅(qū)動器,擴(kuò)展為輸入口,連接8個按鈕開關(guān);74LS373擴(kuò)展為輸出口,連接894個LED發(fā)光二極管,用來顯示8個按鈕開關(guān)狀態(tài),某位開關(guān)為低電平時二極管發(fā)光。74LS273和74LS244的工作受80C51的P2.7、、三條控制線控制。當(dāng)P2.7=0,=0(=1)時選中74LS244,8位開關(guān)的狀態(tài)被讀入單片機(jī)P0口。當(dāng)P2.7=0,=0(=1)選中74LS373,80C51單片機(jī)P0口數(shù)據(jù)鎖存到74LS373;可見,74LS244和74LS373具有相同端口地址:0x7fff,單片機(jī)讀數(shù)據(jù)時,選中74LS244;單片機(jī)輸出數(shù)據(jù)時,選中74LS373。參考C程序如下:#include<reg51.h>#include<absacc.h>#defineucharunsignedchar#defineIN244XBYTE[0x7fff]//輸入端口地址#defineOUT273XBYTE[0x7fff]//輸出端口地址voidmain(void){uchara;

95while(1){a=IN244;//讀244數(shù)據(jù)OUT273=a;//輸出數(shù)據(jù)給373,驅(qū)動二極管顯示}}96

圖7-12利用74LS244和74LS373芯片擴(kuò)展簡單I/O口7.6通用可編程I/O接口芯片82C55的擴(kuò)展82C55是一種通用的可編程并行I/O接口芯片,用于幾乎所有微型機(jī)系統(tǒng)中,如8086、MCS-51、Z80CPU系統(tǒng)等。82C55有3個8位帶鎖存或緩沖的數(shù)據(jù)端口,可與外設(shè)并行交換數(shù)據(jù)。用戶可用程序來選擇多種操作方式,成為CPU與外設(shè)之間靈活的并行輸入/輸出接口芯片。7.6.1并行I/O接口芯片82C55下面介紹82C55的應(yīng)用特性。1.82C55的引腳信號82C55采用雙列直插式封裝,共40引腳,如圖7-13所示,各引腳信號功能如下:(1)D7~D0:三態(tài)雙向數(shù)據(jù)線,與單片機(jī)的數(shù)據(jù)總線P0相連,用來傳送數(shù)據(jù)信息。(2)PA7~PA0:PA口的8根I/O信號線,與外部設(shè)備連接。(3)PB7~PB0:PB口的8根I/O信號線,用于與外部設(shè)備連接。97

(4)PC7~PC0:PC口的8根I/O信號線,用于與外部設(shè)備連接。(5):片選信號線,低電平有效時,選中82C55芯片。(6):讀信號線,低電平有效時,控制從82C553個數(shù)據(jù)端口寄存器之一讀出信息。(7):寫信號線,低電平有效,用于控制向82C554個數(shù)據(jù)端口和控制端口之一寫入信息。(8)A1、A0:地址線,其邏輯關(guān)系組合成為4個端口的地址譯碼信號。A1A0=00,選中PA口;A1A0=01,選中PB口;A1A0=10,選中PC口;A1A0=11,選中控制口。(9)RESET:復(fù)位信號線,高電平時有效。(10)VCC:+5V電源線。(11)GND:地信號線。98

圖7-1382C55引腳

2.82C55內(nèi)部結(jié)構(gòu)82C55內(nèi)部結(jié)構(gòu)如圖7-14所示,分為2部分功能部件:與微處理器接口功能部件和與外設(shè)接口的功能部件。99

圖7-1482C55內(nèi)部結(jié)構(gòu)(1)與外設(shè)接口部分——三個獨(dú)立的數(shù)據(jù)口82C55片內(nèi)有3個彼此獨(dú)立的8位數(shù)據(jù)端口PA口、PB口、PC口。1)PA口:由一個8位輸入鎖存器和一個8位輸出鎖存器及緩沖器組成。100

2)PB口:由一個8位的數(shù)據(jù)輸入緩沖器和一個8位的數(shù)據(jù)輸出鎖存器及緩沖器組成。3)PC口:由一個8位的數(shù)據(jù)輸入緩沖器和一個8位的數(shù)據(jù)輸出鎖存器組成。PA口、PB口和PC口都可作為獨(dú)立的輸入口和輸出口使用,PA口適合雙向數(shù)據(jù)傳輸。在方式1和方式2應(yīng)用中,PC端口的某些位固定配合PA口和PB口的工作。(2)與微處理器的接口部分1)數(shù)據(jù)總線緩沖器數(shù)據(jù)總線緩沖器是一個雙向的三態(tài)8位緩沖器,是82C55和系統(tǒng)數(shù)據(jù)總線連接的通道,傳送輸入/輸出數(shù)據(jù)、CPU發(fā)出的控制字及外設(shè)的狀態(tài)信息。2)內(nèi)部控制部分——A組、B組控制電路82C55內(nèi)部控制部分包含A組、B組控制電路2部分,A組控制PA口和PC口的高4位(PC4~PC7)。B組控制PB口和PC口的低4位(PC0~PC3)。101

內(nèi)部控制的功能是執(zhí)行單片機(jī)CPU寫入的“控制字”,接收讀/寫控制部件的讀/寫命令,決定A、B組的工作方式和讀/寫操作。3)讀寫控制邏輯將單片機(jī)送來的地址線(A1、A0)、控制線(、RESET、和)組合,根據(jù)相應(yīng)的邏輯關(guān)系,把CPU的控制字、數(shù)據(jù)送至控制端口或數(shù)據(jù)端口,或?qū)⑼庠O(shè)狀態(tài)、外設(shè)輸入數(shù)據(jù)通過相應(yīng)數(shù)據(jù)端口到CPU。82C55控制信號對4個端口執(zhí)行的操作的情況如表7-10所示。102

3.82C55的工作方式、控制字和編程(1)82C55的工作方式82C55有3種工作方式:方式0、方式1、方式2。103

(2)控制字單片機(jī)CPU向82C55控制寄存器輸出2種不同的控制字,決定82C55工作方式和3個數(shù)據(jù)端口執(zhí)行的輸入/輸出操作??刂谱址譃楣ぷ鞣绞娇刂谱趾蚉C置1/置0控制字兩種。2種控制字都必須寫入控制寄存器才能發(fā)揮作用。1)工作方式控制字82C553種工作方式由方式控制字決定,工作方式控制字的特征是最高位D7=1,格式如圖7-15所示。104圖7-15工作方式控制字格式105

【例7-9】設(shè)82C55作掃描鍵盤和數(shù)碼管顯示接口芯片,PA口工作于方式0,控制七段數(shù)碼管輸出段選碼,PC口工作于方式0,作為鍵盤掃描線輸出,PB口工作于方式0作為鍵盤輸入線,設(shè)82C55控制口地址為0x7ff3,寫出82C55初始化語句。參考C程序如下:#include<absacc.h>#defineCOM8255XBYTE[0x7ff3]//控制寄存器地址voidmain(void){ COM8255=0x82; //寫入82C55控制寄存器

…}2)PC置1/置0控制字82C55在與CPU傳輸數(shù)據(jù)的過程中,有時需要將C端口的某幾位作為控制位或狀態(tài)位106來使用,或需要將C端口按位設(shè)置以配合PA或PB的工作,需將PC按位置1或清0。PC置1/置0控制字的格式如圖7-16所示,說明如下。107

【例7-10】設(shè)計采用82C55的PC7產(chǎn)生方波。設(shè)82C55控制口地址為0x7ff3,向82C55控制口寫入0x0f,則PC7置1;向控制口寫入0xe,PC7清0。參考C程序段如下:#include<absacc.h>#defineuintunsignedint#defineCOM8255XBYTE[0x7ff3]//控制口地址voiddelay(uintz) //延時函數(shù){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voidmain(void){ COM8255=0x0f;//PC7置1delay(5);

108COM8255=0xe;//PC7清0delay(5);}7.6.2并行I/O接口82C55的3種工作方式82C55的PA、PB和PC3個數(shù)據(jù)口具有3種工作方式。1.工作方式0方式0是基本的輸入/輸出工作方式,提供簡單的輸入和輸出操作,不需要固定應(yīng)答信號。PA口、PB口和PC口(PC口分為2個4位使用)都可工作在方式0下,方式0特點(diǎn)如下:(1)具有兩個8位端口(PA、PB)和兩個4位端口(PC口的高4位和PC口的低4位)。(2)任何一個端口都可以設(shè)定為輸入或者輸出。(3)每一個端口輸出時可鎖存,輸入可緩沖。PA口、PB口和PC口3個數(shù)據(jù)口都具有輸出鎖存器和輸入緩沖器,可工作在方式0的以下情況:109

(1)適用于無條件傳輸數(shù)據(jù)的設(shè)備,如讀一組開關(guān)狀態(tài)、控制一組指示燈;不使用應(yīng)答信號,CPU可以隨時讀出開關(guān)狀態(tài),隨時把一組數(shù)據(jù)送指示燈顯示。(2)鍵盤掃描。

2.工作方式1工作方式1是選通輸入/輸出方式,工作方式1僅適用于PA和PB,當(dāng)PA口和PB口在方式1下進(jìn)行數(shù)據(jù)的輸入/輸出時,必須利用PC口某些位提供選通和應(yīng)答信號,即PA和PB輸入/輸出是由PC口固定位的硬件狀態(tài)決定。此時PA口和PB口既可以作輸入,也可作輸出,輸入和輸出都具有鎖存能力。(1)方式1輸入無論是PA口輸入還是PB口輸入,都用PC口固定的三位作應(yīng)答信號,一位作中斷允許控制位,各應(yīng)答信號如圖7-17所示,信號含義如下:110

1):外設(shè)輸入給82C55的“輸入選通”信號,低電平有效;2)IBF:82C55輸出給外設(shè)的“輸入緩沖器滿”信號,高電平有效;3)INTR:82C55送給CPU的“中斷請求”信號,高電平有效;4)INTE:82C55內(nèi)部為控制中斷而設(shè)置的“中斷允許”111信號,可通過對PC4(PA口)和PC2(PB口)的置位/復(fù)位控制字來開放中斷或禁止。當(dāng)82C55PA或PB工作在方式1選通輸入方式,單片機(jī)可以采用查詢輸入或中斷輸入2種方式讀取外設(shè)數(shù)據(jù):1)采用查詢式輸入時,單片機(jī)可以查82C55的輸入緩沖器信號IBF,若IBF為高,則CPU讀入數(shù)據(jù)。2)采用中斷方式輸入時,應(yīng)該先用C口置1/置0的控制字使相應(yīng)的端口允許中斷,即使INTEA(PC4)=1或INTEB(PC2)=1,然后將中斷請求信號INTR送單片機(jī)外部中斷。以PA工作于方式1輸入為例,介紹工作過程如下:①當(dāng)外設(shè)向82C55PA7~PA0引腳輸入數(shù)據(jù)時,外設(shè)需要在上送入一個低電平選通信號。②82C55接收到后,首先將PA7~PA0上數(shù)據(jù)存入PA口的輸入數(shù)據(jù)緩沖/鎖存器,接著將IBFA變?yōu)楦唠娖?,通知外設(shè),PA接收到輸入數(shù)據(jù)。112

③當(dāng)82C55檢測到由低電平變?yōu)楦唠娖健BFA(PC5)=1和INTEA(PC4)=1同時滿足時,使INTRA(PC3)變?yōu)楦唠娖?,INTRA可向單片機(jī)發(fā)出外部中斷請求。其中,INTEA(PC4)=1的設(shè)置可由PC4置/復(fù)位控制字來控制。④單片機(jī)響應(yīng)INTRA中斷后,在中斷服務(wù)程序中讀取PA中的輸入數(shù)據(jù)。當(dāng)數(shù)據(jù)被讀走后,INTRA中斷請求撤銷,IBFA清0,外設(shè)可以傳送下一個數(shù)據(jù)。(2)方式1輸出無

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論