微機(jī)原理與接口技術(shù)實(shí)驗(yàn)指導(dǎo)書_第1頁
微機(jī)原理與接口技術(shù)實(shí)驗(yàn)指導(dǎo)書_第2頁
微機(jī)原理與接口技術(shù)實(shí)驗(yàn)指導(dǎo)書_第3頁
微機(jī)原理與接口技術(shù)實(shí)驗(yàn)指導(dǎo)書_第4頁
微機(jī)原理與接口技術(shù)實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

單片機(jī)原理與應(yīng)用實(shí)驗(yàn)指導(dǎo)書嘉興學(xué)院南湖學(xué)院PAGE1緒論該課程為電子信息類專業(yè),尤其是電氣工程及自動(dòng)化、電子信息工程、自動(dòng)化、機(jī)電一體化專業(yè)的重要課程。是一門計(jì)算機(jī)硬軟件知識(shí)與數(shù)字信號(hào)處理知識(shí)相結(jié)合的課程。同學(xué)通過預(yù)習(xí)準(zhǔn)備與上機(jī)操作練習(xí),熟悉軟件開發(fā)方法,理解各種單片機(jī)系統(tǒng)的實(shí)現(xiàn),并掌握單片機(jī)系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)方法。本實(shí)驗(yàn)教學(xué)是高等院校電類專業(yè)為加強(qiáng)《單片機(jī)原理及應(yīng)用》課程的理論學(xué)習(xí)而開設(shè)的綜合性實(shí)踐課程,它是根據(jù)有關(guān)實(shí)驗(yàn)題目,設(shè)計(jì)相應(yīng)程序,提供實(shí)驗(yàn)的設(shè)備,同時(shí)也是對(duì)掌握有關(guān)實(shí)驗(yàn)設(shè)備的選擇,操作使用的過程。因此所開設(shè)的每個(gè)實(shí)驗(yàn)都有明確的目的和要求。MSP-EXP430G2LaunchPad(以下簡稱G2)是TI公司推出的1款MSP430開發(fā)板,它提供了具有集成仿真功能的14/20引腳DIP插座目標(biāo)板,可通過SpyBi-Wire(2線JTAG)協(xié)議對(duì)系統(tǒng)內(nèi)置的MSP430超值系列器件(G系列)進(jìn)行快速編程和調(diào)試。PAGE38實(shí)驗(yàn)一CCS使用實(shí)驗(yàn)一.實(shí)驗(yàn)?zāi)康?.了解CodeComposerStudio5.5軟件的操作環(huán)境和基本功能,了解MSP430的軟件開發(fā)過程。(1)學(xué)習(xí)創(chuàng)建工程和管理工程的方法。(2)了解基本的編譯和調(diào)試功能。(3)學(xué)習(xí)使用觀察窗口。(4)了解圖形功能的使用二.實(shí)驗(yàn)原理CCS(CodeComposerStudio)是TI公司推出的“集成開發(fā)環(huán)境”IDE(IntergratedDevelopmentEnvironment)。所謂“集成開發(fā)環(huán)境”就是處理器的所有開發(fā)都在一個(gè)軟件里完成,包括工程管理、程序編譯、代碼下載、調(diào)試等功能。CCS支持所有TI公司推出的處理器,包括MSP430、ARMCortex系列、C2000和DSP。 1.開發(fā)MSP430應(yīng)用系統(tǒng)一般需要以下幾個(gè)調(diào)試工具來完成:軟件集成開發(fā)環(huán)境(CodeComposerStudio5.5):完成系統(tǒng)的軟件開發(fā),進(jìn)行軟件和硬件仿真調(diào)試。它也是硬件調(diào)試的輔助手段。開發(fā)系統(tǒng):實(shí)現(xiàn)硬件仿真調(diào)試時(shí)與硬件系統(tǒng)的通信,控制和讀取硬件系統(tǒng)的狀態(tài)和數(shù)據(jù)。 2.CodeComposerStudio5.5主要完成系統(tǒng)的軟件開發(fā)和調(diào)試。它提供一整套的程序編制、維護(hù)、編譯、調(diào)試環(huán)境,能將匯編語言和C語言程序編譯連接生成COFF(公共目標(biāo)文件)格式的可執(zhí)行文件,并能將程序下載到目標(biāo)板上運(yùn)行調(diào)試。 3.用戶系統(tǒng)的軟件部分可以由CodeComposerStudio建立的工程文件進(jìn)行管理,工程文件一般包含以下幾種文件:-源程序文件:C語言或匯編語言文件(*.ASM或*.C)-頭文件(*.H)-命令文件(*.CMD)-庫文件(*.LIB,*.OBJ)三.實(shí)驗(yàn)設(shè)備與器材1.PC機(jī)一臺(tái);操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。 2.MSPEXP430G2553launchpad核心實(shí)驗(yàn)板一塊。3.USB連接電纜一條。四.實(shí)驗(yàn)內(nèi)容與記錄1.實(shí)驗(yàn)準(zhǔn)備(1)連接實(shí)驗(yàn)設(shè)備檢查EXP430G2553launchpad完好。(2)開啟設(shè)備①接通計(jì)算機(jī)電源,進(jìn)入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計(jì)算機(jī)的USB接口上。2.啟動(dòng)CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.03.創(chuàng)建工程(1)創(chuàng)建新的工程文件首先,新建的工程會(huì)默認(rèn)出現(xiàn)在之前選定的workspace文件夾中。點(diǎn)擊File?New?CCSProject,輸入Projectname:CCS_example,Outputtype:Excutable(可編譯執(zhí)行的,另一個(gè)可選項(xiàng)是Library),Device選擇MSP430G2553,最后選擇是“EmptyProject(withmain.c)工程建立后之后,自動(dòng)生成了一堆文件,其中我們需要操作的就是main.c文件,編寫各種代碼,點(diǎn)擊保存后可激活“關(guān)聯(lián)跳轉(zhuǎn)”。關(guān)聯(lián)跳轉(zhuǎn)非常有用,可以按住CTRL+鼠標(biāo)左鍵點(diǎn)擊任意函數(shù),就會(huì)跳轉(zhuǎn)到該函數(shù)的引用位置,按可以回到原代碼位置。如果需要添加外部文件,注意好文件路徑和頭文件包含問題。雙擊打開main.c,輸入下列程序:(2)在工程文件中添加程序文件(可選操作):在任何一個(gè)工程中,都包含main.c文件,還可以有很多其他文件。在ProjectExplorer樹形目錄中,可以通過新建或者直接COPY的方法增加文件夾或c文件、h文件。(3)編譯連接工程:程序編寫完成后,點(diǎn)擊即可開始編譯。根據(jù)圖中所示的編譯錯(cuò)誤提示窗逐條修改錯(cuò)誤。(4)運(yùn)行調(diào)試:點(diǎn)擊行下載和仿真了,耐心等待后,得到仿真調(diào)試界面。完成后,代碼被下載到G2單片機(jī)里,點(diǎn)擊開始運(yùn)行程序。(4)觀察數(shù)據(jù):在仿真運(yùn)行后,點(diǎn)擊ToolàGraphàSingleTime設(shè)置參數(shù)如下: 在斷點(diǎn)位置點(diǎn)擊右鍵,編輯斷點(diǎn)屬性。將Action改為RefreshAllWindows,這樣就可以連續(xù)更新波形。分別把DisplayDataSize設(shè)為1024和128的顯示效果五.實(shí)驗(yàn)小結(jié)與思考題總結(jié)CCS編譯調(diào)試環(huán)境在使用上的特點(diǎn),聯(lián)系其它使用過的編譯器,找出它們之間相似的功能。進(jìn)一步掌握其它在實(shí)驗(yàn)中沒有用到的功能選項(xiàng)和編譯、調(diào)試技巧六.實(shí)驗(yàn)報(bào)告要求1.實(shí)驗(yàn)?zāi)康?.實(shí)驗(yàn)的基本原理3.實(shí)驗(yàn)程序的主要部分4.實(shí)驗(yàn)結(jié)果及問題分析

