第八章 AT89S51單片機的擴展_第1頁
第八章 AT89S51單片機的擴展_第2頁
第八章 AT89S51單片機的擴展_第3頁
第八章 AT89S51單片機的擴展_第4頁
第八章 AT89S51單片機的擴展_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第八章 AT89S51單片機的擴展河工科技河工科技甕嘉民制作甕嘉民制作第八章第八章 AT89S51單片機的擴展單片機的擴展第三節(jié)第三節(jié) 單片機和單片機和CPLD接口設計接口設計第二節(jié)第二節(jié) 簡單簡單I/O口擴展口擴展第一節(jié)第一節(jié) AT89S51單片機系統(tǒng)的擴展單片機系統(tǒng)的擴展第一節(jié) AT89S51單片機系統(tǒng)的擴展單片機系統(tǒng)的擴展一、一、AT89S51最小應用系統(tǒng)最小應用系統(tǒng)123456781415299Y112MHzC433PC533P2122232425262728EA/VPVCC+5V3140XTAL1XTAL21918RESETGND20+5VC3/47UFS1R1100R21KP1.0

2、P1.1P1.2P1.3P1.4P1.5P1.6P1.7T0T1PSENP20P21P22P23P24P25P26P273938373635343332AT89S52P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7INT0INT1T0T1ALE/PROG1213141530RXDTXDWRRD10111617 圖8-1 AT89S51 最小應用系統(tǒng) 二、二、AT89S51單片機的片外總線結構單片機的片外總線結構如圖2-8所示的三總線結構:地址總線(AB)、數(shù)據(jù)總線(DB)和控制總線(CB)構成,所有外部芯片都通過這三組總線進行擴展。 數(shù)據(jù)總線:8位數(shù)據(jù)總線由P0口的八位線承擔此

3、任,此時不用外接上拉電阻。 地址總線:16位地址總線由P0口承擔地址低八位線即A0 A7; P2口承擔地址高八位線,即A8 A15。注意:P0口線地址/數(shù)據(jù)總線分時復用,需用地址鎖存器74LS373鎖存地址。 控制總線三、三、AT89S51單片機的系統(tǒng)擴展能力單片機的系統(tǒng)擴展能力圖8-2 AT89S51單片機系統(tǒng)的存儲器擴展能力四、存儲器擴展四、存儲器擴展1線選法線選法線選法把單片機高位地址分別與多個擴展芯片的片選端連通,控制選擇各芯片的電平,以達到選片的目的。線選法的優(yōu)點是接線簡單,適用于擴展芯片較少的場合,缺點是芯片地址不連續(xù),地址空間利用率低。 2譯碼法譯碼法譯碼法是通過譯碼電路決定擴展

4、芯片地址的方法。譯碼電路常選擇集成芯片如74LS138 (3-8譯碼器)、74LS139(雙2-4譯碼器)和PLD器件實現(xiàn)。線選法的優(yōu)點是適用于擴展芯片較多的場合,芯片地址連續(xù),地址空間利用率高,缺點是接線復雜。 1234567810111213141518193129920403938373635343332P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RXDTXDINT0INT1T0T1XTAL2XTAL1EA/VPPSENRESETGNDAT89S52VccP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7ALE/PROGP2.0P2.1P2.2P2.3P

5、2.4P2.5P2.6P2.72122232425262728D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D7347813141718D0D1D2D3D4D5D6D7Q0Q1Q2Q3Q4Q5Q6Q7SN74HC373256912151619A0A1A2A3A4A5A6A7OELE111A8A9A10A11A12U1U2109876543252421232A0A1A2A3A4A5A6A7A8A9A10A11A122764256912151619CEOEPGMVPPU3A0A1A2A3A4A5A6A7A8A9A10A11A12D0D1D2D3D4D5D6D7D0D1D2D3D4D5

6、D6D72022271109876543252421232A0A1A2A3A4A5A6A7A8A9A10A11A122764256912151619CEOEPGMVPPU4A0A1A2A3A4A5A6A7A8A9A10A11A12D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D72022271109876543252421232A0A1A2A3A4A5A6A7A8A9A10A11A1262641112131516171819CS2CS1WEOEU5A0A1A2A3A4A5A6A7A8A9A10A11A12D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D7262027

