《單片機原理及應用系統(tǒng)設計》課件第6章_第1頁
《單片機原理及應用系統(tǒng)設計》課件第6章_第2頁
《單片機原理及應用系統(tǒng)設計》課件第6章_第3頁
《單片機原理及應用系統(tǒng)設計》課件第6章_第4頁
《單片機原理及應用系統(tǒng)設計》課件第6章_第5頁
已閱讀5頁,還剩201頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

6.1系統(tǒng)擴展概述

6.2總線擴展及地址分配

6.3外部存儲器及其訪問

6.4外部程序存儲器擴展

6.5外部數(shù)據(jù)存儲器的擴展

6.6并行I/O接口的擴展

6.7A/D和D/A轉換接口的擴展

6.8串行總線擴展技術

習題六第六章單片機系統(tǒng)功能的擴展技術單片機系統(tǒng)擴展,一般是以基本的最小系統(tǒng)為基礎的,故首先應熟悉最小系統(tǒng)的結構。所謂最小系統(tǒng),是指一個真正可用的單片機最小配置系統(tǒng)。對于片內(nèi)帶有的程序存儲器的AT89S52單片機,只要在芯片上外接時鐘電路和復位電路就達到真正可用,即為一個最小系統(tǒng),如圖6-1所示。6.1系統(tǒng)擴展概述圖6-1最小系統(tǒng)6.2.1總線擴展

AT89S52單片機有很強的外部擴展能力,大部分常規(guī)集成電路芯片可用于單片機的擴展電路。擴展的內(nèi)容主要有總線、程序存儲器、數(shù)據(jù)存儲器、I/O口擴展、A/D和D/A擴展、中斷擴展等。但由于受引腳的限制,AT89552單片機P0口是分時復用的地址/數(shù)據(jù)總線,而且與I/O口線復用,為了將地址總線與數(shù)據(jù)總線分離出來,以便同片外的電路正確連接,

需要在單片機外部增加地址鎖存器,構成片外三總線結構,即地址總線、數(shù)據(jù)總線和控制總線結構,如圖6-2所示。6.2總線擴展及地址分配圖6-2AT89S52擴展三總線結構

1.常用擴展器件簡介

1)地址鎖存器

地址鎖存器可使用帶三態(tài)緩沖輸出的8-D鎖存器74LS373,8282或帶清除端的8-D鎖存器74LS273。74LS373地址鎖存器的引腳配置及結構如圖6-3所示。圖6-374LS273地址鎖存器引腳圖及結構圖

2)74LS244和74LS245芯片

74LS244和74LS245常作單片機系統(tǒng)的總線驅動器,也作三態(tài)數(shù)據(jù)緩沖器。74LS244為單向驅動器或數(shù)據(jù)緩沖器。74LS244的內(nèi)部結構如圖6-4所示。它由8個三態(tài)門構成,分成兩組,分別由控制端1G和2G控制;74LS245的內(nèi)部結構如圖6-5所示。它由16個三態(tài)門構成,每個方向8個。在控制端G低電平有效時,由DIR控制數(shù)據(jù)的方向。當DIR為“1”時,數(shù)據(jù)從左到右傳送,當DIR為“0”時,數(shù)據(jù)從右到左傳送。74LS245的內(nèi)部結構如圖6-5所示。圖6-474LS244內(nèi)部邏輯與引腳圖圖6-574LS245內(nèi)部邏輯與引腳圖當P2口需要增加驅動能力時,可采用單項驅動器74LS244,其連接如圖6-6(a)所示。圖中兩個控制端1G和2G均接地,相當于8個三態(tài)門均打開,數(shù)據(jù)從P2口到A8~A15

端直通,也就是說,此處采用74LS244主要是為了增加驅動能力而不加任何控制。

當MCS-51單片機的P0口需要增加驅動能力時,必須采用雙向驅動器,可用74LS245,其連接如圖6-6(b)所示。圖6-6總線驅動器的連接圖

3)3-8譯碼器74LS138

3-8譯碼器74LS138為一種常用的地址譯碼器芯片,其引腳圖如圖6-7所示。其中,G1、、為3個控制端,只有當G1為“1”且、均為“0”時,譯碼器才能進

行譯碼輸出。否則譯碼器的8個輸出端全為高阻狀態(tài)。譯碼輸入端與輸出端的譯碼邏輯關系如表6-1所示。圖6-774LS138引腳圖表6-174LS138的譯碼邏輯關系

2.三總線

AT89S52單片機的片外引腳可構成如圖6-8所示的三總線結構,通過擴展的三總線,單片機可以方便地擴展其外部數(shù)據(jù)存儲器,外部程序存儲器及I/O接口,同時外圍芯片也可以通過這三總線進行擴展。

1)地址總線(AB)

2)數(shù)據(jù)總線(DB)

3)控制總線(CB)

圖6-8AT89S52系統(tǒng)擴展及接口結構6.2.2地址分配

1.線選法

根據(jù)圖6-9中片選線的連接方法,地址譯碼如表6-2所示。圖6-9線選法地址譯碼表6-2線選法地址譯碼表

2.地址譯碼選通法

圖6-10所示為采用74LS138作為地址譯碼器的全地址譯碼電路,6264字選需要的地址線為13條,則剩余的3根地址線可作為片選線。譯碼器的8根輸出線分別對應于一個8KB的地址空間。

根據(jù)圖6-10中的片選線的連接方法,全地址譯碼如表6-3所示。圖6-10全地址譯碼電路表6-3全地址譯碼表6.3.1外部程序存儲器及其訪問

1.AT89S52單片機訪問外部程序存儲器所使用的控制信號

2.訪問外部程序存儲器的過程

3.擴展外部程序存儲器的連接方法

AT89S52單片機外部程序存儲器

擴展方法如圖6-11所示。6.3外部存儲器及其訪問圖6-11外部程序存儲器擴展

4.地址鎖存器的作用

5.訪問外部程序存儲器的時序

訪問片外ROM的操作時序分兩種情況:執(zhí)行非MOVX指令的時序;執(zhí)行MOVX指令的時序,如圖6-12所示。圖6-12外部程序存儲器的操作時序6.3.2外部數(shù)據(jù)存儲器及其訪問