實(shí)驗(yàn)二MSP430系統(tǒng)時(shí)鐘實(shí)驗(yàn)一.實(shí)驗(yàn)?zāi)康?.了解MSP430系統(tǒng)時(shí)鐘工作原理。2.掌握MSP430系統(tǒng)時(shí)鐘的配置方法。二.實(shí)驗(yàn)原理現(xiàn)代單片機(jī)的制造工藝都差不多,靠電子元件本身節(jié)能的潛力非常有限。單片機(jī)的低功耗主要是依靠間歇工作實(shí)現(xiàn)的,而間歇工作的方法就是啟停系統(tǒng)時(shí)鐘。如果像普通51單片機(jī)那樣只有一個(gè)時(shí)鐘,關(guān)掉時(shí)鐘意味著單片機(jī)全面停工,節(jié)能的同時(shí)也沒法正常使用了。所以出于低功耗的需要,MSP430單片機(jī)工作的系統(tǒng)時(shí)鐘被分為了MCLK、SMCLK和ACLK三個(gè),可以根據(jù)需要關(guān)閉其中的一個(gè)幾個(gè)或全部。MCU內(nèi)需要時(shí)鐘的單元包括CPU和部分片內(nèi)外設(shè),三種時(shí)鐘的功能區(qū)別如下:1)MCLK:主時(shí)鐘(MainsystemClock),專為CPU運(yùn)行提供的時(shí)鐘。MCLK頻率配置的越高,CPU執(zhí)行的速度越快。雖然CPU速度越快功耗也越高,但高頻率的MCLK可以讓CPU工作時(shí)間更短。所以正確的低功耗設(shè)計(jì)并不是要盡量降低MCLK,而是在不用CPU時(shí)立刻關(guān)閉MCLK。在大部分應(yīng)用中,需要CPU運(yùn)算的時(shí)間都非常短,所以,間歇開啟MCLK(喚醒CPU)的方法節(jié)能效果非常明顯。2)SMCLK:子系統(tǒng)時(shí)鐘(Sub-mainClock),專為一些需要高速時(shí)鐘的片內(nèi)外設(shè)提供服務(wù),比如定時(shí)器和ADC采樣等。當(dāng)CPU休眠時(shí),只要SMCLK開啟,定時(shí)器和ADC仍可工作(一般待片內(nèi)外設(shè)完成工作后觸發(fā)中斷,喚醒CPU去做后續(xù)工作)。3)ACLK:輔助時(shí)鐘(AuxillaryClock),輔助時(shí)鐘的頻率很低,所以即使一直開啟功耗也不大,當(dāng)然關(guān)掉也是可以的。輔助時(shí)鐘可以供給那些只需低頻時(shí)鐘的片內(nèi)外設(shè),比如LCD控制器,還可用于產(chǎn)生節(jié)拍時(shí)基,與定時(shí)器配合間歇喚醒CPU。MCLK、SMCLK和ACLK三者關(guān)系用更形象的比喻就是主力部隊(duì)(MCLK)、先頭部隊(duì)(SMCLK)、警戒哨兵(ACLK)的關(guān)系。1)需要用主力部隊(duì)的時(shí)候不多,一般情況都處于休整狀態(tài),以節(jié)約“給養(yǎng)”(功耗)。2)能只用先頭部隊(duì)解決的問題,就別動(dòng)用主力,待先頭部隊(duì)完成自己的任務(wù)后,再請主力出馬。3)當(dāng)沒有實(shí)際“敵人”的時(shí)候,主力部隊(duì)和先頭部隊(duì)都可以休整,但是要放上哨兵作為警戒,發(fā)現(xiàn)“敵人”可以隨時(shí)喚醒主力部隊(duì)。如圖,MSP-EXP430G2開發(fā)板上P1.3接了一個(gè)按鍵,P1.0接了LED(用跳線帽連接),下面我們將編寫一段代碼,通過長延時(shí)控制P1.0LED亮滅,可以通過按鍵改變DCO頻率,隨著DCO改變,LED亮滅頻率發(fā)生變化。原理:軟件延時(shí)的時(shí)長與時(shí)鐘頻率成反比,改變DCO頻率自然就會(huì)改變延時(shí),從而引起LED閃爍頻率的變化。三.實(shí)驗(yàn)設(shè)備與器材1.PC機(jī)一臺(tái);操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。2.MSPEXP430G2553launchpad核心實(shí)驗(yàn)板一塊。3.USB連接電纜一條。四.實(shí)驗(yàn)內(nèi)容與記錄1.實(shí)驗(yàn)準(zhǔn)備(1)連接實(shí)驗(yàn)設(shè)備檢查EXP430G2553launchpad完好。(2)開啟設(shè)備①接通計(jì)算機(jī)電源,進(jìn)入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計(jì)算機(jī)的USB接口上。(3)啟動(dòng)CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.0”2.實(shí)驗(yàn)步驟僅使用MSP-EXP430G2開發(fā)板進(jìn)行實(shí)驗(yàn)插上P1.0和P1.6的LED跳線啟動(dòng)CCS,打開4_KEY_LED_Change_DCO工程下載并運(yùn)行仿真程序觀測LED閃爍頻率按鍵后,LED閃爍頻率變快每4次按鍵后,LED閃爍頻率變回初始狀態(tài)。3.源代碼/**Key_LED_Change_DCO.c*硬件描述:LaunchpadG2553開發(fā)板上P1.3接了一個(gè)按鍵,P1.0接了LED(用跳線帽連接)。*功能描述:LED依靠長延時(shí)閃爍,每次按下按鍵后,系統(tǒng)時(shí)鐘按1/8/12/16MHz循環(huán)改變,LED閃爍速度變化*Createdon:2013-4-8*Author:Administrator*/#include"MSP430G2553.h"http://在main()函數(shù)前提前申明子函數(shù)voidP1_IODect(); //P1口的外部中斷事件檢測函數(shù)voidP13_Onclick(); //P1.3按鍵的中斷事件處理函數(shù)voidGPIO_Init(); //GPIO初始化函數(shù)voidmain(void){ WDTCTL=WDTPW+WDTHOLD; //關(guān)閉看門狗定時(shí)器 GPIO_Init(); //初始化GPIO _enable_interrupts(); //等同_EINT,使能總中斷 while(1) { __delay_cycles(1000000); //與CPU時(shí)鐘相關(guān)的長延時(shí)// __delay_cycles(100); //與CPU時(shí)鐘相關(guān)的長延時(shí) P1OUT^=BIT0; //LED亮滅狀態(tài)改變 P1OUT^=BIT6; //LED亮滅狀態(tài)改變 }}/***************************************************************************名稱:GPIO_Init()*功能:設(shè)定按鍵和LED控制IO的方向,啟用按鍵IO的上拉電阻*入口參數(shù):無*出口參數(shù):無*說明:無*范例:無*************************************************************************/voidGPIO_Init(){ //設(shè)定P1.0和P1.6的輸出初始值 P1DIR|=BIT0+BIT6; //設(shè)定P1.0為輸出 P1OUT|=BIT0+BIT6; //設(shè)定P1.0初值 //配合機(jī)械按鍵,啟用內(nèi)部上拉電阻 P1REN|=BIT3; //啟用P1.3內(nèi)部上下拉電阻 P1OUT|=BIT3; //將電阻設(shè)置為上拉 //配置P1.3中斷參數(shù) P1DIR&=~BIT3;//P1.3設(shè)為輸入(可省略) P1IES|=BIT3;//P1.3設(shè)為下降沿中斷 P1IE|=BIT3;//允許P1.3中斷}/***************************************************************************名稱:PORT1_ISR()*功能:響應(yīng)P1口的外部中斷服務(wù)*入口參數(shù):無*出口參數(shù):無*說明:P1.0~P1.8共用了PORT1中斷,所以在PORT1_ISR()中必須查詢標(biāo)志位P1IFG才能知道* 具體是哪個(gè)IO引發(fā)了外部中斷。P1IFG必須手動(dòng)清除,否則將持續(xù)引發(fā)PORT1中斷。*范例:無*************************************************************************/#pragmavector=PORT1_VECTOR__interruptvoidPORT1_ISR(void){ //啟用Port1事件檢測函數(shù) P1_IODect(); //檢測通過,則會(huì)調(diào)用事件處理函數(shù) P1IFG=0; //退出中斷前必須手動(dòng)清除IO口中斷標(biāo)志}/***************************************************************************名稱:P1_IODect()*功能:判斷具體引發(fā)中斷的IO,并調(diào)用相應(yīng)IO的中斷事件處理函數(shù)*入口參數(shù):無*出口參數(shù):無*說明:該函數(shù)兼容所有8個(gè)IO的檢測,請根據(jù)實(shí)際輸入IO激活“檢測代碼”。* 本例中,僅有P1.3被用作輸入IO,所以其他7個(gè)IO的“檢測代碼”沒有被“激活”。*范例:無**********************************************************************/voidP1_IODect(){ unsignedintPush_Key=0; //排除輸出IO的干擾后,鎖定唯一被觸發(fā)的中斷標(biāo)志位 Push_Key=P1IFG&(~P1DIR); //延時(shí)一段時(shí)間,避開機(jī)械抖動(dòng)區(qū)域 __delay_cycles(10000); //消抖延時(shí) //判斷按鍵狀態(tài)是否與延時(shí)前一致 if((P1IN&Push_Key)==0) //如果該次按鍵確實(shí)有效{ //判斷具體哪個(gè)IO被按下,調(diào)用該IO的事件處理函數(shù) switch(Push_Key){// caseBIT0: P10_Onclick(); break;// caseBIT1: P11_Onclick(); break;// caseBIT2: P12_Onclick(); break; caseBIT3: P13_Onclick(); break;// caseBIT4: P14_Onclick(); break;// caseBIT5: P15_Onclick(); break;// caseBIT6: P16_Onclick(); break;// caseBIT7: P17_Onclick(); break; default: break; //任何情況下均加上default }}}/***************************************************************************名稱:P13_Onclick()*功能:P1.3的中斷事件處理函數(shù),即當(dāng)P1.3鍵被按下后,下一步干什么*入口參數(shù):無*出口參數(shù):無*說明:使用事件處理函數(shù)的形式,可以增強(qiáng)代碼的移植性和可讀性*范例:無**************************************************************************/voidP13_Onclick(){ //Freq僅在P13_Onclick()中使用,但是又需要退出函數(shù)時(shí)不被清除 staticunsignedintFreq=0; //靜態(tài)全局變量的典型應(yīng)用場合 //變量從0~3循環(huán)移位 Freq++; if(Freq>3) Freq=0; //根據(jù)Freq的值,改變DCO設(shè)定頻率 switch(Freq){ case0: DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; break; case1: DCOCTL=CALDCO_8MHZ; BCSCTL1=CALBC1_8MHZ; break; case2: DCOCTL=CALDCO_12MHZ; BCSCTL1=CALBC1_12MHZ;break; case3: DCOCTL=CALDCO_16MHZ; BCSCTL1=CALBC1_16MHZ;break; default: break; }}五.實(shí)驗(yàn)小結(jié)與思考題總結(jié)MSP430系統(tǒng)時(shí)鐘工作原理及配置方法。進(jìn)一步掌握其它在實(shí)驗(yàn)中沒有用到的功能選項(xiàng)和編譯、調(diào)試技巧。六.實(shí)驗(yàn)報(bào)告要求1.實(shí)驗(yàn)?zāi)康?.實(shí)驗(yàn)的基本原理3.實(shí)驗(yàn)程序的主要部分4.實(shí)驗(yàn)結(jié)果及問題分析