7、22PSENWRRD圖圖8-3 用線用線選法選法擴展擴展多片多片存儲存儲器器表8-1 圖8-3中外擴存儲器的地址空間分配芯片芯片序號序號存儲器存儲器容量容量A15A14A13A12 A0地址編碼地址編碼U327648K1 1 01 1 000000000000001111111111111C000HDFFFHU427648K1 0 11 0 100000000000001111111111111A000HBFFFHU562648K0 1 10 1 1000000000000011111111111116000H7FFFH1234567810111213141518193129920403938

8、373635343332P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RXDTXDINT0INT1T0T1XTAL2XTAL1EA/VPPSENRESETGNDAT89S52VccP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7ALE/PROGP2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.72122232425262728D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D7347813141718D0D1D2D3D4D5D6D7Q0Q1Q2Q3Q4Q5Q6Q7SN74HC373256912151619A0A1A2A3A4A5A6A7

9、OELE111A8A9A10A11A12U1U2109876543252421232A0A1A2A3A4A5A6A7A8A9A10A11A122764256912151619CEOEPGMVPPU3A0A1A2A3A4A5A6A7A8A9A10A11A12D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D72022271109876543252421232A0A1A2A3A4A5A6A7A8A9A10A11A122764256912151619CEOEPGMVPPU4A0A1A2A3A4A5A6A7A8A9A10A11A12D0D1D2D3D4D5D6D7D0D1D2D3D4D5D

10、6D72022271109876543252421232A0A1A2A3A4A5A6A7A8A9A10A11A1262641112131516171819CS2CS1WEOEU5A0A1A2A3A4A5A6A7A8A9A10A11A12D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D726202722PSENWRRD109876543252421232A0A1A2A3A4A5A6A7A8A9A10A11A1262641112131516171819CS2CS1WEOEU6A0A1A2A3A4A5A6A7A8A9A10A11A12D0D1D2D3D4D5D6D7D0D1D2D3D4

11、D5D6D726202722ABEY0Y1Y2Y323174HC139A圖圖8-4 用譯碼用譯碼法擴展法擴展多片存多片存儲器儲器表8-2 圖8-4中外擴存儲器的地址空間分配芯片芯片序號序號存儲器存儲器容量容量A15A14A13A12 A0地址編碼地址編碼U327648K0 0 00 0 0000000000000011111111111110000H1FFFHU427648K0 0 10 0 1000000000000011111111111112000H3FFFHU562648K0 1 00 1 0000000000000011111111111114000H5FFFHU662648K0 1

12、 10 1 1000000000000011111111111116000H7FFFH第二節(jié)第二節(jié) 簡單簡單I/O口擴展口擴展一、簡單的并行輸入、輸出口擴展電路一、簡單的并行輸入、輸出口擴展電路AT89S51單片機是將外部I/O口和外部RAM單元統(tǒng)一編址的,這樣每個擴展的接口如同一個擴展的外部RAM單元一樣。因此,訪問外部I/O接口和訪問外部RAM單元一樣,都是使用MOVX類指令。圖8-8 簡單的輸入、輸出口擴展電路例例8.1 以圖8-8為例,其中74HC244外接8個按鍵,74HC273接8個發(fā)光二極管,單片機通過74HC244讀取按鍵狀態(tài),然后將按鍵狀態(tài)送給74HC273點亮對應的發(fā)光二極

13、管。解:解:(1)硬件設計)硬件設計硬件設計如圖8-9所示,所需元件如表8-5所列。圖圖8-9 串行端口輸出擴展硬件仿真圖和效果圖串行端口輸出擴展硬件仿真圖和效果圖二、用串行口擴展二、用串行口擴展I/O口口圖8-10 利用串行口擴展并行輸入口圖8-11 利用串行口擴展并行輸出口 第三節(jié)第三節(jié) 單片機和單片機和CPLD接口設計接口設計單片機與CPLD的接口方式一般有兩種,即總線方式與獨立方式。FPGA/CPLDI1ALEP2RDWRAT89S5188DECODERWR_ENABLE1WR_ENABLE2RD_ENABLELATCH_ADDRESWR_ENABLE2LATCH_OUT2WR_ENA