1.擴展外部數(shù)據(jù)存儲器的連接方法

AT89S52單片機在芯片內(nèi)已經(jīng)集成了256B的數(shù)據(jù)存儲器,當應用系統(tǒng)的控制要求比較簡單、需要處理的數(shù)據(jù)量不大時,256B的存儲空間基本夠用。但當應用系統(tǒng)的控制功能比較復雜、需要處理的數(shù)據(jù)量較大時,可向外擴展數(shù)據(jù)存儲器,最大可擴展到64KB的存儲空間。

AT89S52單片機的外部數(shù)據(jù)存儲器擴展方法如圖6-13所示。圖6-13外部數(shù)據(jù)存儲器擴展

2.訪問外部數(shù)據(jù)存儲器的時序

圖6-14所示為訪問外部數(shù)據(jù)存儲器的讀時序。圖6-14外部數(shù)據(jù)存儲器讀操作的時序使用MOVX@DPTR,A指令對外部數(shù)據(jù)存儲器進行寫操作的時序如圖6-15所示。

圖6-15外部數(shù)據(jù)存儲器寫操作的時序6.4.1常用EPROM芯片

2764A是一種8K×8位的紫外線擦除電可編程的只讀存儲器,單一+5V電源供電,工作電流為75mA,維持電流為35mA,讀出時間最長為250ns。28腳雙列直插式封裝的引腳配置和引腳含義如圖6-16所示。6.4外部程序存儲器擴展圖6-162764A和27128A芯片引腳圖

2764A和27128A工作方式與控制線所加電壓的關系,如表6-4所示。表6-42764A和27128A工作方式選擇6.4.2典型EPROM擴展電路實現(xiàn)

隨著大規(guī)模集成電路技術的發(fā)展,大容量存儲器芯片的產(chǎn)量劇增,售價不斷降低,其性能價格比明顯增高。所以,在設計單片機系統(tǒng)時,應優(yōu)先采用大容量存儲芯片。這樣,不僅可以使電路板的體積減小,成本降低,還可以降低系統(tǒng)功耗和減少控制邏輯電路,從而提高系統(tǒng)的穩(wěn)定性和可靠性。

AT89S52外擴16KBEPROM27128的電路圖如圖6-17所示。圖6-17AT89S52與27128的連線圖訪問ROM/EPROM的指令為MOVCA,@A+PC或MOVCA,@A+DPTR。如讀取EPROM地址為1000H單元內(nèi)容的程序為:

MOV DPTR,#1000H

MOVC A@A+DPTR6.5.1RAM(SRAM)的擴展

1.靜態(tài)RAM的引腳及工作方式

常用的靜態(tài)RAM芯片有6116、6264、62128、62256等。引腳排列如圖6-18所示。靜態(tài)RAM有讀出、寫入和維持3種工作方式,工作方式選擇如表6-5所示。6.5外部數(shù)據(jù)存儲器的擴展圖6-18常用靜態(tài)RAM芯片引腳圖表6-5靜態(tài)RAM的工作方式選擇

2.外部靜態(tài)數(shù)據(jù)存儲器的擴展電路

圖6-19給出了用線選法擴展AT89S52外部數(shù)據(jù)存儲器的電路。圖6-19線選法擴展三片6264電路圖圖6-20為用地址譯碼法擴展AT89S52外部數(shù)據(jù)存儲器的電路圖。圖6-20地址譯碼器法擴展外部數(shù)據(jù)存儲器電路圖

(1)向RAM的5000H單元寫數(shù)據(jù)DATA:

MOV A,#DATA

MOV DPTR,#5000H

MOVX @DPTR,A

(2)從7FFFH單元讀數(shù)據(jù):

MOV DPTR,#7FFFH

MOVX A,@DATR6.5.2并行E2PROM的擴展

程序調(diào)試時,用E2PROM代替EPROM,既可以方便地修改程序,也能保存調(diào)試好的程序。與RAM芯片相比,E2PROM的寫操作速度較慢。另外,它的擦寫有壽命限制,雖然有1萬次之多,但也不宜用在數(shù)據(jù)頻繁更新的場合。常用的并行E2PROM芯片有2816/2816A、2817/2817A、2864A等,其引腳如圖6-21所示。

2817A與AT89S52的連接電路如圖6-22所示。圖6-21常用EEPROM引腳圖圖6-222817A與AT89S52的連接電路圖

【例6-1】根據(jù)圖6-22中2817A與AT78S52的連接電路,編寫2817A進行寫操作的子程序,要寫入的數(shù)據(jù)取自源數(shù)據(jù)區(qū)。

子程序的入口參數(shù)如下:

R0:寫入的字節(jié)數(shù)計數(shù)器。

R1:2817A的低8位地址寄存器。

R2:2817A的高8位地址寄存器。

R3:源數(shù)據(jù)區(qū)首地址的低8位寄存器。

R4:源數(shù)據(jù)區(qū)首地址的高8位寄存器。程序清單如下:

WR1:

MOV

DP0L,R3

MOV

DP0H,R4

;將源數(shù)據(jù)區(qū)16位地址傳輸?shù)紻PTR0中

MOVX

A,@DPTR;取數(shù)據(jù)

INC

DPTR ;源數(shù)據(jù)地址指針加1

MOVR3,DP0L

MOVR4,DP0H ;將新的源數(shù)據(jù)區(qū)地址保存在R3,R4中

MOVDP0L,R1

MOVDP0H,R2 ;將2817A地址傳輸?shù)紻PTR0中

MOVX@DPTR,A ;將A的內(nèi)容寫入DPTR0中

WAIT:JNBP1.0,WAIT;一個字節(jié)未寫完等待

INCDPTR ;2817A地址加1

MOVR1,DP0L

MOVR2,DP0H ;將2817A的地址保存在R1,R2中

DJNZR0,WR1 ;未完成,循環(huán)

RET6.6.1簡單I/O接口的擴展

圖6-23中,P0口為雙向數(shù)據(jù)線,它既能從74LS244輸入數(shù)據(jù),又能將數(shù)據(jù)傳送給74LS373輸出。6.6并行I/O接口的擴展圖6-23簡單I/O接口擴展舉例圖6-23電路的功能是按下任意鍵,對應的LED發(fā)光。程序如下:

LOOP: MOV

DPTR,#0FEFFH

;擴展I/O接口地址送DPTR

MOVX

A,@DPTR;通過244讀入數(shù)據(jù),檢測鍵的狀態(tài)

MOVX

@DPTR,A;向373輸出數(shù)據(jù),驅動LED

SJMP

LOOP;循環(huán)6.6.2可編程8155的并行I/O擴展

1.8155的組成結構及引腳

8155的組成結構及40腳雙列直插式封裝引腳如圖6-24所示。圖6-248155的組成結構框圖及其芯片的引腳

2.8155的RAM和I/O接口地址編碼

AT89S52單片機應用系統(tǒng)中8155的RAM和I/O接口按外部數(shù)據(jù)存儲器統(tǒng)一編址。

當IO/

=0時,單片機對8155RAM進行讀/寫,RAM低8位地址為00H~FFH;

當IO/

=1時,單片機對8155中的I/O接口進行讀/寫。8155內(nèi)部I/O及定時器的低8位地址如表6-6所示。表6-68155I/O接口地址編碼及功能表其中,命令寄存器和狀態(tài)寄存器共用一個地址,所以又稱為命令/狀態(tài)寄存器,由讀/寫指令來區(qū)分是寫命令寄存器還是讀狀態(tài)寄存器。

如:

HOVX A,@DPTR ;讀狀態(tài)寄存器

HOVX @DPTR,A ;寫命令寄存器

3.8155的I/O接口工作方式及選擇

1)命令寄存器

8155可編程接口芯片只有一個控制字。將一個8位控制字寫入命令寄存器,就可以確定PA口、PB口、PC口和定時器的工作方式及功能,如圖6-25所示。圖6-258155命令寄存器的工作方式控制字格式

2)I/O接口的工作方式

·基本輸入/輸出:

當8155被編程為ALT1、ALT2時,A口、B口、C口均工作于基本輸入/輸出方式。其區(qū)別是,當編程為ALT1時,C口為輸入;當編程為ALT2時,C口為輸出。

·選通輸入/輸出:

當8155被編程為ALT3時,A口定義為選通I/O,B口定義為基本I/O;當8155被編程為ALT4時,A口、B口均定義為選通I/O方式。

ALT4的邏輯組態(tài)如圖6-26所示。圖6-268155的A口、B口均為選通輸入/輸出時的邏輯結構

3)狀態(tài)寄存器及I/O接口的狀態(tài)字

8155有一個狀態(tài)寄存器,狀態(tài)字的格式如圖6-27所示。狀態(tài)寄存器由7位鎖存器組成,每位是一個狀態(tài)。該寄存器是只讀寄存器。在對8155讀操作時,能從1/0地址×××××000B讀出。它鎖存I/O口和定時器的當前工作狀態(tài),供CPU查詢。圖6-278155狀態(tài)寄存器格式

4)PA寄存器及A口

可以按照命令寄存器的內(nèi)容確定是輸入還是輸出寄存器,也可按照命令使這個口既可在基本方式下工作,又可以在聯(lián)絡線的選通方式下工作。

5)PB寄存器及B口

與PA寄存器的功能相同。

6)PC寄存器及C口

PC寄存器僅有6位,由命令寄存器的第二位和第三位確定。這6位可以為基本輸入口、輸出口或作為PA和PB接口的控制信號。當PC作為控制口時,PC0~PC2位分配給PA口,PC3~PCS位分配給PB口。

4.8155的定時/計數(shù)器

1)定時器方式選擇

在8155中還設置有一個14位的定時/計數(shù)器,可用來定時或對外部事件計數(shù),CPU可通過程序選擇計數(shù)長度和計數(shù)方式。計數(shù)長度和計數(shù)方式由輸入到計數(shù)寄存器的計數(shù)控制字來確定,計數(shù)寄存器的格式如圖6-28所示。圖6-288155定時器格式其中,T0~T13為計數(shù)長度,可表示的長度范圍為2H~3FFFH。TH的最高兩位M2、M1用來設置定時器的輸出方式。8155定時器方式及相應的輸出波形如圖6-29所示。圖6-298155定時器方式及輸出波形

2)定時器編程

對定時器進行編程時,首先將計數(shù)常數(shù)及定時器方式送入計數(shù)寄存器TL及TH;然后寫啟動定時器命令到命令寄存器。

任何時候都可以設置定時器的長度和工作方式,然后必須將啟動命令寫入命令寄存器。即使定時/計數(shù)器已經(jīng)計數(shù),在寫入啟動命令后仍可改變定時器的工作方式。

5.AT89S52單片機擴展8155的接口應用

1)AT89S52與8155的基本連接方法

AT89S52單片機擴展8155后,直接為系統(tǒng)增加了256B片外RAM,22位I/O口線及一個14位定時器。具體電路如圖6-30所示。圖6-30AT89S52與8155的連接方法由于8155芯片內(nèi)部有地址鎖存器,因此單片機P0口輸出的低8位地址不需另加鎖存器,可直接與8155的AD0~AD7相連,這樣單片機P0口既作低8位地址總線,又作數(shù)據(jù)總線,

地址用ALE信號鎖存到8155中。高8位地址由CE和IO/M的地址控制線決定,所以圖中連接狀態(tài)下的地址如表6-7所示。表6-78155中RAM和I/O口地址分派表

【例6-2】對于圖6-30的電路,編寫程序向8155中RAM的6EH單元送入立即數(shù)17H。

解其匯編語言程序清單如下(只有通過累加器A才能把數(shù)據(jù)送到外部RAM中):

HOV

A,#17H ;立即數(shù)17送入累加器A

MOV

DPTR,#E6EH ;指向8155的6EH單元

MOVX

@DPTR,A ;把立即數(shù)17H送入8155的

;6EH單元

【例6-3】編寫程序,將8155設置為I/O接口和定時器工作方式,A口定義為基本輸入方式,B口定義為基本輸出方式,定時器作為方波發(fā)生器。對輸入脈沖進行24分頻(8155中定時器最高計數(shù)頻率為4MHz)。