實(shí)驗(yàn)三MSP430中斷實(shí)驗(yàn)一.實(shí)驗(yàn)?zāi)康?.了解MSP430中斷工作原理。2.掌握MSP430中斷時(shí)鐘的配置方法。二.實(shí)驗(yàn)原理如圖,MSP-EXP430G2開發(fā)板上P1.3接了一個(gè)按鍵,P1.0和P1.6接了LED(用跳線帽連接),下面我們將編寫一段代碼,兩個(gè)LED保持1亮1滅,每次按下P1.3后,LED交換亮滅狀態(tài),要求不阻塞CPU。三.實(shí)驗(yàn)設(shè)備與器材1.PC機(jī)一臺(tái);操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。2.MSPEXP430G2553launchpad核心實(shí)驗(yàn)板一塊。3.USB連接電纜一條。四.實(shí)驗(yàn)內(nèi)容與記錄1.實(shí)驗(yàn)準(zhǔn)備(1)連接實(shí)驗(yàn)設(shè)備檢查EXP430G2553launchpad完好。(2)開啟設(shè)備①接通計(jì)算機(jī)電源,進(jìn)入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計(jì)算機(jī)的USB接口上。(3)啟動(dòng)CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.02.實(shí)驗(yàn)步驟僅使用MSP-EXP430G2開發(fā)板進(jìn)行實(shí)驗(yàn)插上P1.0和P1.6的LED跳線啟動(dòng)CCS,打開5_Interrupt_Key_LED工程下載并運(yùn)行仿真程序觀測初始時(shí)兩個(gè)LED的亮滅狀態(tài)每次按鍵后,兩個(gè)LED切換亮滅3.源代碼/**Interrupt_Key_LED.c*硬件描述:LaunchpadG2553開發(fā)板上P1.3接了一個(gè)按鍵,P1.0和P1.6各接了1個(gè)LED(用跳線帽連接)。*功能描述:按鍵按下的瞬間,兩個(gè)LED切換亮滅狀態(tài)*Createdon:2013-4-8*Author:Administrator*/#include"MSP430G2553.h"http://在main函數(shù)前提前申明函數(shù)voidP1_IODect() ;voidP13_Onclick();voidGPIO_init();voidmain(void){ WDTCTL=WDTPW+WDTHOLD; //關(guān)狗 GPIO_init(); //IO初始化 _enable_interrupts(); //使能總中斷 _bis_SR_register(LPM3_bits); //休眠}/*******************************************************************************************************名稱:GPIO_Init()*功能:設(shè)定按鍵和LED控制IO的方向,啟用按鍵IO的上拉電阻*入口參數(shù):無*出口參數(shù):無*說明:無*范例:無******************************************************************************************************/voidGPIO_init(){ //設(shè)定P1.0和P1.6的輸出初始值 P1DIR|=BIT0+BIT6; //設(shè)定P1.0和P1.6為輸出 P1OUT|=BIT0; //設(shè)定P1.0初值 P1OUT&=~BIT6; //設(shè)定P1.6初值 //配合機(jī)械按鍵,啟用內(nèi)部上拉電阻 P1REN|=BIT3; //啟用P1.3內(nèi)部上下拉電阻 P1OUT|=BIT3; //將電阻設(shè)置為上拉 //配置P1.3中斷參數(shù) P1DIR&=~BIT3;//P1.3設(shè)為輸入(可省略) P1IES|=BIT3;//P1.3設(shè)為下降沿中斷 P1IE|=BIT3;//允許P1.3中斷}/*******************************************************************************************************名稱:PORT1_ISR()*功能:響應(yīng)P1口的外部中斷服務(wù)*入口參數(shù):無*出口參數(shù):無*說明:P1.0~P1.8共用了PORT1中斷,所以在PORT1_ISR()中必須查詢標(biāo)志位P1IFG才能知道* 具體是哪個(gè)IO引發(fā)了外部中斷。P1IFG必須手動(dòng)清除,否則將持續(xù)引發(fā)PORT1中斷。*范例:無******************************************************************************************************/#pragmavector=PORT1_VECTOR__interruptvoidPORT1_ISR(void){ //啟用Port1事件檢測函數(shù) P1_IODect(); //檢測通過,則會(huì)調(diào)用事件處理函數(shù) P1IFG=0; //退出中斷前必須手動(dòng)清除IO口中斷標(biāo)志}/*******************************************************************************************************名稱:P1_IODect()*功能:判斷具體引發(fā)中斷的IO,并調(diào)用相應(yīng)IO的中斷事件處理函數(shù)*入口參數(shù):無*出口參數(shù):無*說明:該函數(shù)兼容所有8個(gè)IO的檢測,請根據(jù)實(shí)際輸入IO激活“檢測代碼”。* 本例中,僅有P1.3被用作輸入IO,所以其他7個(gè)IO的“檢測代碼”沒有被“激活”。*范例:無******************************************************************************************************/voidP1_IODect(){ unsignedintPush_Key=0; //排除輸出IO的干擾后,鎖定唯一被觸發(fā)的中斷標(biāo)志位 Push_Key=P1IFG&(~P1DIR); //延時(shí)一段時(shí)間,避開機(jī)械抖動(dòng)區(qū)域 __delay_cycles(10000); //消抖延時(shí) //判斷按鍵狀態(tài)是否與延時(shí)前一致 if((P1IN&Push_Key)==0) //如果該次按鍵確實(shí)有效{ //判斷具體哪個(gè)IO被按下,調(diào)用該IO的事件處理函數(shù) switch(Push_Key){// caseBIT0: P10_Onclick(); break;// caseBIT1: P11_Onclick(); break;// caseBIT2: P12_Onclick(); break; caseBIT3: P13_Onclick(); break;// caseBIT4: P14_Onclick(); break;// caseBIT5: P15_Onclick(); break;// caseBIT6: P16_Onclick(); break;// caseBIT7: P17_Onclick(); break; default: break; //任何情況下均加上default }}}/*******************************************************************************************************名稱:P13_Onclick()*功能:P1.3的中斷事件處理函數(shù),即當(dāng)P1.3鍵被按下后,下一步干什么*入口參數(shù):無*出口參數(shù):無*說明:使用事件處理函數(shù)的形式,可以增強(qiáng)代碼的移植性和可讀性*范例:無******************************************************************************************************/voidP13_Onclick(){ //翻轉(zhuǎn)IO電平 P1OUT^=BIT0; P1OUT^=BIT6; }五.實(shí)驗(yàn)小結(jié)與思考題總結(jié)MSP430中斷工作原理及配置方法。進(jìn)一步掌握其它在實(shí)驗(yàn)中沒有用到的功能選項(xiàng)和編譯、調(diào)試技巧。六.實(shí)驗(yàn)報(bào)告要求1.實(shí)驗(yàn)?zāi)康?.實(shí)驗(yàn)的基本原理3.實(shí)驗(yàn)程序的主要部分4.實(shí)驗(yàn)結(jié)果及問題分析