14、BLE1LATCH_OUT1DATOUT1AD_CSREADYDATOUT2DATAIN1LATCH1LATCHT_IN18888888P0WRRDP2P0ALE圖8-12 CPLD/FPGA與AT89S51單片機的總線接口通信邏輯圖一、設計思路一、設計思路低8位數(shù)據(jù)地址低8位數(shù)據(jù)地址數(shù)據(jù)低8位指令地址指令數(shù)據(jù)地址指令地址A7A0外部RAM讀/寫允許指令讀允許A15A8A15A8A7A0A7A0P0P2WR/RDPSENALE地址鎖存沿圖圖8-13 AT89S51單片機總線接口方式工作時序單片機總線接口方式工作時序二、二、VHDL源程序源程序LIBRARY IEEE; - 51單片機讀寫電路U

15、SE IEEE.STD_LOGIC_1164.ALL;ENTITY MCS_51 IS -文件名為MCS_51.vhd PORT( -與AT89S51接口的各端口定義: P0: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); -雙向地址/數(shù)據(jù)口 P2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -高8位地址線 RD,WR:IN STD_LOGIC; -讀、寫允許 ALE :IN STD_LOGIC; - 地址鎖存 READY:IN STD_LOGIC; -待讀入數(shù)據(jù)準備就緒標志位 AD_CS:OUT STD_LOGIC;-A/D器件片選信號 DA

16、TAIN1:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-單片機待讀回信號 LATCH1 :IN STD_LOGIC; -讀回信號鎖存 DATOUT1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-鎖存輸出數(shù)據(jù)1 DATOUT2: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-鎖存輸出數(shù)據(jù)2END MCS_51;ARCHITECTURE ART OF MCS_51 IS SIGNAL LATCH_ADDRES:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL LATCH_OUT1:STD_LOGIC_VEC

17、TOR(7 DOWNTO 0); SIGNAL LATCH_OUT2:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL LATCH_IN1:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL WR_ENABLE1:STD_LOGIC; SIGNAL WR_ENABLE2:STD_LOGIC; BEGIN PROCESS ( ALE ) -低8位地址鎖存進程 BEGINIF ALEEVENT AND ALE= 0 THEN LATCH_ADDRES=P0; -ALE的下降沿將P0口的低8位地址 END IF; -鎖入鎖存器LATCH_ADDRES中

18、END PROCESS;PROCESS(P2,LATCH_ADDRES) -WR寫信號譯碼進程1 BEGIN IF ( LATCH_ADDRES= 11110101) AND ( P2= 01101111 ) THEN -地址為 6FF5H WR_ENABLE1=WR; -寫允許 ELSE WR_ENABLE1= 1; END IF ;-寫禁止 END PROCESS; PROCESS ( WR_ENABLE1 ) -數(shù)據(jù)寫入寄存器1 BEGINIF WR_ENABLE1EVENT AND WR_ENABLE1 = 1 THEN LATCH_OUT1= P0; END IF;END PROCE

19、SS;PROCESS (P2,LATCH_ADDRES ) -WR寫信號譯碼進程2 BEGINIF ( LATCH_ADDRES= 11110011)AND(P2= 00011111 ) THEN -地址為 1FF3H WR_ENABLE2= WR; -寫允許ELSE WR_ENABLE2= 1;END IF; -寫禁止END PROCESS;PROCESS (WR_ENABLE2 ) -數(shù)據(jù)寫入寄存器2BEGINIF WR_ENABLE2EVENT AND WR_ENABLE2= 1 THEN LATCH_OUT2=P0; END IF;END PROCESS;PROCESS(P2,LATC

20、H_ADDRES,READY,RD) -8031對PLD中數(shù)據(jù)讀入進程BEGINIF ( LATCH_ADDRES= 01111110 ) AND ( P2= 10011111 )AND ( READY= 1) AND ( RD= 0 ) THEN P0=LATCH_IN1; -寄存器中的數(shù)據(jù)讀入P0口ELSE P0= ZZZZZZZZ; -禁止讀數(shù),P0口呈高阻態(tài)END IF ; END PROCESS;PROCESS(LATCH1 ) -外部數(shù)據(jù)進入CPLD進程BEGIN IF LATCH1EVENT AND LATCH1= 1 THEN LATCH_IN1=DATAIN1; END IF