8155的操作程序如下:

MOV DPTR,#7F04H ;指向定時器低8位

HOV A,#18H ;計數(shù)常數(shù)0018H=24

HOVX @DPTR,A ;裝入計數(shù)常數(shù)低8位

INC DPTR ;指向定時器高8位

MOV A,#40H ;設置定時器方式為連續(xù)方波輸出

MOVX @DPTR,A ;裝入定時器高8位

MOVX DPTR,#7F00H ;指向命鉀狀態(tài)寄存器

MOV A,#CZH ;命令控制字設定為A口基本輸入方式,

;B口基

;本輸出方式;并啟動定時器

MOVE @DPTR,A ;命令字送命令寄存器,啟動計數(shù)

2)利用8155芯片擴展鍵盤/顯示器接口

(1)硬件電路。

圖6-31是用8155實現(xiàn)的AT89S52單片機與4X8鍵盤、8位LED顯示器(8位8段共陰極)的接口電路。圖6-318155實現(xiàn)鍵盤/顯示器原理框圖

(2)軟件設計。

軟件包括動態(tài)顯示子程序和鍵盤掃描子程序。具體介紹如下:

①動態(tài)顯示子程序對圖6-31中的8位LED顯示器,在AT89S52內(nèi)部RAM中設置了8個顯示緩沖單元,分別用于存放顯示的8位數(shù)據(jù)。動態(tài)顯示程序的流程圖如圖6-32所示。程序清單如下:

DIS: MOV A,#00000011b ;初始化8155PA、PB口為輸出; ;PC口為輸入

MOV DPTR,#7F00H ;8155命令口地址送DPTR

MOVX @DPTR,A ;寫命令

MOV R0,#70H;70H~77H單元存8個顯示數(shù)據(jù)

MOV R3,#7FH;第一位LED的位選碼7FH

MOV A,R3

AGAIN: MOV DPTR,#7F01H ;指向PA口

MOVX @DPTR,A ;位選碼送PA口

MOVA, @R0 ;取顯示數(shù)據(jù)

MOV DPTR,#DSEG ;取段選碼表首址

MOVC A,@A+DPTR ;取段選碼 MOV DPTR#7F02H ;指向PB口

MOVX @DPTR,A ;段選碼送PB口

ACALL DL1MS ;延時1ms

INC R0 ;指向下一顯示數(shù)據(jù)單元

HOV A,R3

JNB ACC.0,OUT ;8位顯示完,轉OUT

RR A ;未完,調(diào)整為下一位位選碼

MOV R3,A

AJMP AGAIN ;繼續(xù)顯示下一位

OUT: RET ;子程序返回

DSEG: DB 3FH,06H,SBH,4FH,66H,6DH

;顯示0,1,2,3,4,5

DB 7DH,07H,7FH,6FH,77H,7CH

;顯示6,7,8,9,A,B

DB 39H,SEH,79H,71H ;顯示C,D,E,F

DL1ms: MOV R7,#01H ;延時1ms子程序

DLI: DJNZ R6,DL1

DJNZ R7,DLO

RET圖6-32動態(tài)顯示子程序流程圖②鍵盤掃描子程序。

在掃描鍵盤的過程中應兼顧顯示器的顯示,鍵盤掃描子程序框圖如圖6-33所示。圖6-33鍵盤掃描子程序框圖程序清單如下:

KEYSUB: MOV A,#00000011B;

;8155初始化PA口,PB口輸出,PC口輸入

MOV DPTR,#7F00H ;控制字地址送入DPTR

MOVX @DPTR,A ;向8155輸出控制字

BEGIN: ACALL DIS ;調(diào)顯示子程序

ACALL CLEAR ;清0顯示器,即熄滅

ACALL CCSCAN

;全列置零掃描,判有無按鍵按下

JNZ INK1 ;有鍵按下,轉INK1

AJMP BECIN

INK1: ACALL DIS ;調(diào)顯示子程序,延時8~9ms ACALLDLIns

ACALL DLIns ;共延時約10ms去料

ACALL CLEAR ;熄滅顯示器

ACALL CCSCAN

;全列置零掃描,判是否確有按鍵按下

JNZ INK2 ;確有鍵按下,轉INK2

AJMP BEGIN ;抖動引起,轉回BEGIN

INK2: MOV R2,#0FEH ;掃描第一列,置第一列為0

MOV R4,#00H ;列號送R4

COLUM: MOV DPTR,#7F01H ;指向PA口 MOV A,R2 ;掃描碼送A

MOVX @DPTR,A ;輸出掃描碼

INC DPTR

INC DPTR ;指向PC口

MOVX A,@DPTR ;讀入PC口

JB ACC.0,LONE

;第一行無按鍵按下,轉LONE

MOV A,#00H ;第一行有按鍵按下,行碼送A

AJMP KCODE ;轉KCODE,定按鍵的鍵號

LONE: JB ACC.1,LTWO

;第二行無按鍵按下,轉LTWO

MOV A,#08H ;第二行有按鍵按下,行碼送A

AJMP KCODE

LTWO: JB ACC.2,LTHR

;第三行無按鍵按下,轉LTHR

MOV A,#10H ;第三行有按鍵,行碼送A

AJMP KCODE

LTHR: JB ACC.3,NEXT

;第四行無按鍵按下,轉掃描下一列

KCODE: ADD A,R4 ;行首鍵號加列號得鍵號

PUSH A ;鍵號入棧保護

KON: ACALL DIS ;調(diào)顯示,等待按鍵釋放

ACALL CLEAR ;熄滅顯示

ACALL CCSCAN ;判按鍵是否仍按下

JNZ KON ;鍵未釋放,繼續(xù)等待

POP A ;恢復鍵號到A中 RET ;返回

NEXT: INC R4 ;列號加1

MOV A,R2 ;列掃描碼送A

JNB ACC.7,KERR

;全8列掃描完,無按鍵,為干擾,轉KERR

RL A ;高速為下一列掃描碼

MOV R2,A ;保存掃描碼

AJMP COCDM ;繼續(xù)掃描下一列

KERR: AJMP BEGIN ;繼續(xù)等待鍵輸入