實(shí)驗(yàn)四MSP430定時(shí)器實(shí)驗(yàn)—基于PWM的LED調(diào)光一.實(shí)驗(yàn)?zāi)康?.了解MSP430定時(shí)器工作原理。2.掌握MSP430定時(shí)器的使用方法。二.實(shí)驗(yàn)原理1.定時(shí)器原理定時(shí)器在任何單片機(jī)中都具有極其重要的作用。我們都知道單片機(jī)是順序執(zhí)行指令,我們把CPU看成是人,一個(gè)每次只能干一件事的人。沒有定時(shí)器的幫助,人就會(huì)像在監(jiān)獄服刑一樣,早上起床,吃早飯,干苦力、放風(fēng)、吃晚飯、睡覺、早上起床...偶爾有的變數(shù)就是有人探監(jiān)(外部中斷)。可怕的是,如果吃飯時(shí)“耳背”,獄警喊停沒聽見,那作為犯人就必須一直吃下去,干苦力時(shí)出了岔子就更悲催了。定時(shí)器是什么呢?實(shí)際就是能夠?qū)r(shí)鐘進(jìn)行計(jì)數(shù)的計(jì)數(shù)器,類似我們的鬧鐘。定時(shí)器的出現(xiàn)才使單片機(jī)成為幾乎無所不能的完整的自由人。一個(gè)自由主人的一天是這樣的:1)起床:相當(dāng)于main循環(huán)的起始。2)刷牙:相當(dāng)于執(zhí)行各種inital操作,此task主人(CPU)必須親力親為,并且不能被其他事打擾。3)燒水:代表不需要人(CPU)一直干的task,主人灌好燒水壺后,只需打開灶臺(tái)火焰即可。不巧的是燒水壺并沒有水燒好的鳴響器(外設(shè)中斷),怎么辦?最傻的辦法是主人得一直盯著看燒水的全過程。但是有定時(shí)器,主人就不必要這么做了。因?yàn)闊靡粔厮臅r(shí)間基本是知道的,主人設(shè)定好鬧鐘就可以去看報(bào)紙(其他任務(wù))或者打瞌睡了(休眠)。待鬧鐘響起,人去關(guān)火,泡咖啡...4)敲門:有訪客敲門相當(dāng)于突發(fā)事件event。假設(shè)主人住在大莊園里,又恰巧沒有門鈴(外部中斷)怎么辦?難道要主人成天蹲在大門口嗎?不用,有定時(shí)器呢。假定訪客敲門都最少會(huì)敲5分鐘,主人將定時(shí)器設(shè)定為5分鐘響一次,每5分鐘去門口看一次,這樣就不會(huì)錯(cuò)過客人來訪了。其他時(shí)間,主人可以打dota或者發(fā)呆。5)吃藥:假如主人每隔1小時(shí)需要吃藥一次,這相當(dāng)于對(duì)時(shí)間要求嚴(yán)格的task,按理說這不就是用個(gè)鬧鐘就完了嗎。憋屈的是,主人只有1個(gè)鬧鐘,已經(jīng)用在“接客”上了,怎么辦?沒關(guān)系,主人可以數(shù)定時(shí)5分鐘的鬧鐘響了多少次,數(shù)夠12次就吃藥。類似的方法,主人可以數(shù)著鬧鐘的“節(jié)拍”處理其他對(duì)時(shí)間要求嚴(yán)格的task。6)有人來訪:好了,5分鐘去大門口看一次,真有訪客了。訪客分兩種情況,送快遞的(只需標(biāo)記下,可以后續(xù)處理的event)或是上門拜訪的(需要立刻接待處理的event)。因?yàn)閷?duì)于快遞包裹,主人驗(yàn)貨收下即可(寫全局變量標(biāo)志位),以后有時(shí)間再研究包裹內(nèi)的物品。而上門拜訪的客人,主人立刻親自接待(中斷子函數(shù),占用CPU)。7)客人賴著不走:客人腦子進(jìn)水了說個(gè)沒完沒了(程序跑飛或外設(shè)錯(cuò)誤),影響主人正常生活了,怎么辦?沒事,幸好有看門狗定時(shí)器在,每隔設(shè)定時(shí)間,必須喂狗(重置看門狗定時(shí)器),否則設(shè)定時(shí)間一到,看門狗該咬人了(重啟單片機(jī))。主人的一天要重新開始了??偨Y(jié)一下主人的一天,一個(gè)住著大莊園的主人,卻沒有仆人(有的話成雙CPU了)。還非常憋屈的沒有自動(dòng)報(bào)警的燒水壺,莊園大門沒有門鈴,吃藥都沒有專人伺候。但是依靠鬧鐘(定時(shí)器),主人還是可以愜意的生活,有時(shí)間打dota,有時(shí)間打盹。甚至當(dāng)“天下大亂”的時(shí)候,還有看門狗可以讓一天重來。定時(shí)器作為單片機(jī)中最有用的片內(nèi)外設(shè),就是為彌補(bǔ)CPU順序執(zhí)行程序這個(gè)“死腦經(jīng)”缺陷而量身定做的。學(xué)會(huì)使用定時(shí)器的思想,才算真正是單片機(jī)入了門。2.硬件原理如圖,MSP-EXP430G2開發(fā)板上P1.3接了一個(gè)按鍵,P1.6為TA輸出口并接了LED(用跳線帽連接),下面我們將編寫一段代碼,通過按鍵改變PWM占空比,從而改變LED亮度。三.實(shí)驗(yàn)設(shè)備與器材1.PC機(jī)一臺(tái);操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。2.MSPEXP430G2553launchpad核心實(shí)驗(yàn)板一塊。3.USB連接電纜一條。四.實(shí)驗(yàn)內(nèi)容與記錄1.實(shí)驗(yàn)準(zhǔn)備(1)連接實(shí)驗(yàn)設(shè)備檢查EXP430G2553launchpad完好。(2)開啟設(shè)備①接通計(jì)算機(jī)電源,進(jìn)入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計(jì)算機(jī)的USB接口上。(3)啟動(dòng)CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.02.實(shí)驗(yàn)步驟僅使用MSP-EXP430G2開發(fā)板進(jìn)行實(shí)驗(yàn)插上P1.0的LED跳線啟動(dòng)CCS,打開6_PWM_LED工程下載并運(yùn)行仿真程序觀測初始時(shí)LED的亮度(滅)每次按鍵后,LED變亮每10次按鍵以后,LED恢復(fù)初始亮度3.源代碼/**PWM_LED.c*硬件描述:LaunchpadG2553開發(fā)板上P1.3接了一個(gè)按鍵,P1.6各接了1個(gè)綠光LED(用跳線帽連接)。*功能描述:按鍵按下的瞬間,LED亮度變化。需調(diào)用TA_PWM庫函數(shù)。*Createdon:2013-4-8*Author:Administrator*/#include"MSP430G2553.h"#include"TA_PWM.h"voidP1_IODect();voidP13_Onclick();voidGPIO_init();voidmain(void){ WDTCTL=WDTPW+WDTHOLD; //關(guān)狗 //初始化TA0為ACLK輸入,不分頻,通道1超前PWM,通道2關(guān)閉 TA0_PWM_Init('A',1,'F',0); TA0_PWM_SetPeriod(500); //設(shè)定PWM周期 GPIO_init(); //初始化GPIO _enable_interrupts(); //使能總中斷_bis_SR_register(LPM3_bits); //LPM3方式休眠}/*******************************************************************************************************名稱:GPIO_Init()*功能:設(shè)定按鍵和LED控制IO的方向,啟用按鍵IO的上拉電阻*入口參數(shù):無*出口參數(shù):無*說明:無*范例:無******************************************************************************************************/voidGPIO_init(){ //TA0_PWM_Init()自動(dòng)設(shè)置TA口(P1.6) //配合機(jī)械按鍵,啟用內(nèi)部上拉電阻 P1REN|=BIT3; //啟用P1.3內(nèi)部上下拉電阻 P1OUT|=BIT3; //將電阻設(shè)置為上拉 //配置P1.3中斷參數(shù) P1DIR&=~BIT3;//P1.3設(shè)為輸入(可省略) P1IES|=BIT3;//P1.3設(shè)為下降沿中斷 P1IE|=BIT3;//允許P1.3中斷}/*******************************************************************************************************名稱:PORT1_ISR()*功能:響應(yīng)P1口的外部中斷服務(wù)*入口參數(shù):無*出口參數(shù):無*說明:P1.0~P1.8共用了PORT1中斷,所以在PORT1_ISR()中必須查詢標(biāo)志位P1IFG才能知道* 具體是哪個(gè)IO引發(fā)了外部中斷。P1IFG必須手動(dòng)清除,否則將持續(xù)引發(fā)PORT1中斷。*范例:無******************************************************************************************************/#pragmavector=PORT1_VECTOR__interruptvoidPORT1_ISR(void){ //啟用Port1事件檢測函數(shù) P1_IODect(); //檢測通過,則會(huì)調(diào)用事件處理函數(shù) P1IFG=0; //退出中斷前必須手動(dòng)清除IO口中斷標(biāo)志}/*******************************************************************************************************名稱:P1_IODect()*功能:判斷具體引發(fā)中斷的IO,并調(diào)用相應(yīng)IO的中斷事件處理函數(shù)*入口參數(shù):無*出口參數(shù):無*說明:該函數(shù)兼容所有8個(gè)IO的檢測,請根據(jù)實(shí)際輸入IO激活“檢測代碼”。* 本例中,僅有P1.3被用作輸入IO,所以其他7個(gè)IO的“檢測代碼”沒有被“激活”。*范例:無******************************************************************************************************/voidP1_IODect(){ unsignedintPush_Key=0; //排除輸出IO的干擾后,鎖定唯一被觸發(fā)的中斷標(biāo)志位 Push_Key=P1IFG&(~P1DIR); //延時(shí)一段時(shí)間,避開機(jī)械抖動(dòng)區(qū)域 __delay_cycles(10000); //消抖延時(shí) //判斷按鍵狀態(tài)是否與延時(shí)前一致 if((P1IN&Push_Key)==0) //如果該次按鍵確實(shí)有效{ //判斷具體哪個(gè)IO被按下,調(diào)用該IO的事件處理函數(shù) switch(Push_Key){// caseBIT0: P10_Onclick(); break;// caseBIT1: P11_Onclick(); break;// caseBIT2: P12_Onclick(); break; caseBIT3: P13_Onclick(); break;// caseBIT4: P14_Onclick(); break;// caseBIT5: P15_Onclick(); break;// caseBIT6: P16_Onclick(); break;// caseBIT7: P17_Onclick(); break; default: break; //任何情況下均加上default }}}/*******************************************************************************************************名稱:P13_Onclick()*功能:P1.3的中斷事件處理函數(shù),即當(dāng)P1.3鍵被按下后,下一步干什么*入口參數(shù):無*出口參數(shù):無*說明:使用事件處理函數(shù)的形式,可以增強(qiáng)代碼的移植性和可讀性*范例:無******************************************************************************************************/voidP13_Onclick() //P1.3的事件處理函數(shù){ //Bright在函數(shù)執(zhí)行完后不能被清空,所以得設(shè)為靜態(tài)局部變量 staticunsignedintBright=0; //循環(huán)改變PWM占空比 Bright=Bright+40; if(Bright>=400) //占空比最大40%,更亮的區(qū)間視覺變化不明顯 Bright=0; TA0_PWM_SetPermill(1,Bright); //調(diào)用庫函數(shù),更新PWM占空比 _nop(); }五.實(shí)驗(yàn)小結(jié)與思考題總結(jié)MSP430定時(shí)器工作原理及配置方法。進(jìn)一步掌握其它在實(shí)驗(yàn)中沒有用到的功能選項(xiàng)和編譯、調(diào)試技巧。六.實(shí)驗(yàn)報(bào)告要求1.實(shí)驗(yàn)?zāi)康?.實(shí)驗(yàn)的基本原理3.實(shí)驗(yàn)程序的主要部分4.實(shí)驗(yàn)結(jié)果及問題分析

