版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
TMS320LF2407DSP實驗指導(dǎo)書鄭群英鄭群英編著重慶大學(xué)――美國德州儀器公司數(shù)字信號處理解決方案實驗室20038實驗一 TMS320LF2407DSP實驗開發(fā)系統(tǒng)及CC軟件應(yīng)用一.實驗說明DSP微控制器TMS320LF24x芯片作為設(shè)計對象,以TMS320LF2407芯片構(gòu)成的實驗開發(fā)系統(tǒng)作為目標(biāo)系統(tǒng);用XDS510硬件仿真器通過JTAG接口與開發(fā)調(diào)試主機(jī)聯(lián)接,來建立程序的聯(lián)機(jī)調(diào)試環(huán)境。Windows版的CodeComposer(簡稱CC)是一個功能強(qiáng)大的高級語言交互式調(diào)試器,CC的功能非常子,說明如何使用CC’C2000來開發(fā)簡單的匯編程序、編譯并使用仿真器運行這一程序。同學(xué)們也可以根據(jù)自己的應(yīng)用問題,嘗試創(chuàng)建新的項目、新的工作組和新的源文件。二.實驗?zāi)康恼J(rèn)識TMS320LF2407DSP實驗開發(fā)系統(tǒng)的硬件結(jié)構(gòu)。了解TMS320LF2407DSP應(yīng)用程序的開發(fā)調(diào)試流程。學(xué)習(xí)使用CC’C2000調(diào)試TMS320LF2407DSP程序。三.實驗內(nèi)容預(yù)習(xí)附錄四、五中的相關(guān)內(nèi)容CC’C2000使用操作練習(xí)四.實驗操作練習(xí)下面將引導(dǎo)同學(xué)們利用CC’C2000幫助同學(xué)們盡快地熟悉集成開發(fā)環(huán)境CC’C2000典型的使用方法。實驗設(shè)備鏈接在聯(lián)機(jī)調(diào)試時,需要將調(diào)試主機(jī)PC、XDP硬件仿真器及待調(diào)試的目標(biāo)系統(tǒng)按如下方法進(jìn)行鏈接:JTAGJ2?用并口電纜將PC主機(jī)并行口與仿真器相連;?將穩(wěn)壓電源的輸出調(diào)為+5V分別引入P101、23、4中;?將+5VDC/1.5A電源原邊接220V交流電壓,副邊鏈接仿真器外接電源插孔(針對XDSPP仿真器。集成調(diào)試軟件安裝(已安裝好,不需要重做)Windows2000操作系統(tǒng)之下,安裝CC4.10版本的CC的全過程參見附錄五。仿真器軟件Driver安裝(參見附錄四)仿真器運行環(huán)境設(shè)置CCDSP的程序調(diào)試。具體操作方法參見附錄四。CC2000的簡單應(yīng)CC’C2000是CC的核心部分,用于創(chuàng)建和管理項目,為開發(fā)人員提供自動化程序高、操作簡便的符號化調(diào)試工作平臺。在CC’C2000中的用戶文件是組織成項目的。因此,使用CC’C2000的第一件事是創(chuàng)建新的項目,以說明用戶準(zhǔn)備運行軟件的目標(biāo)系統(tǒng)CPU,并創(chuàng)建項目所包含的文件列表。創(chuàng)建簡單的項目(在本實驗指導(dǎo)書中,若不聲明,點擊或雙擊均指鼠標(biāo)左鍵)利用CCC2000Projec碼文件和必要的庫文件加入進(jìn)項目中。具體步驟如下:C:\tic2xx\myprojects\wor?把“C:\tic2xx\c2000\tutorial\realtime”的文件復(fù)制到新建立的文件夾中。?在WindowsCC200C1.1所示的CC’C2000操作界面。圖1.1 CC’C2000操作界面?在圖1.1ProjecNe(項目>新建)時,出現(xiàn)一個如圖1.2SaveNewProjectA(另存為項目)對話框,選擇要保存項目文件的文件夾(即前面創(chuàng)建的工作目錄wor本試驗教程中取用“sy1”作為我們新創(chuàng)建的項目文件名輸入并保存。這時CC’C2000會自動創(chuàng)建一個名為“sy1.mak”的項目文件。圖1.2 新項目保存對話框新建、編輯一個簡單的源文件1.1所示的界面中,選擇菜單命令“File>New>SourceFile”(文件>新建>源文件)時,工作區(qū)內(nèi)會出現(xiàn)一個如圖1.3所示的文本編輯窗口,作為創(chuàng)建源文件的編輯窗口,Untitled圖1.3 文本編輯窗口1.3中,若欲為即將輸入的源文件預(yù)先命名,那就選用菜單命令“File>SaveAs”(文件>另存為,隨即會出現(xiàn)一個如圖1.4所示的文件“保存為”對話框。圖1.4 保存為對話框在圖1.4sy件存放目錄確保一致。然后點擊“保存”按鈕,對話框消失,文本編輯窗口的標(biāo)題欄中換成sy(參見圖1.5所示的標(biāo)題欄).as”保存。然后在文本編輯窗口輸入下面一段程序,作為我們編輯、匯編和調(diào)試的實例程序。CC’C2000編輯器不支持漢字編輯工作,分號后面的注釋部分可以用英語或者漢語拼音,也可以使用其他的編輯軟件。由于匯編語言源文件[.asm]屬于ASII碼的純文本文件格式的文件,當(dāng)然也可以選用Windwos附件中的記事本或?qū)懽职宓绕渌梢跃庉嫾兾谋疚募能浖?asCC2000調(diào)用。CCC2000件整塊剪貼技術(shù);彩色辨識正文等。它的鍵盤命令配合常規(guī)的鼠標(biāo)操作可實現(xiàn)C語言和匯編語言源文件的編輯。1.18。當(dāng)然,在掌握了本程序后,完全可以充分發(fā)揮想象,改變一下程序內(nèi)容和燈的接法(比如用光耦驅(qū)動繼電器來控制霓虹燈,做出各種變化非凡的大型燈光廣告牌。程序清單:.include"vector.h".include"F2407REGS.H".def_c_int0,LEDLED.set0200h.bssDEYH,1.textSYSINIT:;系統(tǒng)初始化子程序SETCINTM;關(guān)閉總中斷CLRCSXMCLRCOVMCLRCCNF;B0isconfiguredasdataspaceLDP#SCSR1>>7;SCSR1所在的頁SPLK#81FEH,SCSR1;CLKIN=6M,CLKOUT=24MSPLK#0E8H,WDCR;DisableWDTLDP#IMR>>7SPLK#0h,IMR;disableallinterruptSPLK#0FFFFh,IFR;clearalltheinterruptflagsoffirstlevelLDP#MCRC>>7LACLMCRCAND#0FBFFh;IOPF2口為通用的IO口SACLMCRCLACLPFDATDIROR#0400h;使PF2口為輸出口AND#0FFFBHSACLPFDATDIR;74HC273芯片LACLMCRAAND#0FF00HSACLMCRA;IOPB[0-7]為一般I/O口功能LACLPBDATDIROR#0FF00HAND#0FF00H;IOPB[0-7]為輸出功能,0SACLPBDATDIRRET;*****************************************************************************CLOCK:
LDP
;74HC273驅(qū)動脈沖的子程序LACLPFDATDIRLACLPFDATDIROR#0004H;PF2口輸出高電平SACLPFDATDIRRPTNOPLACL#10HPFDATDIR;延時AND#0FFFBH;PF2口輸出低電平SACLRETPFDATDIR;***************************************************************************DELAY: ;延時子程序LDP #DEYH>>7SPLK0FFFFH,DEYHLACLDEYHCON:CLRCSUBC#1EXIT_c_int0BCNDNOPBRETEXIT,NCCON;主程序的入口LOOP1:CALLLDPSYSINIT#LED>>7;系統(tǒng)初始化LOOP:SPLKLDP#0001h,LED#PBDATDIR>>7;LED1LACLPBDATDIR;把PBDATDIRACC寄存器AND#0FF00H;0LDP#LED>>7ORLEDLDP#PBDATDIR>>7SACLPBDATDIR;把需要顯示的值賦給相應(yīng)的寄存器CALLCLOCK;產(chǎn)生瑣存脈沖LDP#LED>>7LACLLEDCLRCC;清進(jìn)位位,以免對移位造成影響ROLSACLLED;左移一位CALLDELAY;延時LDP#LED>>7PHANTOMGISR1GISR2GISR3GISR4GISR5GISR6
BIT LED,6BCND B LOOPNOPRETRETRETRETRETRETRET.end
;LEDTC位;LED的移位次數(shù)已到,LED重新賦值;循環(huán)源程序輸完之后(如圖1.5所示Fil>Sav(文件>保存)及時保存到C:\tic2xx\myprojects\work\sy1asm棄。將文件添加到該項目中
圖1.5 源程序編輯窗口由于項目文件是項目的管理文件,故項目管理的信息都需存放在“sy1.mak”的項目文件中,在對用戶系統(tǒng)進(jìn)行開發(fā)時需要將所需文件包含在項目文件中,即使用工程管理方法:一次性將工程的全部源文件、頭文件、鏈接命令文件、用戶庫文件送入工程管理器,統(tǒng)一管理“匯編/編譯”和“鏈接/定位在圖1.1ProjecOpe(項目>打開,再根據(jù)給出ProjectOpe”對話框,選擇已存項目文件所在的文件夾并打開文件(如圖1.6所示,然后再選擇菜單命令“Project>AddFilesToProject”(項目>添加文件到項目),出現(xiàn)一個如1.7所示的“AddFilestoProject.asm匯編源文件、.cmd鏈接命令文件和一個“rts2xx.lib”的庫文件按類一一添加到該項目中,在默認(rèn)情況下,該庫C:\tic2xx\c2000\cgtools\.lib.hinclude”入其它類型的文件。圖1.6 項目文件選擇對話框察看項目文件
圖1.7 添加文件對話框一旦編譯了文件,Project窗口將用樹型結(jié)構(gòu)顯示項目包含的組和文件的關(guān)系,如圖1.8文件是否加入到相應(yīng)文件夾中。當(dāng)啟動CC2000VieProjec(觀察>項目ProjecOpenprojec1.9所示,根據(jù)給出(如圖1.)的對話框,用前面相同的方法選擇(具體操作參見附錄五。 圖1.8 項目管理窗口 圖1.9 文件操作方法編譯鏈接啟動CC’C2000是:在圖1.1Projec>Ope(項目>打開,以便選定需ProjecRebuildAl(項目>匯編編譯和鏈接所有文件CCC2000sy1.ma”管理下的源文sy1.assy1.ob1.10Buil(創(chuàng)建)窗口,其中倒數(shù)第二行用藍(lán)色字告訴我們BuildComplet(創(chuàng)建完成CC’C2000匯編編譯器是如何幫助我們查找錯誤的(即錯誤和警告自動定位。1.10創(chuàng)建結(jié)果窗口(不成功)根據(jù)系統(tǒng)提示該錯誤的類型和位置回到原程序中查看和修改行編譯。如果編譯正確,將會鏈接生成一個文件名為“sy1.out”的可執(zhí)行文件。再次出現(xiàn)如圖1.11Buil(創(chuàng)建)窗口,最后一行告訴我們了一個可以在CC’C2000環(huán)境下用XDS510硬件仿真器進(jìn)行調(diào)試的、完整的項目。1.11創(chuàng)建結(jié)果窗口(成功)對于建好的項目,一般情況下,在退出CC’C2000調(diào)試環(huán)境時,系統(tǒng)會自動將“項目文.wksFile>Save”即可保存到“sy1.asm”文件中。sy1.out”可執(zhí)行文件裝載到實驗板上之后才能對1.1Fil>LoadProgra(文件>裝載程序1.12LoadProgra文件下載到實驗板上。文件下載之后,就可對文件進(jìn)行在線調(diào)試。圖1.12 程序裝載對話框名必須保持一致。調(diào)試程序在設(shè)計漏洞,算法()設(shè)計是否合理,是否能夠準(zhǔn)確地控制各種硬件資源,是否能夠?qū)崿F(xiàn)預(yù)期的功能,等等。CC’C2000的調(diào)試環(huán)境功能很強(qiáng),可以在C語言級調(diào)試,也可以在匯編語言級調(diào)試,并提供了多種運行程序的方式或調(diào)試手段,比較常用的有以下幾種:連續(xù)運行、設(shè)置觀察窗、手段的使用方法:?連續(xù)運行方式:在圖1.1所示的界面上,將源程序觀察窗作為當(dāng)前窗口。首先應(yīng)選擇菜單命令“DebugResetDS(DSP復(fù)位,或者點擊工具欄上的按鈕,使DSP復(fù)位,然后選擇菜單命令Debu>Ru(調(diào)試>程序運行,或者按動5鍵,或者點擊工具欄上的 圖標(biāo)按鈕,均可令程序進(jìn)入實時運行狀態(tài)。當(dāng)輸入上述命令時,我們似乎看不出程序有任何反應(yīng),果變?yōu)闇\色則表明程序正在運行。
由于這段程序結(jié)構(gòu)是無限循環(huán)程序結(jié)構(gòu)欲想終止程序運行可點擊工具欄上的 圖標(biāo)DebuHal(調(diào)試>停止Shitf+”組合鍵。隨即,工具欄的顏色復(fù)原,表明程序停止運行,并隨機(jī)地停留在程序的某一行上。一種很有效的手段。因此,需要進(jìn)一步探討和選擇其它的調(diào)試手段。?設(shè)置觀察窗口:CC’C20006個不重疊觀行狀況,進(jìn)而達(dá)到調(diào)試程序的目的。實驗教程中調(diào)試的這個例子比較簡單,其中用到的寄存器除了ACC、ST0、ST1和PC該變量會被不停地改寫。增設(shè):反匯編觀察窗口、存儲器窗口、CPU寄存器窗口、觀察窗口。詳細(xì)用法參見附錄五。存儲器窗口:可直接觀察存儲器的內(nèi)容。詳細(xì)用法參見附錄五。CPU寄存器窗口:其中包含“CPURegister”和“StatusRegister”兩個選項,點擊相應(yīng)的選項可以觀察調(diào)試過程中CPU寄存器和各個狀態(tài)位的變化情況。詳細(xì)用法參見附錄五。觀察窗口:觀察調(diào)試過程中的變量、C表達(dá)式、地址和寄存器的值。在圖1.1所示的界VieWatchWindo(視圖>觀察窗口,將有一個空白窗口出現(xiàn)在CC2000窗口的下部,如圖1.13所選擇的變量、寄存器和存儲器的內(nèi)容。圖1.13 CC2000窗口下的觀察窗口InsertNewExpressio1.13所示。進(jìn)入所選擇的圖1.14“WatchAddExpression(添加變量對話框O察窗中可以查看到以藍(lán)色顯示的變量的物理地址(十進(jìn)制、符號名和數(shù)值。圖1.14 添加變量對話框鼠標(biāo)右鍵,在彈出的語境菜單中選擇“RemoveCurrentExpression”即可。示出該變量的地址;如果需要顯示該變量的值,則需要在變量名前加“*”號。后緊跟一個逗號和一個格式指示字母。常用的格式指示字母和其代表格式的對應(yīng)關(guān)系如表DEFDEF十進(jìn)制XXOUC十六進(jìn)制八進(jìn)制ASCII字符(字節(jié))?單步運行方式:單步運行是一種控制程序運行過程的有效方法,而且能夠及時觀察到程序的運行狀態(tài)。CCC2000桌面上各個觀察法如下:在圖1.1所示的界面上,將源程序觀察窗作為當(dāng)前窗口,用前面所述方法使DSP復(fù)位。然后選擇菜單命令DebuStepInt(調(diào)試>單步運行方式,或者按一下鍵盤上的F鍵,8或者點擊工具欄中的 圖標(biāo)按鈕,均可令程序進(jìn)入單步運行狀態(tài)。一次次地點擊 按鈕的同時,可以看到觀察窗中出現(xiàn)變紅的寄存器或變量,并且其中的值會不斷地及時更新。程序的運行過程。程序的單步運行方式與實時連續(xù)運行方式相比,兩者具有很強(qiáng)的互補(bǔ)性。?動畫運行方式動畫運行方式既像連續(xù)運行方式那樣自動控制程序的運行過程在圖1.1所示的界面上,也應(yīng)將源程序觀察窗作為當(dāng)前窗口,并先讓DSP復(fù)位,然后選擇菜單命令DebuAnimat(調(diào)試>動畫運行方式,或者按一下鍵盤上的F12
鍵,或者點擊工具欄中的 圖標(biāo)按鈕,均可令程序進(jìn)入動畫運行狀態(tài)。同時應(yīng)注意觀察寄存器變量的變化規(guī)律,是否符合設(shè)計要求。若想讓程序停止,點擊?設(shè)置斷點運行方式:
按鈕即可。單步運行那些復(fù)雜的或者待調(diào)試的程序片段說,設(shè)置斷點是控制程序運行過程的另一種有效方法。一種最簡便的設(shè)置斷點的方法:在圖1.1所示的界面上確保當(dāng)前窗口為源程序觀察窗。用光標(biāo)標(biāo)記準(zhǔn)備設(shè)置斷點的源程序語句行后,點擊 圖標(biāo)按鈕或者雙擊鼠標(biāo),此時,選定行會出現(xiàn)紅色背景,表示設(shè)置完成;點擊 圖標(biāo)按鈕,取消所設(shè)置的斷點。對已設(shè)置斷點的程序進(jìn)行調(diào)試時DSP12個斷點又會暫停,等等一直調(diào)試下去。5CCS(以CC4.10版本為例的基本用法,有許多的功能還需要同學(xué)們根據(jù)自己的習(xí)慣愛好去慢慢挖掘。實驗二 常用指令操作實驗一.實驗說明在設(shè)計DSP應(yīng)用系統(tǒng)時,指令組成了DSP系統(tǒng)的應(yīng)用軟件。由于種種原因,所編寫的軟件中總會存在一些問題,因此必須對軟件進(jìn)行調(diào)試,通過調(diào)試修改軟件中不合理的地方。在軟件調(diào)試中,一個重要問題是觀察指令執(zhí)行的結(jié)果。例如,在DSP應(yīng)用系統(tǒng)中輸出一個信號波形,但發(fā)現(xiàn)輸出的波形與預(yù)期的不同,這時就需要檢查原因。由于DSP指令執(zhí)方法。二.實驗?zāi)康耐ㄟ^在TMS320LF2407DSP實驗開發(fā)系統(tǒng)中實際使用指令,初步學(xué)會如何使用實驗中的指令。學(xué)習(xí)指令的功能和基本使用操作方法。學(xué)習(xí)DSP應(yīng)用系統(tǒng)中的系統(tǒng)調(diào)試方法,學(xué)會單步調(diào)試的基本方法。學(xué)會如何觀察指令的執(zhí)行結(jié)果。三.實驗內(nèi)容熟悉常用匯編指令。熟悉單步執(zhí)行的調(diào)試方法。熟悉在調(diào)試環(huán)境下觀察指令的執(zhí)行結(jié)果和相應(yīng)寄存器內(nèi)容。四.實驗步驟立即數(shù)載入指令實驗操作立即數(shù)載入指令包括:累加器載入立即數(shù)。向輔助寄存器載入數(shù)。DP載入立即數(shù)。DP是狀態(tài)寄存器的ST0(0~8)位,作為數(shù)據(jù)空間直接尋址時地址的高9位A15~A。本次練習(xí)中,需要完成如下工作:1234h。向累加器裝載立即數(shù)ABCDh4位。向輔助寄存器AR3-5裝載立即數(shù)。DP的裝載立即數(shù)??梢钥吹剑敬尉毩?xí)不僅是向某個寄存器裝載數(shù)據(jù),而且還包括向某個寄存器內(nèi)容指向的某些數(shù)據(jù)存儲單元裝載數(shù)據(jù)。實驗時,可以先編寫好上述指令,作為一個程序段進(jìn)行編譯。然后打開CPU寄存器觀器內(nèi)容的變化。單步操作前可以通過CPU寄存器觀察窗口對各相關(guān)寄存器進(jìn)行修改,以便更清楚地觀察到指令執(zhí)行的結(jié)果。直接尋址方式下的數(shù)據(jù)存取對數(shù)據(jù)空間的直接尋址采用以下兩種方式:程序如下:間接尋址方式下的數(shù)據(jù)存取在本操作中,練習(xí)間接尋址中的操作數(shù)存儲器操作。這是利用輔助寄存器ARx(x=0~7)ARx的內(nèi)容就是數(shù)據(jù)空間的地址,ARx加星號(*)前綴表示的是ARx中的地址所指向的存儲器單元,而且保存在ARx中的地址在對存儲單元訪問前/后可以進(jìn)行修改。具體有7種修改方式:;訪問后ARx中地址不變*+ ;訪問后ARx1- ;訪問后ARx10+ ;訪問后ARx中地址加上AR0中的值0- ;訪問后ARx中地址減去AR0中的值BRO+ ;訪問后ARx中地址加上AR0中的值,并反向進(jìn)位BRO- ;訪問后ARx中地址減去AR0中的值,并反向進(jìn)位程序編制說明如下:TST寄存器中存放的移位值;語句AR3=#2000h和語句*AR3=#0AC01h2000h的數(shù)據(jù)單元存放數(shù)據(jù)AC01h;T=#8和B=*AR3-<<TS-2000h12位載入累加器B中,而且AR311FFFh;(4)語句*,AR3+0=#1111h到語句*,AR3(#16)=#5555h。程序清單如下:加減運算使用加減運行指令時,應(yīng)當(dāng)注意有關(guān)寄存器的影響,主要有如下兩個:ST1中符號擴(kuò)展模式位SXM――的設(shè)置對加減運算的影響:SXM=0,符號不擴(kuò)展SXM=1,符號擴(kuò)展ALU運算模式位C16的設(shè)置及其對加減運算的影響:C16=0,雙精度(32位)運算C16=1,16位運算程序清單如下:5.邏輯運算程序清單如下:移位運算程序清單如下:乘法運算本指令操作主要是練習(xí)如何完成乘法操作,其中包括乘、加操作。程序清單如下:實驗三 “追燈”式電路控制一.實驗說明輸入/輸出端口(I/O口)是DSP芯片內(nèi)部電路與外部世界交換信息的通道。輸TMS320LF2407芯片做基本的I/O控制接口。使用循環(huán)指令和多種送數(shù)延時循環(huán)程序,設(shè)計DSP的“追燈”控制器,是最容易和最LED展示的變化組合數(shù)據(jù)事先存在數(shù)組中,而在程序中逐一由數(shù)組中取出個別的樣本數(shù)據(jù)送往74HC273鎖存以驅(qū)動LED發(fā)光二極管SW-DIP8須置ON,便可完成“追燈”式電的變化較多,展示效果較佳。實驗箱中的TMS320LF2407芯片的輸出端口用IOPB0~IOPB7引腳,TMS320LF2407的IOPF274HC273的CLK74HC273的控制信號;TMS320LF2407的RESET(復(fù)位)74HC273CLR,復(fù)位時,74HC273輸出引腳為低電平。二.實驗?zāi)康氖煜せ镜腡MS320LF240X系列的匯編語言。了解實驗開發(fā)系統(tǒng)的基本I/O硬件電路的控制方法。進(jìn)一步熟悉設(shè)計并調(diào)試程序的基本方法。三.實驗內(nèi)容設(shè)計并調(diào)試用于TMS320LF2407的“追燈”控制器,要求“燈”的花樣和顯示次數(shù)均由軟件任意設(shè)定。程序要求具有多種不同的燈亮花樣,能實現(xiàn)發(fā)光二極管左移、右移即所謂“追燈”功能。四.實驗硬件電路圖3.1 TMS320LF與40LED接口電路五.實驗參考程序清單C程序I/O端口作為輸出(追燈)源程序代碼:vectors.asm”.title.ref.sectint1:int2:int3:int4:int5:
"vectors.asm"_c_int0,_nothing".vectors"b _c_int0b _nothingb _nothingb _nothingb _nothingb _nothingint6: b主程序
_nothing8個LED的循環(huán)顯示#include "register.h"initial() //初始化子程序{asm("setcSXM");asm("clrcOVM");asm("clrcCNF");asm("setcINTM");*SCSR1=0x81FE;*WDCR=0x0E8;*IMR=0x0000;*IFR=0x0FFFF;*MCRA=*MCRA&0x0FF;*PBDATDIR=*PBDATDIR|0x0FF00;*MCRC=*MCRC&0X0FBFF;*PFDATDIR=*PFDATDIR|0x0404;
//抑制符號位擴(kuò)展//累加器中結(jié)果正常溢出//B0被配置為數(shù)據(jù)存儲空間//禁止所有中斷//CLKIN=6M,CLKOUT=4*CLKIN=24M//SCSR2WDOVERRIDE//WD1,故可以用//軟件禁止看門狗//禁止所有中斷"10"http://IOPBI/OTMS320LF240x的//IOPB的設(shè)置//IOPB端口設(shè)置為輸出方式//IOPF2I/O端口//LED燈//IOPF2IOPF2=1//IOPF2=0//以上的操作產(chǎn)生一個脈沖,使LED全部熄滅}//主程序main(){intled;inti,k;initial();while(1){
//定義一個局部變量//定義其它一些臨時變量//系統(tǒng)初始化for(led=0x0080,i=0;i<8;led=led>>1,i++){*PBDATDIR=*PBDATDIR&0x0FF00;//首先屏蔽IOPB的各位*PBDATDIR=*PBDATDIR|led; //把需要顯示的值賦給IOPB端口*PFDATDIR=*PFDATDIR|0x0404; //IOPF2設(shè)置為輸出方式,且IOPF2=1*PFDATDIR=*PFDATDIR&0x0FFFB;//IOPF2=0,這兩句語句給一個脈沖,//LEDIOPB端口的值k=k;}}}
//為了保證顯示時間,給一定時間的延時//直接返回中斷服務(wù)程序voidinterruptnothing(){return;}匯編程序;I/O端口作為輸出(追燈);(1) 主程序IOSFT_REG .usect ".data0",1.include "F2407REGS.H"; .include "vector.h"
;要顯示的數(shù)據(jù)寄存器;引用頭部文件_c_int0:.def.text_c_int0;相當(dāng)于主程序的入口CALLSYSINIT;調(diào)系統(tǒng)初始化程序LDP#DP_PF2;7080h~7100h區(qū)LACLMCRAAND#000FFH;IOPBI/O功能SACLMCRALACLMCRCAND#0FBFFH;IOPF2I/O功能SACLMCRCLACLPBDATDIROR#0FF00H;IOPB口設(shè)置為輸出方式SACLPBDATDIRLDP#5H;0280h~0300h區(qū)SPLK#01H,IOSFT_REG;給顯示的數(shù)據(jù)賦初值LOOP:LDP#DP_PF2LACLPFDATDIROR#0404H;IOPF2設(shè)置為輸出方式,IOPF2=1SACLPFDATDIR;74HC273片選信號LDP#5HLACLIOSFT_REGLDP#DP_PF2OR#0FF00HSACLPBDATDIR;IOPB口LACLPFDATDIRAND#0FFFBH;IOPF2=0 (應(yīng)該使能顯示)SACLPFDATDIR;74HC273片選信號CALLDELAY;調(diào)延時程序LDP#5HLACLIOSFT_REGSFL;左移一位SACLIOSFT_REGBITIOSFT_REG,BIT8;判是否循環(huán)完一次,8個發(fā)光二極管BCNDLOOP1,TCBWAITLOOP1:LDP#5HSPLK#01H,IOSFT_REG;如循環(huán)完一次則顯示數(shù)據(jù)賦初值WAIT:NOPBLOOP;(2)SYSINIT:SETCINTMCLRCSXMCLRCOVMCLRCCNF;B0被配置為數(shù)據(jù)存儲空間LDP#0E0HSPLK#81FEH,SCSR1;CLKIN=6M,CLKOUT=24MSPLK#0E8H,WDCR;WDTLDP#0SPLK#0000H,IMR;不使能SPLK#0FFFFH,IFR;清全部中斷標(biāo)志RET;(3)軟件延時程序DELAY:MAR*,AR4LARAR4,#0FFFEHLARAR0,#00HDELAY1:SBRK#1NOPCMPR00BCNDDELAY1,NTCRET實驗四 按鍵計數(shù)器一.實驗說明在控制電路中,通常需要以按鍵來控制程序執(zhí)行流程或是輸入數(shù)據(jù)。在圖4.1中,4個K~KTMS320LF2407IOPF3~IOPF4I/O端口的輸入,8只1 4發(fā)光二極管LED1~ILED8通過SW-DIP8撥碼開關(guān)和74HC273鎖存器芯片分別對應(yīng)TMS320LF2407芯片的引腳IOPF0~IOPF7作為I/OI/O引腳,8只發(fā)光二極管。本實驗箱中的K1TMS320LF2407I/OIOPF3K1鍵,則F數(shù)據(jù)和方向控制寄存器(PFDATDIR)3位為(IOPF3引腳)0,同時點亮發(fā)光二極管。二.實驗?zāi)康恼莆瞻存I的工作原理、按鍵和TMS320LF2407芯片的接口技術(shù)以及按鍵輸入程序的設(shè)計和調(diào)試方法。掌握輸出端發(fā)光二極管的工作原理、顯示的信息與程序的設(shè)計和調(diào)試方法。三.實驗內(nèi)容設(shè)計并調(diào)試用于TMS320LF2407芯片的計數(shù)程序,要求由按鍵K1作輸入并對其進(jìn)行計數(shù),計數(shù)的結(jié)果由LED7~LED0發(fā)光二極管以二進(jìn)制方式顯示。對程序稍作改動,用K4按鍵完成上述功能。四.實驗硬件電路TMS320LF2407與鍵盤、LED接口電路五.實驗參考程序清單通過編程,設(shè)計一個按鍵計數(shù)器,要求剛接通電源時,8只發(fā)光二極管都不亮,表示計000000000BK11,發(fā)光二LED000000001B,然后松開按鍵;再次按下K1鍵時,計數(shù)器的值又加1,發(fā)光二極管LED100000010B,然后再松開按鍵;依次255次按鍵時,發(fā)光二極管LED7~LED0會全部點亮,其后的一次K1鍵0,就這樣循環(huán)往復(fù)。C語言程序說明,vectors.asm都是相同的。源程序代碼:#include intm=0x0001;initial(){asm("asm("
setc SXM");clrc asm(" clrc CNF");*SCSR1=0x81FE;*WDCR=0x0E8;*IMR=0x0000;*IFR=0x0FFFF;*MCRA=*MCRA&0x0FF;*PFDATDIR=*PFDATDIR|0x0400;*PBDATDIR=*PBDATDIR|0x0FF00;*PFDATDIR=*PFDATDIR|0x0404;*PFDATDIR=*PFDATDIR&0xFFFB;}voidinlinedisable(){asm(" setcINTM");}intkeyscan(){intk,j;k=*PFDATDIR&0x0008;if(k==0x0008)k=0;elsek=1;if(k==1){for(j=30000;j>0;j--)j=j;k=*PFDATDIR&0x0008;if(k==0x0008)k=0;elsek=1;}return(k);}intkeyserve(){intk;k=*PFDATDIR&0x0008;if(k==0x0000)*PBDATDIR=(*PBDATDIR&0xFF00)+m++;else*PBDATDIR=*PBDATDIR;*PFDATDIR=*PFDATDIR|0x0404;*PFDATDIR=*PFDATDIR&0xFFFB;}main(){disable();initial();while(1){inti;i=0;i=keyscan();if(i==1)keyserve();}}voidinterruptnothing(){return;}匯編程序;鍵盤與發(fā)光二極管配合使用程序st0_temp.usect".b20",1;60st1_temp.usect".b20",1;61contextSTACK.usect.usect".b20",7".stack",40;62-68IOSFT_REG.usect".data0",1;顯示數(shù)據(jù)移位寄存器IO_COUNT.usect".data0",1;延時計數(shù)寄存器IO_DATA.usect".data0",1;I/O臨時數(shù)據(jù)緩沖區(qū)LEDXS.usect".data0",1;LED顯示的數(shù)據(jù)LEDFLAG.usect".data0",1;LED顯示標(biāo)志寄存器K1FLAG.usect".data0",1;K1標(biāo)志寄存器KEYDATA.usect".data0",1;讀得鍵盤值存放寄存器DP_USER.set.include5"F2407REGS.H";引用頭部文件.def _c_int0;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;(1)建立中斷向量表.sect".vectors";定義主向量段RSVECTB_c_int0;PM0 ResetVector 1INT1BPHANTOM;PM2 Intlevel14INT2BGISR2;PM4 Intlevel25INT3BPHANTOM;PM6 Intlevel36INT4BPHANTOM;PM8 Intlevel47INT5BPHANTOM;PMA Intlevel58INT6BPHANTOM;PMC Intlevel69RESERVEDBPHANTOM;PME (AnalysisInt) 10SW_INT8BPHANTOM;PM10 UserS/Wint —SW_INT9BPHANTOM;PM12 UserS/Wint -SW_INT10BPHANTOM;PM14 UserS/Wint -SW_INT11BPHANTOM;PM16 UserS/Wint -SW_INT12BPHANTOM;PM18 UserS/Wint -SW_INT13BPHANTOM;PM1A UserS/Wint -SW_INT14BPHANTOM;PM1C UserS/Wint -SW_INT15BPHANTOM;PM1E UserS/Wint -SW_INT16BPHANTOM;PM20 UserS/Wint -TRAPBPHANTOM;PM22 Trapvector-NMIBPHANTOM;PM24 NonmaskableInt3EMU_TRAPBPHANTOM;PM26 EmulatorTrap2SW_INT20BPHANTOM;PM28 UserS/Wint -SW_INT21BPHANTOM;PM2A UserS/Wint -SW_INT22BPHANTOM;PM2C UserS/Wint -SW_INT23BPHANTOM;PM2E UserS/Wint -SW_INT24BPHANTOM;PM30 UserS/Wint -SW_INT25BPHANTOM;PM32 UserS/Wint -SW_INT26BPHANTOM;PM34 UserS/Wint -SW_INT27BPHANTOM;PM36 UserS/Wint -SW_INT28BPHANTOM;PM38 UserS/Wint -SW_INT29BPHANTOM;PM3A UserS/Wint -SW_INT30BPHANTOM;PM3C UserS/Wint -SW_INT31BPHANTOM;PM3E UserS/Wint—;pvecs.sect ".pvecs"PVECTORS B PHANTOMB PHANTOMB PHANTOMB PHANTOMB PHANTOMB PHANTOM
;定義子向量段;保留向量地址偏移量-0000h;保留向量地址偏移量-0001h;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量B B B
;保留向量地址偏移量-05;SCI_RX_ISR;保留向量地址偏移量;SCI_TX_ISR ;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-0ABPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-10BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-15BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-1ABPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-20BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-25BPHANTOM;-0026hBT1GP_ISR;保留向量地址偏移量-0027h T1PINT中斷BPHANTOM;-0028hBPHANTOM;保留向量地址偏移量BPHANTOM;-2ABPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量B B
;pvectoraddroffset0x02f-T3PINT;保留向量地址偏移量-30BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-35BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-3ABPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-3FB B
;CANMBX_ISR;保留向量地址偏移量;保留向量地址偏移量-0041h;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;(2)主程序.text_c_int0CALLSYSINIT;調(diào)系統(tǒng)初始化程序CALLKEYLEDINIT;LED初始化程序LDP#DP_USER;0280h~0300h區(qū)SPLK#01H,IOSFT_REG;寄存器和標(biāo)志初始化SPLK#00H,IO_COUNTSPLK#001H,IO_DATASPLK#001H,LEDXSSPLK#00H,LEDFLAG;LEDFLAG.0=1K1,K2,K3按下;LEDFLAG.0=0K4按下SPLK#01H,K1FLAGCLRCINTM;開總中斷LOOP:CALLKEY;調(diào)鍵盤程序,即掃描鍵盤LDP#DP_USERBITLEDFLAG,15BCNDLEDBD1,TCLACLIO_COUNTSUB#03E8HBCNDWAIT,LEQ;10s延時到否LEDBD1:SPLK#00H,IO_COUNTLDP#DP_PF2LACLPFDATDIROR#0404H;IOPF2=1SACLPFDATDIR;74HC273片選信號LDP#DP_USERLACLLEDXSOR#0FF00H;IOPB口為輸出方式LDP#DP_PF2SACLPBDATDIR;IOPB口LACLPFDATDIRAND#0FFFBH;IOPF2=0SACLPFDATDIR;74HC273片選信號LDP#DP_USERBITLEDFLAG,15BCNDLEDBD2,TCLACLLEDXSSFLSACLLEDXSLACLIOSFT_REGSFLSACLIOSFT_REGBITIOSFT_REG,BIT8;判是否循環(huán)完一次BCNDLOOP1,TCBWAITLOOP1:LDP#DP_USERSPLK#01H,IOSFT_REG;賦初值LEDBD2:LACLIO_DATASACLLEDXSWAIT:NOPBLOOP;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~系統(tǒng)初始化程序SYSINIT:SETCCLRCCLRCCLRCLDPSPLKSPLKLDPSPLKSPLKLDPSPLK
INTMSXMOVMCNF#0E0H#81FEH,SCSR1#0E8H,WDCR#0#02H,IMR#0FFFFh,IFR#DP_EVA
;B0區(qū)被配置為數(shù)據(jù)空間;7000h~7080h區(qū);4倍頻,CLKIN=6M,CLKOUT=24M;WDT;INT2;清中斷標(biāo)志;7400h~7480h區(qū);T1PINT中斷SPLKSPLK
#0FFFFh,EVAIFRA ;EVA中斷標(biāo)志#0,GPTCONASPLK
#0EA6H,T1PR
;10ms產(chǎn)生一次中斷SPLKSPLKRET
#0,T1CNT#0164CH,T1CON ;1;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~鍵盤和發(fā)光二極管初始化程序KEYLEDINIT:LDPLACLANDSACLLACLANDSACLLACL
#DP_PF2MCRC#083FFHMCRCMCRA#000FFHMCRA
;IOPF2,IOPF[3~6]配置為一般的I/O口;IOPB[0~7]I/O口OR #0400H ;IOPF2為輸出方式ANDSACLLACLORSACLRET
#08787H#0FF00H
;IOPF[3~6]為輸入方式;IOPB[0~7]為輸出方式;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~鍵盤程序KEY:CALLLACLBCNDCALLCALLLACLBCND
READKEYKEYDATAKEYRET,EQKEYDELAYREADKEYKEYDATAKEYRET,EQ
;調(diào)讀鍵程序;ACC=0?;延時消抖動;再一次讀鍵值LDPBITBCND
#DP_USER ;判斷按鍵情況KEYDATA,15KEYRET,NTCKEYRET:
CALLBLACLANDSACLRET
K1KEYRETKEYDATA#0FFF0HKEYDATA
鍵按下;清讀取的鍵值寄存器;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~讀鍵子程序READKEY:LDP #DP_PF2LACLRPTSFRORCMPLLDP
#2#0FFF0H#DP_USER
;取出鍵值PFDATDIR.3~PFDATDIR.6;3位;4位(4個鍵)SACLRET
KEYDATA ;存放鍵值;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~KEYDELAY:KEYD1:
LACCSUBRPTNOPBCNDRET
#6000#1#80KEYD1,NEQ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;(8)鍵子程序K1: ;"+"鍵子程序READK1: CALLCALLLDPBITBCNDSPLKLACLADDSACLRET
KEYDELAYREADKEY#DP_USERKEYDATA,15READK1,TC#01,LEDFLAGIO_DATA#1IO_DATA
;判斷按鍵K1是否松開;LED左移標(biāo)志,LED對同一個數(shù)不刷新;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;(9)中斷程序GISR2:;保護(hù)現(xiàn)場
LDPSSTSSTSACLSACHSARSARSARSARSAR
#0#0,st0_temp#1,st1_tempcontextcontext+1AR1,context+2AR2,context+3AR3,context+4AR4,context+5AR5,context+6
;INT2中斷人口;保存機(jī)器上下文;DP-0;B2DARAM.;ACC16位;ACC16位LDPLACC
#0E0HPIVR,1 ;讀取外設(shè)中斷向量寄存器(PIVR),并左移一位T1GP_ISR:; 恢復(fù)現(xiàn)場
ADDBACCLDPLACLADDSACLLDPSPLKLDPLARLARLARLARLARLACCADDSLSTLST
#PVECTORS#DP_USERIO_COUNT#1IO_COUNT#DP_EVA#0AR5,context+6AR4,context+5AR3,context+4AR2,context+3AR1,context+2context+1,16context#1,st1_temp#0,st0_temp
;加上外設(shè)中斷入口地址;跳到相應(yīng)的中斷服務(wù)子程序;1中斷入口CLRCRET
INTM ;開總中斷,因為一進(jìn)中斷就自動關(guān)閉總中斷;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;(10)假中斷程序PHANTOMKICK_DOG
RETEND
;復(fù)位看門狗實驗五 鍵盤和LED發(fā)光二極管顯示電路一.實驗說明在DSPI/OI/O端口的輸出點亮發(fā)光二極管,形成的鍵盤、LED4.1所示。二.實驗?zāi)康膶W(xué)會配合使用鍵盤與發(fā)光二極管的編程方法。進(jìn)一步認(rèn)識TMS320LF2407芯片的I/O端口的功能及控制方法。三.實驗內(nèi)容用TMS320LF240788種花樣顯示。給按鍵定義各種不同功能,以實現(xiàn)對發(fā)光二極管循環(huán)順序和點亮個數(shù)的控制。四.實驗參考程序清單通過編程,使8只發(fā)光二極管實現(xiàn)如下顯示功能:按下K1鍵,可點亮8種不同組合的發(fā)光二極管花樣模式顯示,按8次為一個循環(huán)周期;當(dāng)按下一次K2鍵,將使設(shè)定的發(fā)光二1;當(dāng)按下一次K31位;當(dāng)按K4鍵或不按鍵時,返回到循環(huán)點亮發(fā)光二極管模式。110ms10s延時。C程序I/O端口作為輸入和輸出使用源程序代碼:說明,vectors.asm都是相同的。主程序//該程序用于鍵盤的識別,按鍵情況通過LED表示.#include "register.h"http://初始化子程序initial(){asm("setcSXM");asm("clrcOVM");asm("clrcCNF");*SCSR1=0x81FE;*WDCR=0x0E8;*IMR=0x0000;*IFR=0x0FFFF;*MCRA=*MCRA&0x0FF;*PBDATDIR=*PBDATDIR|0x0FF00;*MCRC=*MCRC&0x03FF;*PFDATDIR=*PFDATDIR|0x0400;*PBDATDIR=*PBDATDIR&0x0FF00;*PFDATDIR=*PFDATDIR|0x0404;*PFDATDIR=*PFDATDIR&0x0FFFB;//以上的操作產(chǎn)生一個脈沖,使LED全部熄滅}// 屏蔽中斷子程序void inline disable(){
//抑制符號位擴(kuò)展//累加器中結(jié)果正常溢出//B0被配置為數(shù)據(jù)存儲空間//CLKIN=6M,CLKOUT=4*CLKIN=24M//SCSR2WDOVERRIDE//WD1,故可以用//軟件禁止看門狗//禁止所有中斷"10"http://IOPBI/O功能//IOPB端口設(shè)置為輸出方式//IOPF2IOPF3~6配置為一般的I/O功能//IOPF2端口為輸出端口,IOPF3-IOPF6為輸入端口//LED燈//IOPF2IOPF2=1//IOPF2=0asm("setcINTM");}int keyscan(){intk,j; //定義局部變量k=*PFDATDIR&0x0078;//讀入鍵盤狀態(tài)并屏蔽掉相應(yīng)的位if(k==0x0078) k=0;else k=1;//k=1if(k==1)//若無鍵按下,則直接返回{for(j=30000;j>0;j--) j=j;//若有鍵按下,則延時消抖動k=*PFDATDIR&0x0078;//讀入鍵盤狀態(tài)并屏蔽掉相應(yīng)的位if(k==0x0078) k=0;else k=1;//有還有鍵按下,則k=1}return(k);//K值}intkeyserve()//鍵服務(wù)子程序{int k;//定義局部變量k=*PFDATDIR&0x0078;//讀入鍵盤狀態(tài)并屏蔽掉相應(yīng)的位switch(k){case0x0070:*PBDATDIR=(*PBDATDIR&0xFF00)|0X0001;break;//K1鍵,則顯示"1"case0x0068:*PBDATDIR=(*PBDATDIR&0xFF00)|0X0002;break;//K2鍵,則顯示"2"case0x0058:*PBDATDIR=(*PBDATDIR&0xFF00)|0X0003;break;//K3鍵,則顯示"3"case0x0038:*PBDATDIR=(*PBDATDIR&0xFF00)|0X0004;break;//K4鍵,則顯示"4"}*PFDATDIR=*PFDATDIR|0x0404;*PFDATDIR=*PFDATDIR&0x0FFFB;//B端口的值顯示出來}main(){
//IOPF2IOPF2=1//IOPF2=0disable();initial();while(1){
//屏蔽所有中斷//系統(tǒng)初始化inti;i=0;i=keyscan();
//定義局部變量//鍵盤掃描,若有鍵按下,則返回值為"1",否則返回值為"0"if(i==1)}}
keyserve();
//如果有鍵按下,則進(jìn)行鍵服務(wù)程序//直接返回中斷服務(wù)子程序voidinterruptnothing(){return;}匯編程序st0_temp.usect".b20",1;60st1_temp.usect".b20",1;61contextSTACK ..usectusect".b20",7".stack",40;62-68IOSFT_REG.usect".data0",1;280;IOPBSHIFTREGIO_COUNT.usect".data0",1;281;IOCOUNTREGIO_DATA.usect".data0",1;282;I/O臨時數(shù)據(jù)緩沖區(qū)LEDXS.usect".data0",1;283;LED顯示的數(shù)據(jù)LEDFLAG.usect".data0",1;284;LED顯示標(biāo)志K1FLAGKEYDATA.KEYTIMERDP_USER.usectusect.usect.set".data0",1".data0",1".data0",15;285;286;287;K1標(biāo)志寄存器.include "F2407REGS.H".def_c_int0~~~~~~~~~~~~~~~~~~~~.sect~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~".vectors" ;定義主向量段RSVECTB_c_int0;PM0 ResetVector 1INT1BPHANTOM;GISR1 ;PM2 Intlevel14INT2BGISR2;PM4 Intlevel2 5INT3BPHANTOM;PM6 Intlevel3 6INT4BPHANTOM;PM8 Intlevel4 7INT5BPHANTOM;GISR5;PMAIntlevel5 8INT6BPHANTOM;PMCIntlevel69RESERVEDBPHANTOM;PME(AnalysisInt)10SW_INT8BPHANTOM;PM10UserS/Wint-SW_INT9BPHANTOM;PM12UserS/Wint-SW_INT10BPHANTOM;PM14UserS/Wint-SW_INT11BPHANTOM;PM16UserS/Wint-SW_INT12BPHANTOM;PM18UserS/Wint-SW_INT13BPHANTOM;PM1AUserS/Wint-SW_INT14SW_INT15SW_INT16TRAPBBBBPHANTOMPHANTOMPHANTOMPHANTOM;PM1C;PM1E;PM20;PM22UserS/WintUserS/WintUserS/WintTrapvector----NMIBPHANTOM;PM24NonmaskableInt3EMU_TRAPBPHANTOM;PM26EmulatorTrap2SW_INT20BPHANTOM;PM28UserS/Wint-SW_INT21BPHANTOM;PM2AUserS/Wint-SW_INT22BPHANTOM;PM2CUserS/Wint-SW_INT23BPHANTOM;PM2EUserS/Wint-SW_INT24BPHANTOM;PM30UserS/Wint-SW_INT25BPHANTOM;PM32UserS/Wint-SW_INT26BPHANTOM;PM34UserS/Wint-SW_INT27BPHANTOM;PM36UserS/Wint-SW_INT28BPHANTOM;PM38UserS/Wint-SW_INT29BPHANTOM;PM3AUserS/Wint-SW_INT30BPHANTOM;PM3CUserS/Wint-SW_INT31BPHANTOM;PM3EUserS/Wint-;===========================================================;pvecs;===========================================================.sect ".pvecs" ;定義子向量段PVECTORSBBBBBBBBBBBBBBBBBBBBB
PHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOM
;保留向量地址偏移量-00;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量-05;SCI_RX_ISR ;保留向量地址偏移量;SCI_TX_ISR ;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量-0a;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量-10;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量BPHANTOM;-15BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-1aBPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-20BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-25BPHANTOM;保留向量地址偏移量BT1GP_ISR;保留向量地址偏移量-0027T1PINTBPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-2aBPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量B PHANTOM ;pvectoraddroffset0x02f-T3PINTBPHANTOM;-30BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-35BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-3aBPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-3fB PHANTOM ;CANMBX_ISR;保留向量地址偏移量B PHANTOM ;保留向量地址偏移量-41;程序段;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;K1=IOPF3,K2=IOPF4,K3=IOPF5,K4=IOPF6,LED的片選信號:IOP;48個發(fā)光二極管組合程序,再無鍵按下或K418個發(fā)光二極管;K1按下則為功能模式,按鍵的次數(shù)不同顯示的發(fā)光二極管也不同;K2按下則為“+”鍵模式,按一次加一,點亮不同的發(fā)光二極管;K3按下則為移位模式,按一次往右移一位,即LED7=LED6. LED1=LED0,LED0=LED7;注意LED顯示時要關(guān)閉LCD的塊選E1E2.text_c_int0
CALLCALL
INIT ;;;;KEYLEDINITLOOP:LEDBD1:
LDPSPLKSPLKSPLKSPLKSPLKSPLKCALLCALLLDPBITBCNDLACLSUBBCNDSPLK
#DP_USER#01H,IOSFT_REG#00H,IO_COUNT#001H,IO_DATA#001H,LEDXS#00H,LEDFLAG#01H,K1FLAGINIT_TIME1KEY#DP_USERLEDBD1,TCIO_COUNT#030HWAIT,LEQ#00H,IO_COUNT
;顯示數(shù)據(jù)移位寄存器;延時計數(shù)寄存器;I/O臨時數(shù)據(jù)緩沖區(qū);LED顯示的數(shù)據(jù)K1,K2,K3按下LEDFLAG.0=0K4按下;K1標(biāo)志寄存器LDPLACLORSACL
#DP_PF2#0004H
;IOPF21;74HC273片選信號LDP#DP_USERLACLLEDXSOR#0FF00H;IOPB是輸出LDP#DP_PF2SACLPBDATDIR;送要顯示的數(shù)據(jù)LDP#DP_PF2LACLPFDATDIRAND#0FFFBH;IOPF20SACLPFDATDIR;74HC273片選信號LDP#DP_USERBITLEDFLAG,15BCNDLEDBD2,TCLACLSFLSACLLEDXSLEDXS;要顯示的數(shù)左移一位LACLSFLSACLIOSFT_REGIOSFT_REGBITIOSFT_REG,BIT8;判是否循環(huán)完一次BCNDLOOP1,TCBWAITLOOP1:LDP#DP_USERLEDBD2:SPLKLACL#01H,IOSFT_REGIO_DATAWAIT:SACLLEDXSNOPBLOOPINIT:SETCINTM;系統(tǒng)初始化;關(guān)全局中斷CLRCSXM;抑止符號擴(kuò)展CLRCOVMCLRCCNF;B0配置為數(shù)據(jù)空間LDP#0E0HSPLK#81FEH,SCSR1;CLKIN=6M,CLKOUT=24MSPLKLDP#0E8h,WDCR#0;關(guān)閉看門狗WDTSPLK#0002h,IMR;使能interrupt2SPLK#0FFFFh,IFR;清中斷標(biāo)志RETINIT_TIME1:
LDPSPLK
#DP_EVA
;1初始化子程序;1周期中斷SPLK SPLKSPLKSPLKSPLKCLRCRET
#0,GPTCONA#0BBH,T1PR#00H,T1CNT#0174CH,T1CONINTM
1比較輸出;1ms產(chǎn)生一次中斷;1計數(shù)單元;TMODE=10(連續(xù)增模式),;TPS=111X/128,,CLOCK=Internal,1KEYLEDINIT:
LDPLACLANDSACLLACLANDSACL
#DP_PF2MCRC#083FFHMCRCMCRA#000FFHMCRA
;LED初始化子程序;IOPF2--IOPF6I/O口;IOPB[0-7]I/O口LACLOR
PFDATDIR#0400H IOPF2為輸出方式ANDSACLLACLSACL
#087FBH#0FF00H
;IOPF[3-6]為輸入方式;IOPB[0-7]為輸出方式RET;********************************************************************KEY:CALLLACLBCNDCALLCALL
READKEYKEYDATAKEYRET,EQKEYDELAYREADKEY
;讀鍵盤值;ACC=0?;KEYDATA0,表示有鍵按下,延時消抖動;鍵盤軟件延時子程序BCNDKEYRET,EQLDP#DP_USER;判斷按鍵情況(考慮只有一個鍵按下)BITKEYDATA,15BCNDKEY1,NTCCALLK1;KEY1功能鍵BKEYRETKEY1:BITKEYDATA,14BCNDKEY2,NTCCALLK2;KEY2"+"鍵BKEYRETKEY2:BITKEYDATA,13BCNDKEY3,NTCCALLK3;KEY3移位"鍵BKEYRETKEY3:BITKEYDATA,12;KEY4確認(rèn)鍵BCNDKEYRET,NTCCALLK4KEYRET:LACLKEYDATA;KEYDATA4位AND#0fff0hSACLKEYDATARET;*****************讀鍵盤子程序*******************************************READKEY:;判鍵盤狀態(tài)子程序LDP#DP_PF2;DP-->7080h-70FFhLACLPFDATDIR;取出鍵值PFDATDIR.3--PFDATDIR.6RPT#2SFR;3位OR#0fff0h;4位(4個鍵)CMPL;有鍵盤按下時對應(yīng)位為低,按位取反之后為高LDP#DP_USERSACLKEYDATA;KEYDATA中RETKEYDELAY:LACC#6000;86ms(20000)30mS(6000)KEYD1:
SUBRPTNOPBCNDLDP
#1 ;#080HKEYD1,NEQ#5RET********************功能鍵子程序*****************************K1:NOPREADK1:CALLREADKEYCALLKEYDELAYLDP#DP_USER;判斷按鍵K1是否松開BITKEYDATA,15BCNDREADK1,TCLDP#DP_USER;可擴(kuò)展成16個或更多分支SPLK#01H,LEDFLAGBITK1FLAG,15BCNDGN_KEY1,TCBITK1FLAG,14BCNDGN_KEY2,TCBITK1FLAG,13BCNDGN_KEY3,TCBITK1FLAG,12BCNDGN_KEY4,TCBITK1FLAG,11BCNDGN_KEY5,TCBITK1FLAG,10BCNDGN_KEY6,TCBITK1FLAG,9BCNDGN_KEY7,TCBITK1FLAG,8BCNDGN_KEY8,TCBK1_RETGN_KEY1:GN_KEY2:GN_KEY3:GN_KEY4:GN_KEY5:
SPLK B K1_LOOP1SPLK B K1_LOOP1SPLK B K1_LOOP1SPLK B K1_LOOP1SPLK B K1_LOOP1
;K111H;K123H;K135H;K147H;K1511HGN_KEY6:SPLK#33H,IO_DATA;K1633HGN_KEY7:BSPLKK1_LOOP1#55H,IO_DATA;K1755HGN_KEY8:BSPLKK1_LOOP1#77H,IO_DATA;K1877HBK1_LOOP1K1_LOOP1:LACLK1FLAGSFLSACLK1FLAG;K1FLAG左移一位BITK1FLAG,7BCNDK1_LOOP2,TCBK1_RETK1_LOOP2:K1_RET:SPLKNOP#01H,K1FLAGRET;======="+"鍵子程序===========================K2:READK2:
NOPCALLCALLLDPBITBCND
READKEYKEYDELAY#DP_USERKEYDATA,14READK2,TC
;判斷按鍵K2是否松開LDPSPLKLACLSACLRET
#DP_USER#01,LEDFLAGIO_DATAIO_DATA
;LED左移標(biāo)志,LED對同一個數(shù)不刷新;======="移位"鍵子程序===========================K3:NOPREADK3:CALLREADKEYCALLKEYDELAYLDP#DP_USER;判斷按鍵K3是否松開BITKEYDATA,13BCNDREADK3,TCLDP#DP_USERSPLK#01H,LEDFLAGLACLSFRSACLIO_DATAIO_DATABCNDK3_LOOP1,NCLACL#80HADDIO_DATAK3_LOOP1:SACLIO_DATARET;=======確認(rèn)鍵子程序===========================K4:READK
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工反壟斷合同范本
- 農(nóng)藥生產(chǎn)架電施工合同
- 涂料施工銷售渠道合同
- 林業(yè)開發(fā)供貨施工合同范本
- 餐飲與企業(yè)合同范例
- 飯店公司合伙合同范例
- 公路工程項目合同進(jìn)度檢查內(nèi)容表格
- 集體合同約定的最低工資和當(dāng)?shù)刈畹凸べY標(biāo)準(zhǔn)
- 門診醫(yī)療器械銷售合同范例
- 贈與合同范例15篇
- (完整word版)首件檢驗管理制度
- 線路工程灌注樁施工作業(yè)指導(dǎo)書施工方案
- 重力壩的分縫與止水
- 三重管高壓旋噴樁施工工藝規(guī)程與施工方案
- 個體診所藥品清單
- PFMEA的嚴(yán)重度SOD的評分和優(yōu)先級別
- 國網(wǎng)基建國家電網(wǎng)公司輸變電工程結(jié)算管理辦法
- 100道遞等式計算(能巧算得要巧算)
- 中國地圖含省份信息可編輯矢量圖
- 路政運政交通運輸執(zhí)法人員考試題庫
- 企業(yè)技術(shù)標(biāo)準(zhǔn)化管理
評論
0/150
提交評論