|
單片機(jī)系統(tǒng)擴(kuò)展是指單片機(jī)內(nèi)部各功能部件不能滿(mǎn)足應(yīng)用系統(tǒng)要求時(shí),在片外連接相應(yīng)的外圍芯片以滿(mǎn)足應(yīng)用系統(tǒng)的要求. 對(duì)單片機(jī)系統(tǒng)擴(kuò)展的方法有并行擴(kuò)展和串行擴(kuò)展兩種.
串行口的擴(kuò)展方法
常用的標(biāo)準(zhǔn)51單片機(jī)內(nèi)部?jī)H含有一個(gè)可編程的全雙工串行通信接口,具有UART的全部功能。該接口電路不僅能同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收,也可作為一個(gè)同步移位寄存器使用。當(dāng)以此類(lèi)型單片機(jī)構(gòu)成分布式多級(jí)應(yīng)用系統(tǒng)時(shí),器件本身的串口資源就不夠用了。筆者在實(shí)際開(kāi)發(fā)中,查閱了有關(guān)資料,總結(jié)出如下兩種常用而有效的串行通道擴(kuò)展方法。 2.1 基于SP2538的擴(kuò)展方法 SP2538是專(zhuān)用低功耗串行口擴(kuò)展芯片,該芯片主要是為解決當(dāng)前基于UART串口通信的外圍智能模塊及器件較多,而單片機(jī)或DSP原有的UART串口又過(guò)少的問(wèn)題而推出的。利用該器件可將現(xiàn)有單片機(jī)或DSP的單串口擴(kuò)展至5個(gè)全雙工串口。使用方法簡(jiǎn)單、高效。 在應(yīng)用SP2538擴(kuò)展串行通道時(shí),母串口波特率K1=2880*Fosc_in,單位是MHz,且Fosc_in小于20.0MHz, 在SP2538輸入時(shí)鐘Fosc_in =20.0MHz時(shí)母串口可自適應(yīng)上位機(jī)的56000bps和57600bps兩種標(biāo)準(zhǔn)波特率輸入。子串口波特率K2=480*Fosc_in。 母串口和所有子串口都是TTL電平接口,可直接匹配其他單片機(jī)或TTL數(shù)字電路,如需連接PC機(jī)則必須增加電平轉(zhuǎn)換芯片如MAX202 、MAX232 等。SP2538具有內(nèi)置的上電復(fù)位電路和可關(guān)閉的看門(mén)狗監(jiān)控電路。上位機(jī)寫(xiě)命令字0x10可實(shí)現(xiàn)喂狗,寫(xiě)命令字0x15關(guān)閉看門(mén)狗,初次上電后看門(mén)狗處于激活狀態(tài)或?qū)懨钭?x20激活看門(mén)狗監(jiān)控功能。上位機(jī)可通過(guò)芯片復(fù)位指令0x35在任何時(shí)候讓芯片進(jìn)行指令復(fù)位,也可通過(guò)芯片睡眠指令0x55在任何時(shí)候讓芯片進(jìn)入微功耗睡眠模式以降低系統(tǒng)功耗。初次上電后芯片不會(huì)自行進(jìn)入睡眠模式,但只能由上位機(jī)通過(guò)母串口任意發(fā)送一個(gè)字節(jié)數(shù)據(jù)將其喚醒,其他子串口不具備這一功能。
圖(1)是AT89C52單片機(jī)與SP2538的電路連接,圖中,AT89C52的全雙工串口與SP2538的母串口5相連,該串口同時(shí)也作為命令/數(shù)據(jù)口。SP2538的ADRI0、ADRI1、ADRI2分別與AT89C52的P2.3、P2.4、P2.5口相連,可用于選擇發(fā)送數(shù)據(jù)是選擇相應(yīng)的串口0~4;ADRO0、ADRO1、ADRO2與P2.0、P2.1、P2.2相連,用于判斷接收的數(shù)據(jù)來(lái)自哪一個(gè)串口。 SP2538的時(shí)鐘頻率選為20.0MHZ,此時(shí)母串口5的波特率為57600bps,串口0~4的波特率為9600bps。 下面是與上述硬件電路相關(guān)的接口程序,該程序用A51匯編語(yǔ)言編制,程序僅說(shuō)明了中斷方式下對(duì)子串口0(TX0、RX0)的操作,其它子串口類(lèi)似。 TBLOCK DATA 20H RBLOCK DATA 30H LENGTH DATA 14H … TXR_REV_SEND: CLR ES JBC RI,RECEIVE CLR TI MOV A,@R0 CLR P2.0 ; 寫(xiě)數(shù)據(jù)到"SBUF"前必須先置欲發(fā)送子串口的地址 CLR P2.1 CLR P2.2 MOV SBUF,A DJNZ R2,NEXT SJMP $ NEXT: INC R0 RETI RECEIVE: MOV A,P2 AND A,#31H ;判斷是否為子串口0 JNZ ELSE MOV A,SBUF MOV @R1,A INC R1 RETI
圖(1) AT89C52與SP2538的電路連接
 2.2 基于Intel8251的串行口擴(kuò)展方法 上面基于SP2538的串口擴(kuò)展方法可以說(shuō)是一種串行的擴(kuò)展方法,這里基于Intel8251的擴(kuò)展方法則是一種并行的方法。Intel8251是一種通用的同步/異步發(fā)送器(USART),它的工作方式可以通過(guò)編程設(shè)置。能夠以同步或異步串行通信方式工作,能自動(dòng)完成幀格式。 Intel8251具有獨(dú)立的接收/發(fā)送器。在異步方式下,用于產(chǎn)生8251內(nèi)部時(shí)序的時(shí)鐘CLK輸入至少應(yīng)為發(fā)送或接收時(shí)鐘的4.5倍。接收/發(fā)送(RXC/TXC)時(shí)鐘應(yīng)為波特率的1倍、16倍或64倍(由8251的工作方式字設(shè)定)。 圖(2)是用Intel8251擴(kuò)展一個(gè)串行通道的電路原理,圖中,11.0592MHZ晶振經(jīng)ALE6分頻后于 、組合,產(chǎn)生1.8432MHZ的時(shí)鐘頻率,分別作為8251與8253的時(shí)鐘輸入,若設(shè)定8251通信波特率為9600bps,波特率因子為16,則需要 153.6KHZ的接收/發(fā)送時(shí)鐘頻率,該頻率可由8253的OUT0產(chǎn)生。 下面的A51程序段說(shuō)明了如何設(shè)置8253使其產(chǎn)生153.6KHZ的方波,以及如何用8251收/發(fā)數(shù)據(jù): ;設(shè)置8253的程序段: MOV A,#36H ; 計(jì)數(shù)器0輸出方波控制字 MOV DPTR,#0FFFFH ; 指向控制字寄存器 MOVX @DPTR,A MOV DPTR,#0FFFCH ; 指向0計(jì)數(shù)器地址 MOV A,#0DH MOVX @DPTR,A MOV A,#0 MOVX DPTR,A SETB P1.0 ;操作8251的程序段: … START: MOV DPTR,#7FFFH ;8251控制、命令口地址 MOV A,#5EH ;一個(gè)停止位,奇校驗(yàn),8位數(shù)據(jù),異步*16 MOVX @DPTR,A ;寫(xiě)入方式字 MOV A,#15H MOVX @DPTR,A ;命令字,啟動(dòng)發(fā)送和接收器 … LOOP: SJMP LOOP ;等待8251中斷 8251_INT: ;現(xiàn)場(chǎng)保護(hù) MOV DPTR,#7FFFH MOV A,@DPTR JB ACC.0,TX_INT JB ACC.1,RX_INT INT_EXIT: ;恢復(fù)現(xiàn)場(chǎng) RETI ;發(fā)送數(shù)據(jù) TX_INT: MOV DPTR,#7FFEH ;8251數(shù)據(jù)口地址 MOV A,20H MOVX @DPTR,A … AJMP INT_EXIT ;接收數(shù)據(jù) RX_INT: MOV DPTR,#7FFEH MOVX A,@DPTR MOV 30H,A … AJMP INI_EXIT