實(shí)驗(yàn)五MSP430看門狗實(shí)驗(yàn)—呼吸燈一.實(shí)驗(yàn)?zāi)康?.了解MSP430看門狗工作原理。2.掌握MSP430看門狗的使用方法。二.實(shí)驗(yàn)原理1.WDT原理WDT(WatchDogTimer)俗稱看門狗,是單片機(jī)非常重要的一個(gè)片內(nèi)外設(shè)。早期,普通51單片機(jī)內(nèi)部沒有它,則有使用專門的外擴(kuò)看門狗芯片。在電子產(chǎn)品中,被稱為“狗”的就是忠誠可靠的代名詞,比如電子狗(雷達(dá)測速狗)。什么是看門狗呢?看門狗實(shí)際就是一個(gè)定時(shí)器,只不過在定時(shí)到達(dá)時(shí),可以復(fù)位單片機(jī)。這個(gè)功能對(duì)于實(shí)際工程應(yīng)用中的產(chǎn)品非常有用。在很多應(yīng)用中,單片機(jī)要經(jīng)年累月的連續(xù)工作,如果期間單片機(jī)由于各種意外死機(jī)(俗稱跑飛),則單片機(jī)就經(jīng)年累月的不工作了,有了看門狗,就可以避免這種意外的發(fā)生??撮T狗的原理就8個(gè)字“定時(shí)喂狗,狗餓復(fù)位”:1)單片機(jī)都是循環(huán)工作的,比如完成整個(gè)循環(huán)所需時(shí)間最長不超過0.5秒,則可以把看門狗定時(shí)器的定時(shí)值設(shè)為1秒,在主循環(huán)中加入看門狗定時(shí)值清零的代碼(俗稱喂狗)。2)這樣一來,假如程序運(yùn)行正常,則總會(huì)在看門狗定時(shí)器到點(diǎn)前“喂狗”,從而避免單片機(jī)復(fù)位。3)如果程序死機(jī),則不會(huì)及時(shí)“喂狗”,單片機(jī)復(fù)位。復(fù)位后看門狗依然默認(rèn)開啟,繼續(xù)守護(hù)著程序的正常運(yùn)行。2.硬件原理呼吸燈就是亮度漸變的LED燈,普通LED可以用TA輸出PWM來控制亮度,通過WDT定時(shí)中斷來改變亮度,從而實(shí)現(xiàn)呼吸燈效果。如圖7.4所示,G2板可以利用P1.6(PWM輸出口)控制LED來實(shí)現(xiàn)呼吸燈。三.實(shí)驗(yàn)設(shè)備與器材1.PC機(jī)一臺(tái);操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。2.MSPEXP430G2553launchpad核心實(shí)驗(yàn)板一塊。3.USB連接電纜一條。四.實(shí)驗(yàn)內(nèi)容與記錄1.實(shí)驗(yàn)準(zhǔn)備(1)連接實(shí)驗(yàn)設(shè)備檢查EXP430G2553launchpad完好。(2)開啟設(shè)備①接通計(jì)算機(jī)電源,進(jìn)入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計(jì)算機(jī)的USB接口上。(3)啟動(dòng)CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.02.實(shí)驗(yàn)步驟僅使用MSP-EXP430G2開發(fā)板進(jìn)行實(shí)驗(yàn)插上P1.6的LED跳線啟動(dòng)CCS,打開7_1_Breath_Lamp工程下載并運(yùn)行仿真程序觀測LED的亮度隨時(shí)間的變化3.源代碼/**Breath_Lamp.c*硬件描述:P1.6(PWM輸出口)接了1個(gè)綠光LED(用跳線帽連接)。*功能描述:LED亮度隨時(shí)間漸漸變量又漸漸變暗,人稱“呼吸燈”。需調(diào)用TA_PWM庫函數(shù)。*Createdon:2013-4-8*Author:Administrator*/#include"MSP430G2553.h"#include"TA_PWM.h"#include"Breath_Lamp_Event.h"#include"Breath_Lamp_Global.h"#definePWM_PERIOD100voidmain(void){ WDTCTL=WDTPW+WDTHOLD; //初始化TA定時(shí)器 TA0_PWM_Init('A',1,'F',0); //ACLK,不分頻,TA0.1輸出超前PWM TA0_PWM_SetPeriod(PWM_PERIOD); //設(shè)定PWM的周期 //初始化看門狗定時(shí)器 WDTCTL=WDT_ADLY_16; //WDT設(shè)為16ms定時(shí)器模式 IE1|=WDTIE; //使能寄存器IE1中相應(yīng)的WDT中斷位 _enable_interrupts(); //使能總中斷 _bis_SR_register(LPM3_bits);}/***************************************************************************名稱:WDT_ISR()*功能:響應(yīng)WDT定時(shí)中斷服務(wù)*入口參數(shù):無*出口參數(shù):無*說明:WDT定時(shí)中斷獨(dú)占中斷向量,所以無需進(jìn)一步判斷中斷事件,也無需人工清除標(biāo)志位。*所以,在WDT定時(shí)中斷服務(wù)子函數(shù)中,直接調(diào)用WDT事件處理函數(shù)就可以了。*范例:無*************************************************************************/#pragmavector=WDT_VECTOR //WatchdogTimerinterruptserviceroutine__interruptvoidWDT_ISR(void){ WDT_Ontime();}五.實(shí)驗(yàn)小結(jié)與思考題總結(jié)MSP430看門狗工作原理及配置方法。進(jìn)一步掌握其它在實(shí)驗(yàn)中沒有用到的功能選項(xiàng)和編譯、調(diào)試技巧。六.實(shí)驗(yàn)報(bào)告要求1.實(shí)驗(yàn)?zāi)康?.實(shí)驗(yàn)的基本原理3.實(shí)驗(yàn)程序的主要部分4.實(shí)驗(yàn)結(jié)果及問題分析