CCSCAN

MOV[DW]DPTR,#7F01H

;指向PA口

MOV A,#00H

MOVX @DPTR,A ;PA口輸出全零

INC DPTR INC DPTR ;指向PC口

MOVX A,@DPTR ;讀PC口

CPL A

ANL A,#0FH ;屏蔽高4位

RET

CLEAR: MOV DPTR,#7F02H ;指向PB口

MOV A,#00H ;段選碼為00H

MOVX @DPTR,A ;PB口輸出全0

RET ;返回6.6.38255A可編程并行I/O接口擴展

8255A的引腳及內(nèi)部結構如圖6-34所示。

1.8255A的引腳說明

2.內(nèi)部結構

1)端口A、B、C

2)工作方式控制電路

3)數(shù)據(jù)總線緩沖器

4)讀/寫控制邏輯電路

各端口的工作狀態(tài)如表6-8所示。圖6-348255A的引腳圖及內(nèi)部結構框圖表6-88255A端口的操作狀態(tài)

3.8255A的工作方式

8255A有三種基本工作方式:方式0為基本輸入/輸出;方式1為選通輸入/輸出;方式2為雙向傳送。如圖6-35所示,它們由CPU向控制端口輸出的控制字來選擇。

1)工作方式0

2)工作方式1

3)工作方式2

各引腳的功能如表6-9所示。圖6-358255A的工作方式示意圖表6-98255A的C口各聯(lián)絡控制信號線功能

4.8255A的控制字

8255A共有兩個控制字,用來選擇工作方式或對C口進行控制。

1)方式控制字

8255A的三個端口工作在什么方式,是輸入還是輸出,這些都是由工作方式控制字來設定的。方式控制字的格式如圖6-36所示。圖6-368255A方式控制字格式

【例6-4】設A口地址為FF7CH;B口地址為FF7DH;C口地址為FF7EH;控制字地址為FF7FH。要求8255A工作在方式0,A口作為輸入,B口、C口作為輸出。編寫相應程序。

8255A相應的控制字為10010000B=90H。

初始化程序如下:

MOV A,#90H

;方式0,A口輸入,B口、C口輸出

MOV DPTR,#0FF7FH

;控制寄存器地址送DPTR

MOVX @DPTR,A ;方式控制字送控制寄存器若讀A口數(shù)據(jù):

MOV DPTR,#0FF7CH ;A口地址送DPTR

MOVX A,@DPTR ;從A口讀數(shù)據(jù)

若把DATA1數(shù)據(jù)寫入B口:

MOV DPTR,#0FF7DH ;送B口地址到DPTR

MOV A,#DATA1 ;將DATA1送累加器A

MOVX @DPTR,A ;將DATA1送B口輸出

2)端口C置位/復位控制字

由于C口常作為聯(lián)絡控制位使用,應使C口各位用置位/復位控制字單獨設置,以實現(xiàn)用戶要求的控制功能,格式如圖6-37所示。圖6-37端口C按位置位/復位控制字

【例6-5】設控制字地址為FF7FH,分別置位和復位C口的第5位,即PC4。編寫相應程序。

解置位PC4的控制字為00001001B=9H。

置位程序如下:

MOV

DPTR,#0FF7FH ;送控制字地址到DPTR

MOV

A,#9H ;將控制字送累加器A

MOVX

@DPTR,A ;將控制字送控制寄存器

;執(zhí)行PC4=1復位PC4的控制字為00001000B=8H。

復位程序如下:

MOV

DPTR,#0FF7FH ;送控制字地址到DPTR

MOV

A,#8H ;將控制字送累加器A

MOVX

@DPTR,A ;將控制字送控制寄存器

;執(zhí)行PC4=0

【例6-6】圖6-38中,8255A的片選線與Q7連接,打印機與AT89S52采用查詢方式交換數(shù)據(jù)。打印機的狀態(tài)信號BUSY輸入給PC7,打印機忙時BUSY=1。打印機的數(shù)據(jù)輸

入采用選通控制,當上出現(xiàn)下降沿時數(shù)據(jù)被寫入,要求編寫向打印機輸出80個數(shù)據(jù)的程序。圖6-38AT89S52通過擴展8255A與微型打印機接口

8255A的A、B、C和控制寄存器的口地址分別為7CH、7DH、7EH和7FH。8255A采用方式0,由PC0模擬產(chǎn)生信號。因PC7輸入,PC0輸出,則方式選擇控制字為10001110B=8EH。自內(nèi)部RAM20H單元開始向打印機輸出80個數(shù)據(jù)的程序如下:

MOV R0,#7FH ;R0指向控制口

MOV A,#8EH ;方式控制字為8EH

MOVX @R0,A ;送方式控制字

MOV R1,#20H ;送內(nèi)部RAM數(shù)據(jù)塊首地址

MOV R2,#50H ;置數(shù)據(jù)塊長度LP: MOV R0,#7EH ;R0指向C口

LP1: MOVX A,@R0 ;讀PC7即BUSY狀態(tài)

JB ACC.7,LP1 ;BUSY=1,查詢等待打印機

MOV R0,#7CH ;指向A口

MOV A,@R1 ;取RAM數(shù)據(jù)

MOVX @R0,A ;數(shù)據(jù)輸出到8255A口鎖存

INC R1 ;RAM地址加1

MOV R0,#7FH ;指向控制口

MOV A,#00H ;PC0復位控制字

MOVX @R0,A ;PC0=0,產(chǎn)生的下降沿

MOV A,#01H ;PC0置位控制字

MOVX @R0,A ;PC0=1,產(chǎn)生的上升沿

DJNZ R2,LP ;未完,則重復

1.分辨率

分辨率是指A/D轉換器能夠分辨出來的輸出模擬電壓的最小變化量,反映了對輸入模擬信號的最小變化的分辨能力,由下式計算:

其中,n為A/D轉換器的位數(shù)。6.7A/D和D/A轉換接口的擴展

2.量化誤差

量化誤差是指由A/D轉換器有限的分辨率而引起的誤差。量化誤差有兩種表示方法:一種是絕對量化誤差;另一種是相對量化誤差。

絕對量化誤差