圖(2)用8251擴(kuò)展串行通道的硬件電路原理
并行擴(kuò)展是指利用單片機(jī)三組總線(xiàn)(AB,DB,CB)進(jìn)行的系統(tǒng)擴(kuò)展. 串行擴(kuò)展是指利用SPI(Serial Peripheral Interface)三線(xiàn)總線(xiàn)和I2C雙總線(xiàn)的串行系統(tǒng)擴(kuò)展. 1,外部并行擴(kuò)展 單片機(jī)是通過(guò)芯片的引腳進(jìn)行系統(tǒng)擴(kuò)展的.為了滿(mǎn)足系統(tǒng)擴(kuò)展的要求,MCS-51系列單片機(jī)芯片引腳可以構(gòu)成可以構(gòu)成下圖所示的三總線(xiàn)結(jié)構(gòu),單片機(jī)所有的外部芯片都是通過(guò)這三組總線(xiàn)進(jìn)行擴(kuò)展. 2,外部串行擴(kuò)展 串行擴(kuò)展包括SPI三線(xiàn)總線(xiàn)和I2C雙總線(xiàn)兩種.在單片機(jī)內(nèi)不具有串行總線(xiàn)時(shí),可利用兩根或三根I/O口線(xiàn)用軟件來(lái)虛擬串行總線(xiàn)的功能.下圖所示: P2 ALE P0 WR RD PSEN EA RESET MCS-51 地址鎖存器 A8-A15 A0-A7 地址總線(xiàn) D0-D7 數(shù)據(jù)總線(xiàn) 控制總線(xiàn) MCS-51單片機(jī)的三總線(xiàn)結(jié)構(gòu) 4.1單片機(jī)三總線(xiàn)的形成(外部并行擴(kuò)展) 有I2C接口的主機(jī) 有I2C接口的RAM或I/O芯片 有I2C接口 的從機(jī) SCL SDL Vcc Rf Rf I2C總線(xiàn) I2C 總線(xiàn)系統(tǒng)示意圖 AB,DB,CB 各自的作用 (AB,DB,CB)三組總線(xiàn)稱(chēng)為系統(tǒng)總線(xiàn). 系統(tǒng)總線(xiàn)的含義是指計(jì)算機(jī)各芯片之間的公共連線(xiàn).總線(xiàn)的根數(shù)(位數(shù))稱(chēng)為總線(xiàn)寬度. 地址總線(xiàn):單片機(jī)外部有存儲(chǔ)器或接口芯片,其中都有存儲(chǔ)單元或寄存器單元,這些單元地位平等,需要被分配地址編號(hào)才能予以區(qū)分,分配地址當(dāng)然也是以電信號(hào)形式給出,由于存儲(chǔ)器的容量很大,所以用于分配地址的線(xiàn)也較多,這些線(xiàn)被稱(chēng)為地址線(xiàn)總線(xiàn).51單片機(jī)的地址總線(xiàn)AB(address bus)為16位,可尋址216 (64K)存儲(chǔ)空間 數(shù)據(jù)總線(xiàn):起著在CPU和存儲(chǔ)器或外圍接口電路之間傳遞數(shù)據(jù)的作用.我們常說(shuō)的8位機(jī),16位機(jī),32位機(jī),是說(shuō)CPU的外數(shù)據(jù)總線(xiàn)(DB )(data bus) )寬度(位數(shù)). 控制總線(xiàn):通常包括時(shí)序信號(hào)(時(shí)鐘,定時(shí),應(yīng)答),數(shù)據(jù)傳送控制(如存儲(chǔ)器的讀寫(xiě),IO設(shè)備的讀寫(xiě))信號(hào),中斷的請(qǐng)求和響應(yīng),總線(xiàn)請(qǐng)求,復(fù)位等信號(hào),控制總線(xiàn)CB(control bus)隨CPU的不同而各具特色. 單片機(jī)的擴(kuò)展 MCS-51單片機(jī)本身是一個(gè)基本的微型計(jì)算機(jī),內(nèi)部已經(jīng) 具有一定數(shù)量的存儲(chǔ)單元和I/O接口,但在內(nèi)部的資源不能夠滿(mǎn)足系統(tǒng)的需要時(shí),就需要進(jìn)行資源的擴(kuò)展,單片機(jī)的擴(kuò)展主要包括以下 兩方面的內(nèi)容: 存儲(chǔ)器的擴(kuò)展 I/O接口的擴(kuò)展 注: MCS-51系列的單片機(jī)在進(jìn)行擴(kuò)展時(shí),需要把P0口和P2口作為擴(kuò)展總線(xiàn)使用,不能夠再作為一般的I/O口使用. 存儲(chǔ)器的擴(kuò)展 在單片機(jī)系統(tǒng)中,存儲(chǔ)器的擴(kuò)展包括: 程序存儲(chǔ)器擴(kuò)展 隨著半導(dǎo)體技術(shù)的發(fā)展,單片機(jī)內(nèi)部的程序存儲(chǔ)器數(shù)量越來(lái)越大,在一般的單片機(jī)系統(tǒng)中,對(duì)于程序存儲(chǔ)器的擴(kuò)展已經(jīng)使用的比較少.但對(duì)于一些比較早的片內(nèi)沒(méi)有程序存儲(chǔ)器的單片機(jī)(8031,8032),在使用時(shí)還需要進(jìn)行存儲(chǔ)器的擴(kuò)展. 但建議用戶(hù)盡量避免外擴(kuò)ROM,51系列單片機(jī)1000多種型號(hào),一定可以找到內(nèi)部ROM容量符合要求的單片機(jī).即便是單片機(jī)略微貴點(diǎn)也值得. 數(shù)據(jù)存儲(chǔ)器擴(kuò)展 在MCS-51系列單片機(jī)構(gòu)成的系統(tǒng)中,內(nèi)部RAM的數(shù)量比較有限(128B或256B),在面對(duì)大容量的數(shù)據(jù)處理時(shí),就需要進(jìn)行RAM的擴(kuò)展. 程序存儲(chǔ)器擴(kuò)展 常用的外部程序存儲(chǔ)器: EPROM(紫外線(xiàn)可擦除) 常用的EPROM以27xx系列為主. EEPROM(電可擦除) 目前的EEPROM分為:串行EEPROM和并行EEPROM,在使用時(shí),常常把串行的EEPROM作為數(shù)據(jù)存儲(chǔ)器使用.以28xx系列為主. FlashROM(快閃電可擦除) 主要以29Cxx系列為主. 常用的EPROM芯片引腳封裝示意圖 常用的EPROM芯片引腳封裝示意圖 不同容量的EPROM只是在地址線(xiàn)的數(shù)目和編程信號(hào)引腳有一點(diǎn)區(qū)別,各重要的引腳含義如下: A0-Ai:地址輸入線(xiàn),決定存儲(chǔ)器的容量; Q0-Q7:雙向三態(tài)數(shù)據(jù)線(xiàn); E:片選信號(hào)輸入線(xiàn); G:讀選通輸入信號(hào)線(xiàn); P:編程脈沖輸入線(xiàn); VPP:編程電源輸入線(xiàn); VCC:工作電源輸入線(xiàn)(常為+5V); GND/VSS:工作時(shí)接地線(xiàn). 2817A 2864A 常用的EEPROM芯片引腳封裝示意圖 不同容量的EEPROM只是在地址線(xiàn)的數(shù)目和編程信號(hào)引腳有一點(diǎn)區(qū)別,各重要的引腳含義如下: A0-Ai:地址輸入線(xiàn),決定存儲(chǔ)器的容量; I/O0- I/O7(D0-D7):雙向三態(tài)數(shù)據(jù)線(xiàn); CE:片選信號(hào)輸入線(xiàn); OE:讀選通輸入信號(hào)線(xiàn); WE:讀選通信號(hào)輸入線(xiàn); VCC:工作電源輸入線(xiàn)(常為+5V); GND:工作時(shí)接地線(xiàn). 29c256 29c512 常用的FlashROM芯片引腳封裝示意圖 2.程序存儲(chǔ)器擴(kuò)展實(shí)例 MCS-51單片機(jī)與27256芯片的接口. 利用EPROM擴(kuò)展一個(gè)存儲(chǔ)容量為32KB的程序存儲(chǔ)器 MCS-51單片機(jī)與2864芯片的接口. 由于2864不僅可以存放程序也可以在線(xiàn)寫(xiě)入數(shù)據(jù),可通過(guò)一定的方式來(lái)擴(kuò)展一個(gè)程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器一體的存儲(chǔ)空間,其容量為8KB. MCS-51單片機(jī)與27256芯片的接口 27256的基本地址范圍:0000H—7FFFH P0連接: 74LS373的1D-8D 27256的DQ1-DQ8 PSEN接OE CE接地 P2連接 27256的A8-A14 MCS-51單片機(jī)與2864芯片的接口 2864的基本地址范圍:0000H—1FFFH P0連接: 74LS373的1D-8D 27256的DQ1-DQ8 P2連接 27256的A8-A12 PSEN和RD相與接OE,WR接WE,CE接P2.7 讀外部程序存儲(chǔ)器時(shí)序 ALE PSEN 注意:上述時(shí)序是在取指令過(guò)程中自動(dòng)產(chǎn)生 一個(gè)機(jī)器周期 送地址 取出指令 程序存儲(chǔ)器擴(kuò)展實(shí)例思考: MCS-51單片機(jī)與27256芯片的接口中,為什么片選信號(hào)可以直接接地 它的地址范圍還可以是多少 MCS-51單片機(jī)與2864芯片的接口中,EEPROM可以在線(xiàn)寫(xiě)入數(shù)據(jù),它能否像寫(xiě)RAM一樣寫(xiě)入 它的地址范圍還可以是多少 數(shù)據(jù)存儲(chǔ)器擴(kuò)展 常用的數(shù)據(jù)存儲(chǔ)器: 靜態(tài)RAM 靜態(tài)RAM在應(yīng)用時(shí)存取速度快,使用方便并且價(jià)格比較的低廉.但它具有在掉電時(shí),內(nèi)部的數(shù)據(jù)會(huì)丟失.典型的有6116,6264,62256等芯片.為了避免掉電數(shù)據(jù)丟失,出現(xiàn)了自動(dòng)保護(hù)的靜態(tài)RAM,如:DS1225,DS1235. 串行EEPROM 串行EEPROM的與并行的EEPROM特性一樣,只是在數(shù)據(jù)的讀寫(xiě)使用串行方式.常用的有24Cxx系列(I2C接口)和X25系列(SPI接口)的串行EEPROM. 一,靜態(tài)RAM 不同容量的靜態(tài)RAM只是在地址線(xiàn)的數(shù)目和編程信號(hào)引腳有一點(diǎn)區(qū)別,各重要的引腳含義如下: A0-Ai:地址輸入線(xiàn),決定存儲(chǔ)器的容量; I/O0-I/O7:雙向三態(tài)數(shù)據(jù)線(xiàn); CE:片選信號(hào)輸入線(xiàn); OE:讀選通輸入信號(hào)線(xiàn); WE:寫(xiě)選通輸入信號(hào); VPP:編程電源輸入線(xiàn); VCC:工作電源輸入線(xiàn)(常為+5V); GND:工作時(shí)接地線(xiàn). 6264 62256 常用的靜態(tài)RAM芯片引腳封裝示意圖 二,串行ROM 不同容量的串行ROM存儲(chǔ)容量上有區(qū)別,各重要的引腳含義如下: A0,A1,A2:芯片的地址輸入線(xiàn); SDA:串行數(shù)據(jù)輸入端; SCL:串行時(shí)鐘輸入端; RESET:復(fù)位信號(hào)輸入; WP:寫(xiě)保護(hù)輸入端,為低電平時(shí)不允許寫(xiě)數(shù)據(jù); SCK:串行時(shí)鐘輸入端; SI:串行數(shù)據(jù)輸入端; VCC:工作電源輸入線(xiàn)(常為+5V); GND:工作時(shí)接地線(xiàn). AT24CXX和X25043的芯片引腳封裝示 意圖封裝 AT24Cxx X25043 三,利用6116擴(kuò)展一個(gè)2KB的 數(shù)據(jù)存儲(chǔ)器 在利用6116對(duì)MCS-51系列的單片機(jī)進(jìn)行存儲(chǔ)器擴(kuò)展時(shí),基本的連接為: OE與RD控制相連; WE與WR控制相連; CE與P2.7相連; A0-A7與鎖存器74LS373的Q0-Q7相連; A8-A10分別與P2.0-P2.2相連; 6116的基本地址范圍:0000H—07FFH. MCS-51單片機(jī)與6116芯片的接口 6116的基本地址范圍:0000H—07FFH P0連接: 74LS373的1D-8D 6116的DQ1-DQ8 OE接RD WR接WD P2連接片選和 6116的A8-A10 四,利用DS1235擴(kuò)展一個(gè)32KB的數(shù)據(jù)存儲(chǔ)器 在利用DS1235對(duì)MCS-51系列的單片機(jī)進(jìn)行擴(kuò)展時(shí),基本的連接為: OE與RD控制相連; WE與WR控制相連; CE與P2.7相連; A0-A7與鎖存器74LS373的Q0-Q7相連; A8-A14分別與P2.0-P2.6相連; DS1235的基本地址范圍:0000H—7FFFH. MCS-51單片機(jī)與DS1235芯片的接口 DS1235的基本地址范圍:0000H—7FFFH P0連接: 74LS373的1D-8D DS1235的DQ1-DQ8 OE接RD WR接WD P2連接片選和 DS1235的A8-A14 DS1235數(shù)據(jù)存儲(chǔ)單元的操作方法 例1:從DS1235的地址單元2000H讀取數(shù)據(jù)到累加器ACC中. 例2:從累加器ACC向DS1235的地址為2000H的單元寫(xiě)入數(shù)據(jù). 讀取數(shù)據(jù)方法1 READB: MOV DPTR,#2000H MOVX A,@DPTR 讀取數(shù)據(jù)方法2 READB: MOV P2,#20H MOV R0,#00H MOVX A,@R0 寫(xiě)入方法1 WRITE: MOV DPTR,#2000H MOVX @DPTR,A 寫(xiě)入方法2 WRITE: MOV P2,#20H MOV R0,#00H MOVX @R0,A P2口的地址由單片機(jī)自動(dòng)產(chǎn)生 P2口的地址由P2口以I/O方式產(chǎn)生 P2口的地址由單片機(jī)自動(dòng)產(chǎn)生 P2口的地址由P2口以I/O方式產(chǎn)生 讀/寫(xiě)外部數(shù)據(jù)存儲(chǔ)器時(shí)序 PSEN 一個(gè)機(jī)器周期 ALE 一個(gè)機(jī)器周期 RD/WR 訪(fǎng)問(wèn)ROM,取出MOVX指令 訪(fǎng)問(wèn)RAM讀/寫(xiě)數(shù)據(jù) 送地址 |