實(shí)驗(yàn)六MSP430鍵盤實(shí)驗(yàn)—長短鍵識(shí)別一.實(shí)驗(yàn)?zāi)康?.了解MSP430看門狗工作原理。2.掌握MSP430看門狗的使用方法。3.掌握狀態(tài)機(jī)建模編程思想。二.實(shí)驗(yàn)原理1.狀態(tài)機(jī)原理有非常普遍的一類程序,事件的判斷不僅與當(dāng)前輸入有關(guān),還與之前的“積累效應(yīng)”有關(guān)。比如,大家都知道計(jì)算機(jī)的鍵盤是能識(shí)別“長短鍵的”:1)當(dāng)你短時(shí)間按下“a”時(shí),屏幕上只顯示1個(gè)a。2)當(dāng)你按住“a”一定時(shí)間后,屏幕上就開始以“瘋狂速度”顯示aaaaaaa...了。3)如果只考察任何瞬態(tài),都是“A”鍵被按下,應(yīng)該事件處理都是一樣的。但是,結(jié)果卻不是這樣。4)這說明,光判斷“A”鍵被按下是不夠的,還要看“A”鍵被按下多久,才能決定調(diào)用哪種事件處理函數(shù)。上面的這段描述,和數(shù)字電路中的時(shí)序邏輯電路非常像,電路的輸出不僅取決于當(dāng)前輸入(A鍵按下),還與當(dāng)前所處的狀態(tài)有關(guān)(A鍵被“短按”狀態(tài)和A鍵被“長按”狀態(tài)),要對(duì)這類應(yīng)用進(jìn)行高效編程,流程圖是不行的,需要用到傳說中的狀態(tài)機(jī)。狀態(tài)機(jī)(StateMachine),也叫有限狀態(tài)機(jī)(FiniteStateMachine),簡稱狀態(tài)機(jī)。狀態(tài)機(jī)的概念來源于時(shí)序邏輯電路,又細(xì)分為Mealy狀態(tài)機(jī)和Moore狀態(tài)機(jī),兩者的區(qū)別在于是否只根據(jù)狀態(tài)就能得出輸出結(jié)果。單片機(jī)中借用了這兩種狀態(tài)機(jī)的思想,引申出“狀態(tài)中判斷事件”和“事件中查詢狀態(tài)”兩種單片機(jī)狀態(tài)機(jī)的編程方法。下圖是一個(gè)通用的狀態(tài)轉(zhuǎn)換圖框架,所有狀態(tài)機(jī)都可以基于該框架進(jìn)行擴(kuò)展,Event相當(dāng)于事件檢測函數(shù)檢測出的事件,Action相當(dāng)于事件處理函數(shù)。1)狀態(tài)中判斷事件對(duì)上圖中的狀態(tài)機(jī)進(jìn)行編程,可以采用State狀態(tài)中判斷Event事件的方法。這種方法類似于Mealy型狀態(tài)機(jī)(不完全等同),即在switch語句中,還需判斷Event才能決定輸出的結(jié)果。2)事件中查詢狀態(tài)對(duì)上圖中的狀態(tài)機(jī)進(jìn)行編程,也可以采用Event事件中查詢State狀態(tài)的方法。這種方法類似于Moore型狀態(tài)機(jī)(不完全等同),在Switch語句中,即無需再判斷Event,由當(dāng)前狀態(tài)就知道結(jié)果。其中if(Event)表達(dá)的含義是無論用什么方法,只要能判斷Event發(fā)生了,并不僅限于字面理解用if查詢Event,還包括直接在中斷中判斷Event的情況。2.兩種狀態(tài)機(jī)的區(qū)別在時(shí)序邏輯電路中,Moore狀態(tài)機(jī)和Mealy狀態(tài)機(jī)都可以用來描述任何狀態(tài)機(jī),并且兩種狀態(tài)機(jī)也可以互相轉(zhuǎn)換。在單片機(jī)的編程中,我們剛剛舉例,也證明了事件中查詢狀態(tài)和狀態(tài)中查詢事件都可以用來描述狀態(tài)機(jī)。那么這兩種方法有什么優(yōu)缺點(diǎn)呢?1)如果Event直接由中斷引發(fā),不需要if語句輪詢就能判斷,則用Moore型狀態(tài)機(jī)(事件中查詢狀態(tài))執(zhí)行速度快。這是因?yàn)?,只需?zhí)行對(duì)應(yīng)Event的switch(State)語句,而且switch中只需對(duì)State進(jìn)行判斷就可以輸出結(jié)果了。2)如果Event本身就需要輪詢才能得出,則使用Mealy型狀態(tài)機(jī)(狀態(tài)中查詢事件)的代碼要簡單。因?yàn)闋顟B(tài)中查詢事件只有一個(gè)switch(State)語句。3.硬件設(shè)置MSP-EXP430G2開發(fā)板上P1.3接了一個(gè)按鍵,P1.0和P1.6接了LED(用跳線帽連接),要求短按P1.3控制LED1的亮滅,長按P1.3控制LED2的亮滅。三.實(shí)驗(yàn)設(shè)備與器材1.PC機(jī)一臺(tái);操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。2.MSPEXP430G2553launchpad核心實(shí)驗(yàn)板一塊。3.USB連接電纜一條。四.實(shí)驗(yàn)內(nèi)容與記錄1.實(shí)驗(yàn)準(zhǔn)備(1)連接實(shí)驗(yàn)設(shè)備檢查EXP430G2553launchpad完好。(2)開啟設(shè)備①接通計(jì)算機(jī)電源,進(jìn)入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計(jì)算機(jī)的USB接口上。(3)啟動(dòng)CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.02.實(shí)驗(yàn)步驟僅使用MSP-EXP430G2開發(fā)板進(jìn)行實(shí)驗(yàn)插上P1.0和P1.6的LED跳線啟動(dòng)CCS,打開7_3_Key_Long_Short_Mealy工程下載并運(yùn)行仿真程序短按鍵,切換LED1亮滅長按鍵,切換LED2亮滅打開7_4_Key_Long_Short_Moore工程重復(fù)以上實(shí)驗(yàn)3.源代碼Mealy狀態(tài)機(jī)/**Key_Long_Short_Mealy*硬件描述:LaunchpadG2553開發(fā)板上P1.3接了一個(gè)按鍵,P1.0和P1.6各接了1個(gè)LED(用跳線帽連接)*功能描述:使用狀態(tài)機(jī)判別長短按鍵,短按鍵切換LED1狀態(tài),長按鍵切換LED2狀態(tài)*Createdon:2013-4-8*Author:Administrator*/#include"MSP430G2553.h"http://對(duì)狀態(tài)進(jìn)行宏定義#defineIDLE 0#defineSHORT 1#defineLONG 2#defineCOUNTER_THRESHOLD30 /*長鍵判別門限*///全局變量unsignedcharWDT_Counter=0; /*用于對(duì)按鍵按下時(shí)間進(jìn)行計(jì)數(shù)*///在main函數(shù)前提前申明函數(shù)voidGPIO_init();voidWDT_init();voidKey_SM();unsignedcharLongClick_Dect();voidP13_OnShortRelease();voidP13_OnLongClick();/******為符合閱讀習(xí)慣,將main函數(shù)放最前面,但其他函數(shù)就必須提前聲明***/voidmain(void){ WDTCTL=WDTPW+WDTHOLD; //關(guān)狗 GPIO_init(); WDT_init(); _enable_interrupts(); //開總中斷 _bis_SR_register(LPM3_bits); //LPM3休眠}/*******************************************************************************************************名稱:GPIO_Init()*功能:設(shè)定按鍵和LED控制IO的方向,啟用按鍵IO的上拉電阻*入口參數(shù):無*出口參數(shù):無*說明:無*范例:無******************************************************************************************************/voidGPIO_init(){ //設(shè)定P1.0和P1.6的輸出初始值 P1DIR|=BIT0+BIT6; //設(shè)定P1.0和P1.6為輸出 P1OUT|=BIT0; //設(shè)定P1.0初值 P1OUT&=~BIT6; //設(shè)定P1.6初值 //配合機(jī)械按鍵,啟用內(nèi)部上拉電阻 P1REN|=BIT3; //啟用P1.3內(nèi)部上下拉電阻 P1OUT|=BIT3; //將電阻設(shè)置為上拉}/*******************************************************************************************************名稱:WDT_init()*功能:設(shè)定WDT定時(shí)中斷為16ms,開啟WDT定時(shí)中斷使能*入口參數(shù):無*出口參數(shù):無*說明:WDT定時(shí)中斷的時(shí)鐘源選擇ACLK,可以用LPM3休眠。*范例:無******************************************************************************************************/voidWDT_init(){ //設(shè)定WDT為 WDTCTL=WDT_ADLY_16; //WDT中斷使能IE1|=WDTIE;}/*******************************************************************************************************名稱:WDT_ISR()*功能:響應(yīng)WDT定時(shí)中斷服務(wù)*入口參數(shù):無*出口參數(shù):無*說明:不能直接判斷事件,需啟用狀態(tài)機(jī)*范例:無******************************************************************************************************/#pragmavector=WDT_VECTOR__interruptvoidWDT_ISR(void){ //啟用按鍵狀態(tài)機(jī) Key_SM();}/*******************************************************************************************************名稱:Key_SM()*功能:判斷出長短鍵*入口參數(shù):無*出口參數(shù):無*說明:本狀態(tài)機(jī)為Mealy型狀態(tài)機(jī),在Switch(State)中需要判斷事件*范例:無******************************************************************************************************/voidKey_SM(){ staticunsignedcharState; //狀態(tài)機(jī)的狀態(tài)變量 staticunsignedcharKey_Now; //記錄按鍵的當(dāng)前電平 unsignedcharKey_Past=0; //記錄按鍵的前一次電平 unsignedcharKey_Dect=0; //按鍵狀態(tài)值 Key_Past=Key_Now; //查詢IO的輸入寄存器 if(P1IN&BIT3) Key_Now=1; else Key_Now=0; //電平前高后低,表明按下 if((Key_Past==1)&&(Key_Now==0)) Key_Dect=1; //電平前低后高,表明按下 if((Key_Past==0)&&(Key_Now==1)) Key_Dect=2; switch(State) //該狀態(tài)機(jī)靠掃描的按鍵值Key_Dect跳轉(zhuǎn)狀態(tài) { caseIDLE: WDT_Counter=0; //空閑狀態(tài)對(duì)計(jì)數(shù)清零 if(Key_Dect==1) State=SHORT; break; //路徑1 caseSHORT: if(Key_Dect==2) //路徑2 { State=IDLE; P13_OnShortRelease(); //短按事件處理函數(shù) } if(LongClick_Dect()) //路徑3 { State=LONG; P13_OnLongClick(); //長按事件處理函數(shù) } break; caseLONG: WDT_Counter=0; //長按狀態(tài)對(duì)計(jì)數(shù)清零 if(Key_Dect==2) State=IDLE; break; //路徑4 defaul

溫馨提示

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

評(píng)論

0/150

提交評(píng)論