相對量化誤差

6.7.18位并行A/D轉換器ADC0809的擴展

1.ADC0809的結構原理

ADC0809是美國國家半導體公司生產(chǎn)的8位ADC,采用逐次逼近的方法完成A/D轉換。

ADC0809的內(nèi)部結構如圖6-39所示。圖6-39ADC0809的內(nèi)部結構框圖

2.ADC0809的引腳及功能

ADC0809是28腳雙列直插式封裝,引腳如圖6-40所示。各引腳功能說明如下所示。

ADDA~ADDC的輸入與被選通的通道的關系如表6-10所示。圖6-40ADC0809引腳圖表6-10ADDA~ADDC的輸入與被選通的通道的關系

3.ADC0809與AT89S52接口

1)查詢方式

圖6-41為ADC0809與AT89S52單片機的接口電路。圖6-41ADC0809與AT89S52的接口下面的程序是采用查詢方法,分別對8路模擬信號輪流采樣一次,并依次把結果存儲到內(nèi)部RAM中的采樣轉換程序:

MAIN: MOV R1,#DATA ;數(shù)據(jù)區(qū)地址指針指向首單元

MOV DPTR,#7FF8H ;送通道0地址

MOV R7,#08H ;通道數(shù)計數(shù)器

LOOP: MOVX @DPTR,A

;啟動A/D轉換,P2.7=0且=0

LOOP1:

NOP

JNB P3.3,LOOP1 ;查詢轉換結束信號EOC

MOVX

A,@DPTR ;讀取轉換結果,P2.7=0且=0

MOV @R1,A ;存轉換結果

INC DPTR ;指向下一通道

INC R1 ;修改數(shù)據(jù)區(qū)指針

DJNZ R7,LOOP ;8個通道全采樣完否

2)中斷方式

ADC0809與AT89S52的中斷方式接口電路只需要將圖6-41中ADC0809的腳經(jīng)過一個非門再接到AT89S52的腳即可。采用中斷方式可大大節(jié)省CPU的時間。當轉換結束時,EOC發(fā)出一個正脈沖,經(jīng)非門后向單片機申請中斷,單片機響應中斷請求,由外部中斷1的中斷服務程序讀A/D轉換結果,并啟動ADC0809的下一次轉換。外中斷1采用下降沿觸發(fā)方式。初始化程序如下:

INT1: SETB

IT1 ;外中斷1初始化

SETB

EA

SETB

EX1

MOV

DPTR,#7FF8H ;啟動ADC0809對通道IN0轉換 MOV

A,#00H ;A中可以是任意數(shù)值

MOVX

@DPTR,A

中斷服務程序清單如下:

PINT1: MOV DPTR,#7FF8H ;讀取A/D轉換結果,送緩沖單元30H

MOVX A,@DPTR

MOV 30H,A

MOV A,#00H ;啟動A/D轉換

MOVX @DPTR,A

RETI6.7.212位并行A/D轉換器AD574的擴展

1.AD574的特點

2.AD574的引腳及功能

28腳雙列直插式封裝的引腳如圖6-42所示。其引腳功能說明如下所示。

1)模擬量輸入引腳

2)數(shù)字量輸出引腳

3)控制引腳圖6-42AD574引腳圖利用該接口電路完成一次A/D轉換,并把轉換結果高8位存入R2中,低8位存入R3中,其工作程序如下:

MIAN:MOV R0,#7CH ;選擇AD574,并令A0=0

MOVX @R0,A ;啟動A/D轉換,全12位

LOOP:NOP

JB P3.2,LOOP ;查詢轉換是否結束

MOVX A,@R0 ;讀取高8位

MOV R2,A ;存入R2中

MOV R0,#7DH ;令A0=1

MOVX A,@R0 ;讀取低4位,尾隨4個0

MOV R3,A ;存入R3中

6.7.38位并行D/A轉換器DAC0832的擴展

1.DAC0832的結構原理

1)DAC0832的特性

2)DAC0832的引腳及邏輯結構

DAC0832的引腳如圖6-43所示。其邏輯結構如圖6-44

所示,由8位鎖存器、8位DAC寄存器和8位D/A轉換器構成。圖6-43DAC0832芯片的引腳圖6-44DAC0832的邏輯結構框圖

2.AT89S52與D/A轉換器接口

1)直通工作方式應用

2)單緩沖方式應用

圖6-45為具有一路模擬量輸出的應用系統(tǒng)。圖6-45DAC0832單緩沖器方式應用

【例6-7】根據(jù)圖6-44所示電路,編寫產(chǎn)生鋸齒波和方波程序。

解產(chǎn)生鋸齒波程序清單如下:

START:

MOV DPTR,#7FFFH ;設置D/A口地址

MOV A,#00H ;輸入數(shù)字量初值00H到A

LOOP:HOVX@DPTR,A ;輸出對應于A內(nèi)容的模擬量

INC A ;修改A的內(nèi)容

AJMPLOOP ;返回循環(huán)產(chǎn)生方波程序清單:

START: MOV DPTR,#7FFFH ;設置D/A口地址

LOOP: MOV A,#EFH ;給A送最大值

MOVX @DPTR,A ;D/A輸出相應模擬量

ACALL delay ;延時(略)

MOV A,#00H ;給A送最小值

MOVX @DPTR,A ;D/A輸出相應模擬量

ACALL delay ;延時(略)

AJMP LOOP ;返回循環(huán)

3)雙緩沖方式應用

在圖6-46中,每一路模擬量輸出需一片DAC0832。圖6-46DAC0832雙緩沖方式接口電路

【例6-8】根據(jù)圖6-46,編寫程序實現(xiàn)兩路D/A同步轉換輸出。

解程序清單如下:

MOV DDPTR,#0DFFH ;指向DAC0832(1)

MOV A,#DATAI;DATAI送入DAC0832(1)中鎖存

MOVX @DPTR,A

MOV DRTP,#0BFFFH ;指向DAC0832(2)

MOV A,#DATA2;DATA2送入DAC0832(2)中鎖存

MOVX @DPTR,A

MOV DPTR,#7FFFH;給0832(l)和(2)提供WR信號

