陳再清
十六位單片機(jī)MCS-96X序列內(nèi)部的硬件構(gòu)造比八位單片機(jī)MCS-51系列復(fù)雜,使得外圍接口電路也變得復(fù)雜,主要體現(xiàn)在片外的總線配制方面。51系列單片機(jī)的總線片內(nèi)、片外均為八位,不存在配制問題。而MCS-96片內(nèi)是十六位結(jié)構(gòu),片外的數(shù)據(jù)總線可以配制成十六位,構(gòu)成全十六位機(jī);也可以配制成八位,構(gòu)成準(zhǔn)十六位機(jī)。當(dāng)然,后者的性能會(huì)有所下降。而片外的數(shù)據(jù)總線又可分為程序存儲(chǔ)器(ROM或EPROM)數(shù)據(jù)總線和數(shù)據(jù)存儲(chǔ)器(RAM)數(shù)據(jù)總線,它們可以單獨(dú)配制成十六位或八位,由此搭配而成的方式較多??梢?,片外數(shù)據(jù)總線的配制成了十六位單片機(jī)外圍接口中最復(fù)雜的部分。必須說明的是:這里所指的總線都是數(shù)據(jù)總線,因?yàn)椴还芷瑑?nèi)片外,地址線均為十六位。在MCS-96中,以片內(nèi)無程序存儲(chǔ)器的芯片80C196XX(如80C196KB等)價(jià)格最低廉,故應(yīng)用也最廣。
1.與系統(tǒng)總線有關(guān)的幾條控制線
系統(tǒng)總線的各種配制是依賴MCS-96的有關(guān)幾條控制線(輸入或輸出腳)與芯片配置寄存器CCR的有關(guān)設(shè)置共同來實(shí)現(xiàn)的。它們是:
(1)地址總線分離控制線 ALE / ADV 地址片的鎖存信號(hào),高電平有效的 ALE,或低電平有效的ADV。
(2)讀控制線 RD 從片外讀取指令或數(shù)據(jù)時(shí),RD低電平有效,而且總是按“字”進(jìn)行。
(3)寫控制線 WRL 和 WRH或 WR、BHE、A0向片外數(shù)據(jù)存儲(chǔ)器寫入數(shù)據(jù)時(shí),有寫高位字節(jié)、寫低位字節(jié)、同時(shí)寫高位和低位字節(jié)(一個(gè)字)三種寫入方式。根據(jù)總線配置的方式的不同,會(huì)出現(xiàn)不同的控制信號(hào)。
(4)總線寬度選擇線 BUSWIDTH 為0時(shí)選擇八位;為1時(shí)選擇十六位。但它還須與芯片配置寄存器CCR的D1位聯(lián)合進(jìn)行控制。
(5)取指信號(hào)線 INST80C196KB還輸出一根取指信號(hào)線,平時(shí)該線輸出低電平,只有在向片外取指時(shí)變?yōu)楦唠娖剑ㄔ诘刂酚行趦?nèi))。利用這一特性可以將片外的程序存儲(chǔ)空間和數(shù)據(jù)存儲(chǔ)空間分開(類似51系列的PSEN信號(hào)線),使總的存儲(chǔ)空間比原來的多出一倍。
(6)準(zhǔn)備就緒信號(hào)線READY80C196為了適應(yīng)片外慢速存儲(chǔ)器或外設(shè)的時(shí)序要求,在正常執(zhí)行的狀態(tài)周期中插入等待周期,是否等待或等待多久由CCR寄存器的D5、D4位確定。
為了使單片機(jī)能實(shí)現(xiàn)多種總線配置方案,滿足存儲(chǔ)器的接口要求和就緒控制,所有可供靈活選擇的信息都集中在芯片配置寄存器CCR中。有關(guān)該寄存器內(nèi)各位功能請見前期的“準(zhǔn)十六位單片機(jī)8098及80C198”一文中的表2。
外部數(shù)據(jù)總線的寬度不光與CCR 的D1位有關(guān),還與控制線BUSWIDTH 的狀態(tài)有關(guān),兩者的關(guān)系,如表 1所示。只有當(dāng)D1=1,BUSWIDTH=1 時(shí),數(shù)據(jù)總線寬度才為十六位。顯見,當(dāng)D1=1時(shí),由BUSWIDTH的狀態(tài)就可以單獨(dú)決定總線的寬度,這可以通過地址線譯碼或程序運(yùn)行來設(shè)定,使總線寬度隨著功能的需求而進(jìn)行動(dòng)態(tài)的改變。
2.MCS-96外部數(shù)據(jù)總線的四種控制方式
(1)標(biāo)準(zhǔn)總線方式當(dāng)CCR D2=1,CCR D3=1 時(shí),80C196提供寫信號(hào)WR、BHE 和地址鎖存信號(hào)ALE。當(dāng)總線寬度為十六位時(shí)(BUSWIDTH=1),須由WR、BHE和地址線A0通過譯碼電路獲得WR HIGH、WR LOW信號(hào),用來分別寫偶單元字節(jié)(低位字節(jié))和奇單元字節(jié)(高位字節(jié))。當(dāng)總線寬度為八位時(shí)(BUSWIDTH=0),只須用WR信號(hào)就可。地址線送出時(shí),ALE變高,其下降沿作為外部地址的鎖存信號(hào)。
(2)寫選通方式 當(dāng)CCR D1=1,且總線寬為十六位時(shí)( BUSWIDTH=1),WR、BHE 被WRL、WRH替代,分別向偶單元和奇單元寫入一個(gè)字節(jié)。當(dāng)總線寬度為八位時(shí)(BUSWIDTH=0),只使用WRL便可。地址鎖存信號(hào)仍為ALE。寫選通方式比標(biāo)準(zhǔn)方式的外部接口要簡單,不需要譯碼電路,便可直接輸出寫信號(hào)。
此外還有地址有效選通方式,地址有效寫選通方式以1、2兩種較為常用。單片機(jī)還會(huì)因片內(nèi)是否有程序存儲(chǔ)器而使外部的系統(tǒng)總線有所區(qū)別。當(dāng)內(nèi)部有程序存儲(chǔ)器時(shí)(ROM、EPROM等),其外部總線只涉及數(shù)據(jù)存儲(chǔ)器(RAM),結(jié)構(gòu)顯然要簡單。
外部程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù)總線并不要求使用相同的寬度,可以分別使用八位和十六位,這兩者又會(huì)出現(xiàn)四種搭配方式:①八位總線程序存儲(chǔ)器 + 八位總線數(shù)據(jù)存儲(chǔ)器;②十六位總線程序存儲(chǔ)器 + 八位總線數(shù)據(jù)存儲(chǔ)器;③十六位總線程序存儲(chǔ)器 + 十六位總線數(shù)據(jù)存儲(chǔ)器;④八位總線程序存儲(chǔ)器 + 十六位總線數(shù)據(jù)存儲(chǔ)器。其中第四種通常不用。限于篇幅,下面僅以③為例進(jìn)行說明。
十六位總線程序存儲(chǔ)器 + 十六位總線數(shù)據(jù)存儲(chǔ)器 其電原理圖見圖1,這是一種全十六位機(jī),我們采用了最常見的80C196KB。它的封裝采用68腳的PLCC結(jié)構(gòu)。本電路的總線方式為寫選通方式,芯片配制寄存器CCR的內(nèi)容為:11111011B(FBH),其意是:無保密,不等待,地址信號(hào)線ALE,寫選通信號(hào)WRL和WRH,數(shù)據(jù)總線寬度十六位,BUSWIDTH=1。
采用寫選通方式,寫信號(hào)線由標(biāo)準(zhǔn)方式的WR、BHE 自動(dòng)轉(zhuǎn)換為WRL、WRH,并直接對存儲(chǔ)器進(jìn)行寫控制。它的取指及數(shù)據(jù)的讀、寫都是十六位的字操作(寫數(shù)據(jù)時(shí)還可以單獨(dú)由WRL或WRH分別對IC6或IC7進(jìn)行字節(jié)操作)。故運(yùn)行速度是最快的。
在器件的選用上,由于很難找到十六位的地址鎖存器,這里用兩片八位的地址鎖存器IC2、IC3串級使用,分別用于低八位、高八位的地址鎖存,這是一種價(jià)廉物美的方式,使用上也方便。同樣的原因,十六位的程序存儲(chǔ)器也采用了這種方式,用兩片八位的EPROM芯片IC4、IC5串級使用,分別用于低八位(偶單元)的程序存儲(chǔ)和高八位(奇單元)的程序存儲(chǔ)。由于程序存儲(chǔ)空間為16K×16位,存儲(chǔ)芯片只能用兩片27128。地址區(qū)間為0000~7FFFH。
對于數(shù)據(jù)存儲(chǔ)器,也是用兩片八位的RAM芯片IC6、IC7串級使用,IC6、IC7應(yīng)用62128型號(hào),該型號(hào)難找,此處用62256代替,將該片的地址腳A14接地即可。地址區(qū)間為8000~FFFFH。
必須說明的是:經(jīng)IC2、IC3鎖存器輸出的地址線A0~A15中,A0必須空出,而將A1~A14依次接到IC4、IC5的地址腳A0~A13上。原因是取指時(shí)每次讀一個(gè)字(IC4、IC5各讀一個(gè)字節(jié),且兩片的地址相同),給出的地址必須能包含IC4低位字節(jié)(偶單元)和IC5高位字節(jié)(奇單元)。采用上述接法可以選中一個(gè)字中對應(yīng)的低位字節(jié)和高位字節(jié),并通過AD0~AD7和AD8~AD15讀入到單片機(jī)內(nèi)。
對于數(shù)據(jù)存儲(chǔ)器,地址線A0也空出不用,A1~A14依次分別接到數(shù)據(jù)存儲(chǔ)器IC6、IC7的A0~A13腳。不過,寫數(shù)據(jù)存儲(chǔ)器時(shí),有三種寫法:①可以寫一個(gè)字(WRL、WRH同時(shí)變低),寫低八位字節(jié)(WRL變低),寫高八位字節(jié)(WRH變低)。
它的地址譯碼由地址線A15控制,為低時(shí)選通程序存儲(chǔ)器IC4、IC5;為高時(shí)通過反相器D選通數(shù)據(jù)存儲(chǔ)器IC6、IC7。圖2給出了相應(yīng)的時(shí)序圖。
因IC4、IC5分別為偶單元和奇單元的存儲(chǔ)芯片,應(yīng)將目標(biāo)代碼文件依序分成0、2、4、6……2N(偶單元文件)和1、3、5、7……2N+1(奇單元文件)兩個(gè)文件,并分別固化到IC4、IC5中。
CCR芯片配置寄存器參數(shù)寫入法 CCR是一個(gè)特殊的專用寄存器,無法通過對內(nèi)部RAM的訪問來改變CCR的內(nèi)容,而該寄存器的內(nèi)容對總線的設(shè)置又至關(guān)重要。80C196KB復(fù)位后不是從0000H開始運(yùn)行,而是從2080H開始運(yùn)行,而程序固化的起始地址卻是從2000H開始。在2000~2079H單元中,除少數(shù)被定義外,大部分被保留下來用于未來的產(chǎn)品開發(fā)。其中有一個(gè)特殊的單元2018H稱之為芯片配置字節(jié)(CCB),這個(gè)單元屬于程序存儲(chǔ)區(qū)的范圍,應(yīng)事先對其內(nèi)容進(jìn)行設(shè)置編程。當(dāng)系統(tǒng)復(fù)位且只有復(fù)位時(shí),CCB的內(nèi)容才被自動(dòng)裝載到芯片配置寄存器CCR中,由此可見,CCR的內(nèi)容是通過CCB的間接方式寫入的。
2018H(CCB)單元的編程方法雖有幾種,但最方便的莫過于使用編輯器來進(jìn)行。因?yàn)榫庉嬈饕话愣加蠧CB的設(shè)置界面,操作者只須依總線的需要進(jìn)行設(shè)置,再將它與已編制好的源程序一起進(jìn)行匯編,獲得目標(biāo)程序,再進(jìn)行固化就可以了。而編輯器的種類很多,功能也不盡相同,工作的平臺(tái)也不相同,但我們總可以在集成調(diào)試軟件界面的主菜單—子菜單中,找到一個(gè)有關(guān)的設(shè)置界面,其中有五項(xiàng)是對CCB參數(shù)的設(shè)置。從1~5依次是總線寬度設(shè)置、寫控制線設(shè)置、地址選通設(shè)置、等待周期設(shè)置、保密設(shè)置。它們依次對應(yīng)于CCR中的D1、D2、D3、D4、D5、D6D7。下述的具體設(shè)置對應(yīng)于圖1總線的寫選通方式。
設(shè)置完畢后,再將欲匯編的源程序調(diào)入窗口進(jìn)行匯編,通過后,則剛才設(shè)置的內(nèi)容已寫入到2018H中。我們可以通過反匯編窗口進(jìn)行查看,將程序區(qū)向前移至2018H單元,可以看到其內(nèi)容是11111011(FBH)。
奇、偶單元固化文件的獲取 當(dāng)程序存儲(chǔ)器采用十六位數(shù)據(jù)總線時(shí),如前面所述,必須將原來的固化文件一分為二,構(gòu)成對應(yīng)的偶(低八位)固化文件和奇(高八位)固化文件,并分別固化到偶(低八位)程序存儲(chǔ)器IC4和奇(高八位)程序存儲(chǔ)器IC5中。注意:這里所說的固化文件是指能用于程序存儲(chǔ)器固化的可執(zhí)行的二進(jìn)制文件,而不是其它的文本文件。這類文件的后綴是 . ROM或 . BIN。 后綴為 .OBJ文件屬格式機(jī)器碼,這里不能使用。
采用編輯器可以很方便地獲得固化文件,但要將固化文件(暫取名為:FILE.ROM)一分為二獲得對應(yīng)的偶文件(暫取名為:FILE(0).ROM)和奇文件(暫取名為:FILE(1).ROM),幾乎所有的編輯器都無能為力。這需要我們自己動(dòng)手編制軟件才能完成。
首先,我們應(yīng)先由FILE.ASM文件獲取二進(jìn)制固化文件FILE.ROM。獲取該文件有多種方法,也可以采用編輯器。我們將文件的名稱定為:FILE.ROM,記住文件的長度(字節(jié)數(shù)),將該文件放在某個(gè)子目錄下(如C:A96FILE.ROM)。
下面,我們用C語言和BASIC語言各編制出一個(gè)程序(程序見本刊網(wǎng)站),用于將固化文件一分為二獲得對應(yīng)的奇、偶文件,這兩個(gè)程序的效果是相同的,讀者可以根據(jù)自己熟悉的語言選用一種。以C語言程序?yàn)槔f明其使用方法,將上面的二進(jìn)制文件FILE.ROM的長度填入程序的第8行(a=XX)*[1],再將文件名及路徑填入第10、16、17、18、25、32行*[2]。然后運(yùn)行該程序。運(yùn)行通過后,退出菜單界面,便可顯示原二進(jìn)制固化文件FILE.ROM及偶文件FILE(0).ROM和奇文件FILE(1).ROM的內(nèi)容(以十六進(jìn)制方式顯示,便于查看)。讀者可將三個(gè)文件進(jìn)行核對,正確與否一看便知。在子目錄A96下即可獲得對應(yīng)的奇、偶文件。圖3給出了C語言程序的簡易流程圖,BASIC語言程序的流程圖與圖3大同小異,只是某些過程順序有些改動(dòng),該程序填入文件長度(第2行*[1])和文件名及路徑(第3、4、5行*[2]),運(yùn)行后將直接顯示上述三個(gè)文件的十六進(jìn)制值。將偶文件和奇文件分別固化到IC4 和 IC5中,并分別插入各自的插座,不可插錯(cuò)。
運(yùn)行C語言程序時(shí),有時(shí)需要連續(xù)運(yùn)行兩次方能獲得對應(yīng)的奇偶文件,而BASIC程序可以一次到位。