21、;END PROCESS;PROCESS(LATCH_ADDRES) -A/D工作控制片選信號輸出進程 BEGINIF ( LATCH_ADDRES= 00011110 ) THEN AD_CS= 0; -允許A/D工作 ELSE AD_CS= 1; END IF; - 禁止A/D工作 END PROCESS;DATOUT1=LATCH_OUT1; DATOUT2=LATCH_OUT2;End ART;這是一個CPLD與AT89S51單片機接口的VHDL電路設計。AT89S51以總線方式工作,例如,由AT89S51將數(shù)據(jù)40H寫入目標器件中的第一個寄存器LATCH_OUT1的指令是:MOV A

22、,#40HMOV DPTR,#6FF5HMOVX DPTR,A當READY為高電平時,AT89S51從目標器件中的寄存器LATCH_IN1將數(shù)據(jù)讀入的指令是:MOV DPTR,#9F7EH 和MOVX A,DPTR三、單片機和三、單片機和CPLD接口應用舉例接口應用舉例圖圖8-14 單片機與單片機與CPLD的硬件連接原理圖的硬件連接原理圖1. 單片機程序設計單片機程序設計單片機部分主要完成鍵盤檢測并判斷鍵值,同時根據(jù)鍵值輸出不同的數(shù)據(jù)。#include #include #define KEY_WR 0 xff00 /定義鍵盤操作地址#define LED_WR 0 xff01 /定義數(shù)碼管操

23、作地址void wr_cpld(unsigned int ADDR,unsigned char DATA);/寫CPLD函數(shù)的聲明unsigned char rd_cpld(unsigned int ADDR);/讀CPLD函數(shù)的聲明void getkey(unsigned char keyin); /鍵值判斷子程序unsigned char led_buf;/定義全局變量void main()unsigned char key_buf,buffer;/定義局部變量key_buf=0 xff;/變量初始化led_buf=0 xff;/while(1)buffer = rd_cpld(KEY_W

24、R); /讀取鍵盤狀態(tài)if(!(key_buf=buffer) & (buffer != 0 xff)/有新鍵按下key_buf = buffer ;/保存該時刻的鍵盤狀態(tài)getkey(key_buf);/讀取鍵值并更新相關數(shù)據(jù)wr_cpld(LED_WR,led_buf);/更新數(shù)碼管顯示數(shù)據(jù)void getkey(unsigned char keyin)/讀取鍵值并更新顯示數(shù)據(jù)子程序switch(keyin) /判斷鍵盤case 0 xfe: led_buf = 0 xf9; break; /是K1鍵嗎?case 0 xfd: led_buf = 0 xa4; break; /是K

25、2鍵嗎?case 0 xfb: led_buf = 0 xb0; break; /是K3鍵嗎?case 0 xf7: led_buf = 0 x99; break; /是K4鍵嗎?case 0 xef: led_buf = 0 x92; break; /是K5鍵嗎?case 0 xdf: led_buf = 0 x82; break; /是K6鍵嗎?case 0 xbf: led_buf = 0 xf8; break; /是K7鍵嗎?case 0 x7f: led_buf = 0 x80; break; /是K8鍵嗎?default: led_buf = 0 xc0; break;/寫CPLD

26、子程序,ADDR存放地址,DATA存放數(shù)據(jù)void wr_cpld(unsigned int ADDR,unsigned char DATA) *(unsigned char xdata *)ADDR )=DATA; /讀CPLD子程序,ADDR存放地址unsigned char rd_cpld(unsigned int ADDR) return *(unsigned char xdata *)ADDR );2. CPLD的的Verilog HDL程序程序/ 文件名 key_7seg.vdefine key_addr 16hff00 /define key_addr 16hff00 /定義鍵盤

27、操作地址define led_addr 16hff01 /定義顯示數(shù)據(jù)操作地址define no_rw 2h0 /定義總線狀態(tài)標志位define key_rw 2h1 define led_rw 2h2module key_7seg(MCU_data,MCU_address,keyin,seg,sel,wr,rd,ale);input7:0 MCU_address; /定義地址總線的高8位inout7:0 MCU_data; /定義數(shù)據(jù)總線input7:0 keyin; /定義鍵盤輸入output7:0 seg; /定義數(shù)碼管的段碼output3:0 sel; /定義數(shù)碼管的位碼input wr; /定義寫信號線input rd; /定義讀信號線input ale;/定義地址鎖存允許信號reg1:0 addr_sel; /定義總線狀態(tài)寄存器reg7:0 MCU_data_reg; /定義數(shù)據(jù)總線寄存器reg7:0 key_status; /定義鍵盤狀

溫馨提示

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

評論

0/150

提交評論