MOVX @DPTR,A;同時完成D/A轉換輸出6.8.1SPI和I2C串行總線接口

1.SPI串行總線接口

(1)串行時鐘線SCK。

(2)低電平有效的從機選擇線。

(3)主機輸出/從機輸入數(shù)據(jù)線MOSI。

(4)主機輸入/從機輸出數(shù)據(jù)線MISO。

在大多數(shù)應用場合,SPI總線的典型應用系統(tǒng)是單主系統(tǒng),即由1個微控制器和1個或幾個從I/O設備所構成的各種系統(tǒng),典型的結構如圖6-47所示。6.8串行總線擴展技術圖6-47SPI總線結構框圖SPI總線的典型時序圖如圖6-48所示。圖6-48SPI數(shù)據(jù)傳送格式

2.I2C總線接口

1)I2C總線

I2C總線的器件接口如圖6-49所示,接口設有數(shù)據(jù)輸入/輸出引腳SDA和時鐘輸入/輸出引腳SCL。圖6-49I2C總線接口原理圖單主機結構的

I2C總線結構圖如圖6-50所示。圖6-50單主結構I2C總線結構圖

2)I2C總線的基本時序

在I2C總線上,每一位數(shù)據(jù)位的傳送都與時鐘脈沖相對應。在數(shù)據(jù)傳送時,SDA線上的數(shù)據(jù)在時鐘的高電平期間必須保持穩(wěn)定。數(shù)據(jù)線的高或低電平狀態(tài)只有在SCL線的時鐘信號是低電平時才能改變,如圖6-51所示。圖6-51I2C數(shù)據(jù)位的有效性規(guī)定根據(jù)I2C總協(xié)議的規(guī)定,當SCL線處于高電平時,SDA線從高電平向低電平切換表示起始條件;當SCL線處于高電平時,SDA線由低電平向高電平切換表示停止條件。數(shù)據(jù)傳送的起始信號和終止信號如圖6-52所示。

圖6-52數(shù)據(jù)傳送的起始信號和終止信號利用I2C總線進行數(shù)據(jù)傳送時,傳送的字節(jié)數(shù)是沒有限制的,但是每一個字節(jié)必須保證是8位長度,先送高位后送低位。每傳送一個字節(jié)數(shù)據(jù)以后都必須跟隨一個應答位。應答信號時序如圖6-53所示。

圖6-53應答信號時序

3)I2C總線典型信號模擬子程序

(1)啟動信號子程序START。

在SCL高電平期間,SDA發(fā)生負跳變,其子程序如下:

START: SETB SDA

SETB SCL

NOP

NOP

CLR SDA;發(fā)出啟動信號

NOP

NOP

CLR SCL

RET

(2)終止信號子程序STOP。

在SCL高電平期間,SDA發(fā)生正跳變,其子程序如下:

STOP: CLR SDA

SETB SCL

NOP

NOP

SETB SDA;發(fā)出停止信號

NOP

NOP

CLR SCL

RET

(3)發(fā)送應答位子程序ACK。

在SDA低電平期間SCL發(fā)生一個正脈沖,其子程序如下: ACK: CLR SDA

SETB SCL

NOP

CLR SCL

SETB SDA

RET

(4)發(fā)送非應答位子程序NACK。

在SDA高電平期間,SCL發(fā)生一個正脈沖,其子程序如下:

NACK: SETB SDB

SETB SCL

NOP

NOP

CLR SCL

CLRSDA

RET

(5)檢查應答位子程序CHECK。

在檢查應答位子程序中,設置了標志位F0,當檢查到正常應答位時,F0=0,否則,F1=1。

CHECK子程序如下:

CHECK: SETB SDB

SETB SCL

CLR F0

MOV C,SDA

JNC CHECK0

;檢查SDA狀態(tài),正常應答轉CHECK0 SETB F0 ;無正常應答,F0=1

CHECK0: CLR SCL

NOP

RET

(6)寫一個字節(jié)數(shù)據(jù)子程序WRBYT。

該子程序完成發(fā)送1字節(jié)數(shù)據(jù)操作,其子程序如下:

WRBYT:

MOV

R7,#08H ;8位數(shù)據(jù)長度發(fā)送R7

WRB1:RLC

A;發(fā)送數(shù)據(jù)左移,使發(fā)送位進入CY

MOV

SDA,C

SETB

SCL

NOP

NOP

CLR

SCL

CLR

SDA

DJNZ

R7,WRB1

RET

(7)讀一個字節(jié)子程序RDBYTE。

該子程序完成接收1字節(jié)數(shù)據(jù)操作,其子程序如下:

RDBYTE:

MOV R7,#08H;8位數(shù)據(jù)長度送R7

RDB1:

SETB SDA

SETB SCL

MOV C,SDA

RLC A

CLR SCL

DJNZ R7,RDB1

RET6.8.2鍵盤/顯示器串行擴展技術

1.LED顯示接口設計

在單片機應用系統(tǒng)中,常用的顯示器件之一是七段LED數(shù)碼管。七段LED數(shù)碼管分共陰極和共陽極兩種,其引腳排列及內(nèi)部結構如圖6-54所示。LED數(shù)碼管通過點亮特定的字段來顯示數(shù)字或符號。共陰和共陽七段LED數(shù)碼管的顯示字符與對應的顯示段碼如表6-11所示,共陽七段數(shù)碼管的段碼剛好是共陰數(shù)碼管段碼的反碼。圖6-54七段LED數(shù)碼管的引腳排列及內(nèi)部結構表6-11共陰極七段LED數(shù)碼管和共陽極七段LED數(shù)碼管的字形段碼表這里介紹一種由移位寄存器74HC164構成的串行LED顯示接口電路,其原理圖如圖6-55所示。

上述LED顯示電路具有以下特點:

(1)通過調(diào)節(jié)LM317的輸出電壓來調(diào)節(jié)數(shù)碼管的亮度,省去了大量的限流電阻。

(2)采用3線制串行接口,硬件連接簡單,占用單片機較少的I/O口線。

(3)顯示位數(shù)可任意擴展。圖6-55LED顯示電路原理圖位地址00H作為小數(shù)點顯示選擇位,當00H=0時,不顯示小數(shù)點,00H=1時,顯示小數(shù)點。顯示程序設計如下:

LEDCLK EQUP1.5

LEDDATA EQUP1.6

LEDCS EQUP1.7

LEDDISP: SETB LEDCS;關LED顯示

CLR 00H;不顯示小數(shù)點

MOV A,40H

CALL DOUT;調(diào)用傳用1字節(jié)段碼子程序

MOV A,41H

CALL DOUT

MOV A,42H CALL DOUT

MOV A,43H

CALL DOUT

MOV A,44H

CALL DOUT

MOV A,45H

CALL DOUT

CLR LEDCS ;開LED顯示

RET

DOUT: MOV DPTR,#TAB

MOVC A,@A+DPTR ;取顯示段碼

JNB 00H,NDOT

CLR ACC.7 ;清段碼最高位,顯示小數(shù)點NDOT: MOV R7,#08H

CYC: RRC A

MOV LEDDATA,C

CLR LEDCLK

NOP

SETB LEDCLK

DJNZ R7,CYC

RET

TAB: DB0C0H,0F9H,0A4H,0B0H,99H,

DB92H,82H,0F8H,80H,90H,0FFH

2.非編碼式鍵盤設計

圖6-56所示的是具有5個按鍵的非編碼式鍵盤接口電路。圖6-56非編碼式鍵盤原理圖在設計非編碼式鍵盤接口程序時,需要解決以下三個問題:

(1)按鍵識別。

(2)消抖處理。

(3)串鍵保護。具體設計程序時,為了能定時地讀取鍵值,一般將鍵盤程序放在定時器中斷服務程序中。

根據(jù)上述思路,鍵盤程序設計如下:

TIMERO:PUSH

A

PUSH

PSW

MOV

THO,#0D0H ;設置定時間時間為10ms

MOV

THO,#0F0H

SETB

P1.0 ;準備讀引腳

SETB

P1.1

SETB

P1.2

SETB

P1.3

SETB

P1.4 MOV A,P1 ;讀P1.0~P1.4引腳電平

ANL A,#1FH

CJNE A,46#,K0 ;與上次鍵值相同?

SJMP K5

K0: MOV 46H,A ;保存鍵值

CJNE A,#1EH,K1 ;K1鍵閉合?

ACALL SUBK1 ;執(zhí)行K1鍵命令程序

SJMP K5

K1: CJNE A,#1DH,K2 ;K2鍵閉合?

ACALL SUBK2 ;執(zhí)行k2鍵命令程序

SJMP K5K2: CJINE A,#1BH,K3 ;K3鍵閉合?

ACALL SUBK3 ;執(zhí)行K3鍵命令程序

SJMP

K3: CJNE A,#17H,K4 ;K4鍵閉合?

ACALL SUBK4 ;執(zhí)行K4鍵命令程序

SJMP K5

K4: CJINE A,#0FH,K5 ;K3鍵閉合?

ACALL SUBK5 ;執(zhí)行K5鍵命令程序

K5: POP A

POP PSW

RETI6.8.3E2PROM串行擴展技術

AT24C04的芯片引腳排列及引腳功能如圖6-57所示。

AT24C04與AT89S52單片機的接口十分簡單,其原理如圖6-58所示。

AT24C04從機地址的構成如圖6-59所示。圖6-57AT24C04系列器件的引腳及功能圖6-58AT24C04與AT89S52單片機的硬件接口圖6-59AT24C04從機地址構成單字節(jié)讀操作時序如圖6-60所示,其操作時序由以下幾個過程構成:主機發(fā)出起始信號(START)表明一次數(shù)據(jù)傳送的開始,接著主機發(fā)送從機地址(寫)和片內(nèi)存儲空間地址。主機再次發(fā)送起始信號,接著發(fā)送從機地址(讀),然后讀取從機數(shù)據(jù),最后進入結束周期。當AT24C04接收數(shù)據(jù)以后,都應發(fā)出應答信號ACK。圖6-60單字節(jié)讀操作時序單字節(jié)寫操作時序如圖6-61所示。寫字節(jié)操作時序同樣由起始信號開始,然后連續(xù)發(fā)送從機地址、片內(nèi)存儲空間地址和數(shù)據(jù)字節(jié)。最后進入結束總線周期。圖6-61單字節(jié)寫字節(jié)操作時序下面給出單片機從AT24C04中連續(xù)寫4個字節(jié)和連續(xù)讀4個字節(jié)子程序。

(1)連續(xù)寫4字節(jié)數(shù)據(jù)子程序。

設AT24C04片內(nèi)存儲空間地址存放在AT89S52單片機內(nèi)部的30H單元,寫入AT24C04的數(shù)據(jù)存放在31H~34H單元。R1存放數(shù)據(jù)緩沖區(qū)首地址,R6為字節(jié)寄存器。SDAEQUP3.4

SCLEQUP3.5

WRITE4:LCALLSTART ;啟動I2C總線

MOVA,#0AOH ;從機地址(寫)送A中

LCALLWRBYTE ;發(fā)送從機地址

LCALLCHECK ;檢查應答位

JBF0,WTRITE4

MOVA,30H;

LCALL

CHECK

JB

F0,WRITE4

MOV

R1,#31H ;數(shù)據(jù)緩沖區(qū)首地址送R1

MOV

R6,#04 ;設置字節(jié)數(shù)WRITE40:

MOV A,@R1

LCALL WRBYTE

LCALL CHECK

JB F0,WRITE4

INC R1

DJNZ R6,WRITE40 ;判斷4個字節(jié)是否讀完

LCALL STOP ;發(fā)送停止信號

RET

(2)連續(xù)讀4字節(jié)數(shù)據(jù)子程序。

設AT24C04片內(nèi)存儲空間地址存放在AT89S52單片機內(nèi)部的30H單元,從AT24C04讀取的數(shù)據(jù)存放在31H~34H單元。R1存放數(shù)據(jù)緩沖區(qū)首地址,R6為循環(huán)計數(shù)器。

SDA EQUP3.4

SCL EQUP3.5

READ4: LCALL START ;啟動I2C總線

MOV A,#0A

溫馨提示

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

評論

0/150

提交評論