版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
單片機原理與應用實驗指導書嘉興學院南湖學院PAGE1緒論該課程為電子信息類專業(yè),尤其是電氣工程及自動化、電子信息工程、自動化、機電一體化專業(yè)的重要課程。是一門計算機硬軟件知識與數(shù)字信號處理知識相結合的課程。同學通過預習準備與上機操作練習,熟悉軟件開發(fā)方法,理解各種單片機系統(tǒng)的實現(xiàn),并掌握單片機系統(tǒng)設計和實現(xiàn)方法。本實驗教學是高等院校電類專業(yè)為加強《單片機原理及應用》課程的理論學習而開設的綜合性實踐課程,它是根據(jù)有關實驗題目,設計相應程序,提供實驗的設備,同時也是對掌握有關實驗設備的選擇,操作使用的過程。因此所開設的每個實驗都有明確的目的和要求。MSP-EXP430G2LaunchPad(以下簡稱G2)是TI公司推出的1款MSP430開發(fā)板,它提供了具有集成仿真功能的14/20引腳DIP插座目標板,可通過SpyBi-Wire(2線JTAG)協(xié)議對系統(tǒng)內置的MSP430超值系列器件(G系列)進行快速編程和調試。PAGE38實驗一CCS使用實驗一.實驗目的1.了解CodeComposerStudio5.5軟件的操作環(huán)境和基本功能,了解MSP430的軟件開發(fā)過程。(1)學習創(chuàng)建工程和管理工程的方法。(2)了解基本的編譯和調試功能。(3)學習使用觀察窗口。(4)了解圖形功能的使用二.實驗原理CCS(CodeComposerStudio)是TI公司推出的“集成開發(fā)環(huán)境”IDE(IntergratedDevelopmentEnvironment)。所謂“集成開發(fā)環(huán)境”就是處理器的所有開發(fā)都在一個軟件里完成,包括工程管理、程序編譯、代碼下載、調試等功能。CCS支持所有TI公司推出的處理器,包括MSP430、ARMCortex系列、C2000和DSP。 1.開發(fā)MSP430應用系統(tǒng)一般需要以下幾個調試工具來完成:軟件集成開發(fā)環(huán)境(CodeComposerStudio5.5):完成系統(tǒng)的軟件開發(fā),進行軟件和硬件仿真調試。它也是硬件調試的輔助手段。開發(fā)系統(tǒng):實現(xiàn)硬件仿真調試時與硬件系統(tǒng)的通信,控制和讀取硬件系統(tǒng)的狀態(tài)和數(shù)據(jù)。 2.CodeComposerStudio5.5主要完成系統(tǒng)的軟件開發(fā)和調試。它提供一整套的程序編制、維護、編譯、調試環(huán)境,能將匯編語言和C語言程序編譯連接生成COFF(公共目標文件)格式的可執(zhí)行文件,并能將程序下載到目標板上運行調試。 3.用戶系統(tǒng)的軟件部分可以由CodeComposerStudio建立的工程文件進行管理,工程文件一般包含以下幾種文件:-源程序文件:C語言或匯編語言文件(*.ASM或*.C)-頭文件(*.H)-命令文件(*.CMD)-庫文件(*.LIB,*.OBJ)三.實驗設備與器材1.PC機一臺;操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。 2.MSPEXP430G2553launchpad核心實驗板一塊。3.USB連接電纜一條。四.實驗內容與記錄1.實驗準備(1)連接實驗設備檢查EXP430G2553launchpad完好。(2)開啟設備①接通計算機電源,進入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計算機的USB接口上。2.啟動CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.03.創(chuàng)建工程(1)創(chuàng)建新的工程文件首先,新建的工程會默認出現(xiàn)在之前選定的workspace文件夾中。點擊File?New?CCSProject,輸入Projectname:CCS_example,Outputtype:Excutable(可編譯執(zhí)行的,另一個可選項是Library),Device選擇MSP430G2553,最后選擇是“EmptyProject(withmain.c)工程建立后之后,自動生成了一堆文件,其中我們需要操作的就是main.c文件,編寫各種代碼,點擊保存后可激活“關聯(lián)跳轉”。關聯(lián)跳轉非常有用,可以按住CTRL+鼠標左鍵點擊任意函數(shù),就會跳轉到該函數(shù)的引用位置,按可以回到原代碼位置。如果需要添加外部文件,注意好文件路徑和頭文件包含問題。雙擊打開main.c,輸入下列程序:(2)在工程文件中添加程序文件(可選操作):在任何一個工程中,都包含main.c文件,還可以有很多其他文件。在ProjectExplorer樹形目錄中,可以通過新建或者直接COPY的方法增加文件夾或c文件、h文件。(3)編譯連接工程:程序編寫完成后,點擊即可開始編譯。根據(jù)圖中所示的編譯錯誤提示窗逐條修改錯誤。(4)運行調試:點擊行下載和仿真了,耐心等待后,得到仿真調試界面。完成后,代碼被下載到G2單片機里,點擊開始運行程序。(4)觀察數(shù)據(jù):在仿真運行后,點擊ToolàGraphàSingleTime設置參數(shù)如下: 在斷點位置點擊右鍵,編輯斷點屬性。將Action改為RefreshAllWindows,這樣就可以連續(xù)更新波形。分別把DisplayDataSize設為1024和128的顯示效果五.實驗小結與思考題總結CCS編譯調試環(huán)境在使用上的特點,聯(lián)系其它使用過的編譯器,找出它們之間相似的功能。進一步掌握其它在實驗中沒有用到的功能選項和編譯、調試技巧六.實驗報告要求1.實驗目的2.實驗的基本原理3.實驗程序的主要部分4.實驗結果及問題分析
實驗二MSP430系統(tǒng)時鐘實驗一.實驗目的1.了解MSP430系統(tǒng)時鐘工作原理。2.掌握MSP430系統(tǒng)時鐘的配置方法。二.實驗原理現(xiàn)代單片機的制造工藝都差不多,靠電子元件本身節(jié)能的潛力非常有限。單片機的低功耗主要是依靠間歇工作實現(xiàn)的,而間歇工作的方法就是啟停系統(tǒng)時鐘。如果像普通51單片機那樣只有一個時鐘,關掉時鐘意味著單片機全面停工,節(jié)能的同時也沒法正常使用了。所以出于低功耗的需要,MSP430單片機工作的系統(tǒng)時鐘被分為了MCLK、SMCLK和ACLK三個,可以根據(jù)需要關閉其中的一個幾個或全部。MCU內需要時鐘的單元包括CPU和部分片內外設,三種時鐘的功能區(qū)別如下:1)MCLK:主時鐘(MainsystemClock),專為CPU運行提供的時鐘。MCLK頻率配置的越高,CPU執(zhí)行的速度越快。雖然CPU速度越快功耗也越高,但高頻率的MCLK可以讓CPU工作時間更短。所以正確的低功耗設計并不是要盡量降低MCLK,而是在不用CPU時立刻關閉MCLK。在大部分應用中,需要CPU運算的時間都非常短,所以,間歇開啟MCLK(喚醒CPU)的方法節(jié)能效果非常明顯。2)SMCLK:子系統(tǒng)時鐘(Sub-mainClock),專為一些需要高速時鐘的片內外設提供服務,比如定時器和ADC采樣等。當CPU休眠時,只要SMCLK開啟,定時器和ADC仍可工作(一般待片內外設完成工作后觸發(fā)中斷,喚醒CPU去做后續(xù)工作)。3)ACLK:輔助時鐘(AuxillaryClock),輔助時鐘的頻率很低,所以即使一直開啟功耗也不大,當然關掉也是可以的。輔助時鐘可以供給那些只需低頻時鐘的片內外設,比如LCD控制器,還可用于產(chǎn)生節(jié)拍時基,與定時器配合間歇喚醒CPU。MCLK、SMCLK和ACLK三者關系用更形象的比喻就是主力部隊(MCLK)、先頭部隊(SMCLK)、警戒哨兵(ACLK)的關系。1)需要用主力部隊的時候不多,一般情況都處于休整狀態(tài),以節(jié)約“給養(yǎng)”(功耗)。2)能只用先頭部隊解決的問題,就別動用主力,待先頭部隊完成自己的任務后,再請主力出馬。3)當沒有實際“敵人”的時候,主力部隊和先頭部隊都可以休整,但是要放上哨兵作為警戒,發(fā)現(xiàn)“敵人”可以隨時喚醒主力部隊。如圖,MSP-EXP430G2開發(fā)板上P1.3接了一個按鍵,P1.0接了LED(用跳線帽連接),下面我們將編寫一段代碼,通過長延時控制P1.0LED亮滅,可以通過按鍵改變DCO頻率,隨著DCO改變,LED亮滅頻率發(fā)生變化。原理:軟件延時的時長與時鐘頻率成反比,改變DCO頻率自然就會改變延時,從而引起LED閃爍頻率的變化。三.實驗設備與器材1.PC機一臺;操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。2.MSPEXP430G2553launchpad核心實驗板一塊。3.USB連接電纜一條。四.實驗內容與記錄1.實驗準備(1)連接實驗設備檢查EXP430G2553launchpad完好。(2)開啟設備①接通計算機電源,進入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計算機的USB接口上。(3)啟動CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.0”2.實驗步驟僅使用MSP-EXP430G2開發(fā)板進行實驗插上P1.0和P1.6的LED跳線啟動CCS,打開4_KEY_LED_Change_DCO工程下載并運行仿真程序觀測LED閃爍頻率按鍵后,LED閃爍頻率變快每4次按鍵后,LED閃爍頻率變回初始狀態(tài)。3.源代碼/**Key_LED_Change_DCO.c*硬件描述:LaunchpadG2553開發(fā)板上P1.3接了一個按鍵,P1.0接了LED(用跳線帽連接)。*功能描述:LED依靠長延時閃爍,每次按下按鍵后,系統(tǒng)時鐘按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; //關閉看門狗定時器 GPIO_Init(); //初始化GPIO _enable_interrupts(); //等同_EINT,使能總中斷 while(1) { __delay_cycles(1000000); //與CPU時鐘相關的長延時// __delay_cycles(100); //與CPU時鐘相關的長延時 P1OUT^=BIT0; //LED亮滅狀態(tài)改變 P1OUT^=BIT6; //LED亮滅狀態(tài)改變 }}/***************************************************************************名稱:GPIO_Init()*功能:設定按鍵和LED控制IO的方向,啟用按鍵IO的上拉電阻*入口參數(shù):無*出口參數(shù):無*說明:無*范例:無*************************************************************************/voidGPIO_Init(){ //設定P1.0和P1.6的輸出初始值 P1DIR|=BIT0+BIT6; //設定P1.0為輸出 P1OUT|=BIT0+BIT6; //設定P1.0初值 //配合機械按鍵,啟用內部上拉電阻 P1REN|=BIT3; //啟用P1.3內部上下拉電阻 P1OUT|=BIT3; //將電阻設置為上拉 //配置P1.3中斷參數(shù) P1DIR&=~BIT3;//P1.3設為輸入(可省略) P1IES|=BIT3;//P1.3設為下降沿中斷 P1IE|=BIT3;//允許P1.3中斷}/***************************************************************************名稱:PORT1_ISR()*功能:響應P1口的外部中斷服務*入口參數(shù):無*出口參數(shù):無*說明:P1.0~P1.8共用了PORT1中斷,所以在PORT1_ISR()中必須查詢標志位P1IFG才能知道* 具體是哪個IO引發(fā)了外部中斷。P1IFG必須手動清除,否則將持續(xù)引發(fā)PORT1中斷。*范例:無*************************************************************************/#pragmavector=PORT1_VECTOR__interruptvoidPORT1_ISR(void){ //啟用Port1事件檢測函數(shù) P1_IODect(); //檢測通過,則會調用事件處理函數(shù) P1IFG=0; //退出中斷前必須手動清除IO口中斷標志}/***************************************************************************名稱:P1_IODect()*功能:判斷具體引發(fā)中斷的IO,并調用相應IO的中斷事件處理函數(shù)*入口參數(shù):無*出口參數(shù):無*說明:該函數(shù)兼容所有8個IO的檢測,請根據(jù)實際輸入IO激活“檢測代碼”。* 本例中,僅有P1.3被用作輸入IO,所以其他7個IO的“檢測代碼”沒有被“激活”。*范例:無**********************************************************************/voidP1_IODect(){ unsignedintPush_Key=0; //排除輸出IO的干擾后,鎖定唯一被觸發(fā)的中斷標志位 Push_Key=P1IFG&(~P1DIR); //延時一段時間,避開機械抖動區(qū)域 __delay_cycles(10000); //消抖延時 //判斷按鍵狀態(tài)是否與延時前一致 if((P1IN&Push_Key)==0) //如果該次按鍵確實有效{ //判斷具體哪個IO被按下,調用該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ù),即當P1.3鍵被按下后,下一步干什么*入口參數(shù):無*出口參數(shù):無*說明:使用事件處理函數(shù)的形式,可以增強代碼的移植性和可讀性*范例:無**************************************************************************/voidP13_Onclick(){ //Freq僅在P13_Onclick()中使用,但是又需要退出函數(shù)時不被清除 staticunsignedintFreq=0; //靜態(tài)全局變量的典型應用場合 //變量從0~3循環(huán)移位 Freq++; if(Freq>3) Freq=0; //根據(jù)Freq的值,改變DCO設定頻率 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; }}五.實驗小結與思考題總結MSP430系統(tǒng)時鐘工作原理及配置方法。進一步掌握其它在實驗中沒有用到的功能選項和編譯、調試技巧。六.實驗報告要求1.實驗目的2.實驗的基本原理3.實驗程序的主要部分4.實驗結果及問題分析
實驗三MSP430中斷實驗一.實驗目的1.了解MSP430中斷工作原理。2.掌握MSP430中斷時鐘的配置方法。二.實驗原理如圖,MSP-EXP430G2開發(fā)板上P1.3接了一個按鍵,P1.0和P1.6接了LED(用跳線帽連接),下面我們將編寫一段代碼,兩個LED保持1亮1滅,每次按下P1.3后,LED交換亮滅狀態(tài),要求不阻塞CPU。三.實驗設備與器材1.PC機一臺;操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。2.MSPEXP430G2553launchpad核心實驗板一塊。3.USB連接電纜一條。四.實驗內容與記錄1.實驗準備(1)連接實驗設備檢查EXP430G2553launchpad完好。(2)開啟設備①接通計算機電源,進入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計算機的USB接口上。(3)啟動CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.02.實驗步驟僅使用MSP-EXP430G2開發(fā)板進行實驗插上P1.0和P1.6的LED跳線啟動CCS,打開5_Interrupt_Key_LED工程下載并運行仿真程序觀測初始時兩個LED的亮滅狀態(tài)每次按鍵后,兩個LED切換亮滅3.源代碼/**Interrupt_Key_LED.c*硬件描述:LaunchpadG2553開發(fā)板上P1.3接了一個按鍵,P1.0和P1.6各接了1個LED(用跳線帽連接)。*功能描述:按鍵按下的瞬間,兩個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; //關狗 GPIO_init(); //IO初始化 _enable_interrupts(); //使能總中斷 _bis_SR_register(LPM3_bits); //休眠}/*******************************************************************************************************名稱:GPIO_Init()*功能:設定按鍵和LED控制IO的方向,啟用按鍵IO的上拉電阻*入口參數(shù):無*出口參數(shù):無*說明:無*范例:無******************************************************************************************************/voidGPIO_init(){ //設定P1.0和P1.6的輸出初始值 P1DIR|=BIT0+BIT6; //設定P1.0和P1.6為輸出 P1OUT|=BIT0; //設定P1.0初值 P1OUT&=~BIT6; //設定P1.6初值 //配合機械按鍵,啟用內部上拉電阻 P1REN|=BIT3; //啟用P1.3內部上下拉電阻 P1OUT|=BIT3; //將電阻設置為上拉 //配置P1.3中斷參數(shù) P1DIR&=~BIT3;//P1.3設為輸入(可省略) P1IES|=BIT3;//P1.3設為下降沿中斷 P1IE|=BIT3;//允許P1.3中斷}/*******************************************************************************************************名稱:PORT1_ISR()*功能:響應P1口的外部中斷服務*入口參數(shù):無*出口參數(shù):無*說明:P1.0~P1.8共用了PORT1中斷,所以在PORT1_ISR()中必須查詢標志位P1IFG才能知道* 具體是哪個IO引發(fā)了外部中斷。P1IFG必須手動清除,否則將持續(xù)引發(fā)PORT1中斷。*范例:無******************************************************************************************************/#pragmavector=PORT1_VECTOR__interruptvoidPORT1_ISR(void){ //啟用Port1事件檢測函數(shù) P1_IODect(); //檢測通過,則會調用事件處理函數(shù) P1IFG=0; //退出中斷前必須手動清除IO口中斷標志}/*******************************************************************************************************名稱:P1_IODect()*功能:判斷具體引發(fā)中斷的IO,并調用相應IO的中斷事件處理函數(shù)*入口參數(shù):無*出口參數(shù):無*說明:該函數(shù)兼容所有8個IO的檢測,請根據(jù)實際輸入IO激活“檢測代碼”。* 本例中,僅有P1.3被用作輸入IO,所以其他7個IO的“檢測代碼”沒有被“激活”。*范例:無******************************************************************************************************/voidP1_IODect(){ unsignedintPush_Key=0; //排除輸出IO的干擾后,鎖定唯一被觸發(fā)的中斷標志位 Push_Key=P1IFG&(~P1DIR); //延時一段時間,避開機械抖動區(qū)域 __delay_cycles(10000); //消抖延時 //判斷按鍵狀態(tài)是否與延時前一致 if((P1IN&Push_Key)==0) //如果該次按鍵確實有效{ //判斷具體哪個IO被按下,調用該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ù),即當P1.3鍵被按下后,下一步干什么*入口參數(shù):無*出口參數(shù):無*說明:使用事件處理函數(shù)的形式,可以增強代碼的移植性和可讀性*范例:無******************************************************************************************************/voidP13_Onclick(){ //翻轉IO電平 P1OUT^=BIT0; P1OUT^=BIT6; }五.實驗小結與思考題總結MSP430中斷工作原理及配置方法。進一步掌握其它在實驗中沒有用到的功能選項和編譯、調試技巧。六.實驗報告要求1.實驗目的2.實驗的基本原理3.實驗程序的主要部分4.實驗結果及問題分析
實驗四MSP430定時器實驗—基于PWM的LED調光一.實驗目的1.了解MSP430定時器工作原理。2.掌握MSP430定時器的使用方法。二.實驗原理1.定時器原理定時器在任何單片機中都具有極其重要的作用。我們都知道單片機是順序執(zhí)行指令,我們把CPU看成是人,一個每次只能干一件事的人。沒有定時器的幫助,人就會像在監(jiān)獄服刑一樣,早上起床,吃早飯,干苦力、放風、吃晚飯、睡覺、早上起床...偶爾有的變數(shù)就是有人探監(jiān)(外部中斷)??膳碌氖?,如果吃飯時“耳背”,獄警喊停沒聽見,那作為犯人就必須一直吃下去,干苦力時出了岔子就更悲催了。定時器是什么呢?實際就是能夠對時鐘進行計數(shù)的計數(shù)器,類似我們的鬧鐘。定時器的出現(xiàn)才使單片機成為幾乎無所不能的完整的自由人。一個自由主人的一天是這樣的:1)起床:相當于main循環(huán)的起始。2)刷牙:相當于執(zhí)行各種inital操作,此task主人(CPU)必須親力親為,并且不能被其他事打擾。3)燒水:代表不需要人(CPU)一直干的task,主人灌好燒水壺后,只需打開灶臺火焰即可。不巧的是燒水壺并沒有水燒好的鳴響器(外設中斷),怎么辦?最傻的辦法是主人得一直盯著看燒水的全過程。但是有定時器,主人就不必要這么做了。因為燒好一壺水的時間基本是知道的,主人設定好鬧鐘就可以去看報紙(其他任務)或者打瞌睡了(休眠)。待鬧鐘響起,人去關火,泡咖啡...4)敲門:有訪客敲門相當于突發(fā)事件event。假設主人住在大莊園里,又恰巧沒有門鈴(外部中斷)怎么辦?難道要主人成天蹲在大門口嗎?不用,有定時器呢。假定訪客敲門都最少會敲5分鐘,主人將定時器設定為5分鐘響一次,每5分鐘去門口看一次,這樣就不會錯過客人來訪了。其他時間,主人可以打dota或者發(fā)呆。5)吃藥:假如主人每隔1小時需要吃藥一次,這相當于對時間要求嚴格的task,按理說這不就是用個鬧鐘就完了嗎。憋屈的是,主人只有1個鬧鐘,已經(jīng)用在“接客”上了,怎么辦?沒關系,主人可以數(shù)定時5分鐘的鬧鐘響了多少次,數(shù)夠12次就吃藥。類似的方法,主人可以數(shù)著鬧鐘的“節(jié)拍”處理其他對時間要求嚴格的task。6)有人來訪:好了,5分鐘去大門口看一次,真有訪客了。訪客分兩種情況,送快遞的(只需標記下,可以后續(xù)處理的event)或是上門拜訪的(需要立刻接待處理的event)。因為對于快遞包裹,主人驗貨收下即可(寫全局變量標志位),以后有時間再研究包裹內的物品。而上門拜訪的客人,主人立刻親自接待(中斷子函數(shù),占用CPU)。7)客人賴著不走:客人腦子進水了說個沒完沒了(程序跑飛或外設錯誤),影響主人正常生活了,怎么辦?沒事,幸好有看門狗定時器在,每隔設定時間,必須喂狗(重置看門狗定時器),否則設定時間一到,看門狗該咬人了(重啟單片機)。主人的一天要重新開始了??偨Y一下主人的一天,一個住著大莊園的主人,卻沒有仆人(有的話成雙CPU了)。還非常憋屈的沒有自動報警的燒水壺,莊園大門沒有門鈴,吃藥都沒有專人伺候。但是依靠鬧鐘(定時器),主人還是可以愜意的生活,有時間打dota,有時間打盹。甚至當“天下大亂”的時候,還有看門狗可以讓一天重來。定時器作為單片機中最有用的片內外設,就是為彌補CPU順序執(zhí)行程序這個“死腦經(jīng)”缺陷而量身定做的。學會使用定時器的思想,才算真正是單片機入了門。2.硬件原理如圖,MSP-EXP430G2開發(fā)板上P1.3接了一個按鍵,P1.6為TA輸出口并接了LED(用跳線帽連接),下面我們將編寫一段代碼,通過按鍵改變PWM占空比,從而改變LED亮度。三.實驗設備與器材1.PC機一臺;操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。2.MSPEXP430G2553launchpad核心實驗板一塊。3.USB連接電纜一條。四.實驗內容與記錄1.實驗準備(1)連接實驗設備檢查EXP430G2553launchpad完好。(2)開啟設備①接通計算機電源,進入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計算機的USB接口上。(3)啟動CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.02.實驗步驟僅使用MSP-EXP430G2開發(fā)板進行實驗插上P1.0的LED跳線啟動CCS,打開6_PWM_LED工程下載并運行仿真程序觀測初始時LED的亮度(滅)每次按鍵后,LED變亮每10次按鍵以后,LED恢復初始亮度3.源代碼/**PWM_LED.c*硬件描述:LaunchpadG2553開發(fā)板上P1.3接了一個按鍵,P1.6各接了1個綠光LED(用跳線帽連接)。*功能描述:按鍵按下的瞬間,LED亮度變化。需調用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; //關狗 //初始化TA0為ACLK輸入,不分頻,通道1超前PWM,通道2關閉 TA0_PWM_Init('A',1,'F',0); TA0_PWM_SetPeriod(500); //設定PWM周期 GPIO_init(); //初始化GPIO _enable_interrupts(); //使能總中斷_bis_SR_register(LPM3_bits); //LPM3方式休眠}/*******************************************************************************************************名稱:GPIO_Init()*功能:設定按鍵和LED控制IO的方向,啟用按鍵IO的上拉電阻*入口參數(shù):無*出口參數(shù):無*說明:無*范例:無******************************************************************************************************/voidGPIO_init(){ //TA0_PWM_Init()自動設置TA口(P1.6) //配合機械按鍵,啟用內部上拉電阻 P1REN|=BIT3; //啟用P1.3內部上下拉電阻 P1OUT|=BIT3; //將電阻設置為上拉 //配置P1.3中斷參數(shù) P1DIR&=~BIT3;//P1.3設為輸入(可省略) P1IES|=BIT3;//P1.3設為下降沿中斷 P1IE|=BIT3;//允許P1.3中斷}/*******************************************************************************************************名稱:PORT1_ISR()*功能:響應P1口的外部中斷服務*入口參數(shù):無*出口參數(shù):無*說明:P1.0~P1.8共用了PORT1中斷,所以在PORT1_ISR()中必須查詢標志位P1IFG才能知道* 具體是哪個IO引發(fā)了外部中斷。P1IFG必須手動清除,否則將持續(xù)引發(fā)PORT1中斷。*范例:無******************************************************************************************************/#pragmavector=PORT1_VECTOR__interruptvoidPORT1_ISR(void){ //啟用Port1事件檢測函數(shù) P1_IODect(); //檢測通過,則會調用事件處理函數(shù) P1IFG=0; //退出中斷前必須手動清除IO口中斷標志}/*******************************************************************************************************名稱:P1_IODect()*功能:判斷具體引發(fā)中斷的IO,并調用相應IO的中斷事件處理函數(shù)*入口參數(shù):無*出口參數(shù):無*說明:該函數(shù)兼容所有8個IO的檢測,請根據(jù)實際輸入IO激活“檢測代碼”。* 本例中,僅有P1.3被用作輸入IO,所以其他7個IO的“檢測代碼”沒有被“激活”。*范例:無******************************************************************************************************/voidP1_IODect(){ unsignedintPush_Key=0; //排除輸出IO的干擾后,鎖定唯一被觸發(fā)的中斷標志位 Push_Key=P1IFG&(~P1DIR); //延時一段時間,避開機械抖動區(qū)域 __delay_cycles(10000); //消抖延時 //判斷按鍵狀態(tài)是否與延時前一致 if((P1IN&Push_Key)==0) //如果該次按鍵確實有效{ //判斷具體哪個IO被按下,調用該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ù),即當P1.3鍵被按下后,下一步干什么*入口參數(shù):無*出口參數(shù):無*說明:使用事件處理函數(shù)的形式,可以增強代碼的移植性和可讀性*范例:無******************************************************************************************************/voidP13_Onclick() //P1.3的事件處理函數(shù){ //Bright在函數(shù)執(zhí)行完后不能被清空,所以得設為靜態(tài)局部變量 staticunsignedintBright=0; //循環(huán)改變PWM占空比 Bright=Bright+40; if(Bright>=400) //占空比最大40%,更亮的區(qū)間視覺變化不明顯 Bright=0; TA0_PWM_SetPermill(1,Bright); //調用庫函數(shù),更新PWM占空比 _nop(); }五.實驗小結與思考題總結MSP430定時器工作原理及配置方法。進一步掌握其它在實驗中沒有用到的功能選項和編譯、調試技巧。六.實驗報告要求1.實驗目的2.實驗的基本原理3.實驗程序的主要部分4.實驗結果及問題分析
實驗五MSP430看門狗實驗—呼吸燈一.實驗目的1.了解MSP430看門狗工作原理。2.掌握MSP430看門狗的使用方法。二.實驗原理1.WDT原理WDT(WatchDogTimer)俗稱看門狗,是單片機非常重要的一個片內外設。早期,普通51單片機內部沒有它,則有使用專門的外擴看門狗芯片。在電子產(chǎn)品中,被稱為“狗”的就是忠誠可靠的代名詞,比如電子狗(雷達測速狗)。什么是看門狗呢?看門狗實際就是一個定時器,只不過在定時到達時,可以復位單片機。這個功能對于實際工程應用中的產(chǎn)品非常有用。在很多應用中,單片機要經(jīng)年累月的連續(xù)工作,如果期間單片機由于各種意外死機(俗稱跑飛),則單片機就經(jīng)年累月的不工作了,有了看門狗,就可以避免這種意外的發(fā)生??撮T狗的原理就8個字“定時喂狗,狗餓復位”:1)單片機都是循環(huán)工作的,比如完成整個循環(huán)所需時間最長不超過0.5秒,則可以把看門狗定時器的定時值設為1秒,在主循環(huán)中加入看門狗定時值清零的代碼(俗稱喂狗)。2)這樣一來,假如程序運行正常,則總會在看門狗定時器到點前“喂狗”,從而避免單片機復位。3)如果程序死機,則不會及時“喂狗”,單片機復位。復位后看門狗依然默認開啟,繼續(xù)守護著程序的正常運行。2.硬件原理呼吸燈就是亮度漸變的LED燈,普通LED可以用TA輸出PWM來控制亮度,通過WDT定時中斷來改變亮度,從而實現(xiàn)呼吸燈效果。如圖7.4所示,G2板可以利用P1.6(PWM輸出口)控制LED來實現(xiàn)呼吸燈。三.實驗設備與器材1.PC機一臺;操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。2.MSPEXP430G2553launchpad核心實驗板一塊。3.USB連接電纜一條。四.實驗內容與記錄1.實驗準備(1)連接實驗設備檢查EXP430G2553launchpad完好。(2)開啟設備①接通計算機電源,進入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計算機的USB接口上。(3)啟動CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.02.實驗步驟僅使用MSP-EXP430G2開發(fā)板進行實驗插上P1.6的LED跳線啟動CCS,打開7_1_Breath_Lamp工程下載并運行仿真程序觀測LED的亮度隨時間的變化3.源代碼/**Breath_Lamp.c*硬件描述:P1.6(PWM輸出口)接了1個綠光LED(用跳線帽連接)。*功能描述:LED亮度隨時間漸漸變量又漸漸變暗,人稱“呼吸燈”。需調用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定時器 TA0_PWM_Init('A',1,'F',0); //ACLK,不分頻,TA0.1輸出超前PWM TA0_PWM_SetPeriod(PWM_PERIOD); //設定PWM的周期 //初始化看門狗定時器 WDTCTL=WDT_ADLY_16; //WDT設為16ms定時器模式 IE1|=WDTIE; //使能寄存器IE1中相應的WDT中斷位 _enable_interrupts(); //使能總中斷 _bis_SR_register(LPM3_bits);}/***************************************************************************名稱:WDT_ISR()*功能:響應WDT定時中斷服務*入口參數(shù):無*出口參數(shù):無*說明:WDT定時中斷獨占中斷向量,所以無需進一步判斷中斷事件,也無需人工清除標志位。*所以,在WDT定時中斷服務子函數(shù)中,直接調用WDT事件處理函數(shù)就可以了。*范例:無*************************************************************************/#pragmavector=WDT_VECTOR //WatchdogTimerinterruptserviceroutine__interruptvoidWDT_ISR(void){ WDT_Ontime();}五.實驗小結與思考題總結MSP430看門狗工作原理及配置方法。進一步掌握其它在實驗中沒有用到的功能選項和編譯、調試技巧。六.實驗報告要求1.實驗目的2.實驗的基本原理3.實驗程序的主要部分4.實驗結果及問題分析
實驗六MSP430鍵盤實驗—長短鍵識別一.實驗目的1.了解MSP430看門狗工作原理。2.掌握MSP430看門狗的使用方法。3.掌握狀態(tài)機建模編程思想。二.實驗原理1.狀態(tài)機原理有非常普遍的一類程序,事件的判斷不僅與當前輸入有關,還與之前的“積累效應”有關。比如,大家都知道計算機的鍵盤是能識別“長短鍵的”:1)當你短時間按下“a”時,屏幕上只顯示1個a。2)當你按住“a”一定時間后,屏幕上就開始以“瘋狂速度”顯示aaaaaaa...了。3)如果只考察任何瞬態(tài),都是“A”鍵被按下,應該事件處理都是一樣的。但是,結果卻不是這樣。4)這說明,光判斷“A”鍵被按下是不夠的,還要看“A”鍵被按下多久,才能決定調用哪種事件處理函數(shù)。上面的這段描述,和數(shù)字電路中的時序邏輯電路非常像,電路的輸出不僅取決于當前輸入(A鍵按下),還與當前所處的狀態(tài)有關(A鍵被“短按”狀態(tài)和A鍵被“長按”狀態(tài)),要對這類應用進行高效編程,流程圖是不行的,需要用到傳說中的狀態(tài)機。狀態(tài)機(StateMachine),也叫有限狀態(tài)機(FiniteStateMachine),簡稱狀態(tài)機。狀態(tài)機的概念來源于時序邏輯電路,又細分為Mealy狀態(tài)機和Moore狀態(tài)機,兩者的區(qū)別在于是否只根據(jù)狀態(tài)就能得出輸出結果。單片機中借用了這兩種狀態(tài)機的思想,引申出“狀態(tài)中判斷事件”和“事件中查詢狀態(tài)”兩種單片機狀態(tài)機的編程方法。下圖是一個通用的狀態(tài)轉換圖框架,所有狀態(tài)機都可以基于該框架進行擴展,Event相當于事件檢測函數(shù)檢測出的事件,Action相當于事件處理函數(shù)。1)狀態(tài)中判斷事件對上圖中的狀態(tài)機進行編程,可以采用State狀態(tài)中判斷Event事件的方法。這種方法類似于Mealy型狀態(tài)機(不完全等同),即在switch語句中,還需判斷Event才能決定輸出的結果。2)事件中查詢狀態(tài)對上圖中的狀態(tài)機進行編程,也可以采用Event事件中查詢State狀態(tài)的方法。這種方法類似于Moore型狀態(tài)機(不完全等同),在Switch語句中,即無需再判斷Event,由當前狀態(tài)就知道結果。其中if(Event)表達的含義是無論用什么方法,只要能判斷Event發(fā)生了,并不僅限于字面理解用if查詢Event,還包括直接在中斷中判斷Event的情況。2.兩種狀態(tài)機的區(qū)別在時序邏輯電路中,Moore狀態(tài)機和Mealy狀態(tài)機都可以用來描述任何狀態(tài)機,并且兩種狀態(tài)機也可以互相轉換。在單片機的編程中,我們剛剛舉例,也證明了事件中查詢狀態(tài)和狀態(tài)中查詢事件都可以用來描述狀態(tài)機。那么這兩種方法有什么優(yōu)缺點呢?1)如果Event直接由中斷引發(fā),不需要if語句輪詢就能判斷,則用Moore型狀態(tài)機(事件中查詢狀態(tài))執(zhí)行速度快。這是因為,只需執(zhí)行對應Event的switch(State)語句,而且switch中只需對State進行判斷就可以輸出結果了。2)如果Event本身就需要輪詢才能得出,則使用Mealy型狀態(tài)機(狀態(tài)中查詢事件)的代碼要簡單。因為狀態(tài)中查詢事件只有一個switch(State)語句。3.硬件設置MSP-EXP430G2開發(fā)板上P1.3接了一個按鍵,P1.0和P1.6接了LED(用跳線帽連接),要求短按P1.3控制LED1的亮滅,長按P1.3控制LED2的亮滅。三.實驗設備與器材1.PC機一臺;操作系統(tǒng)為WindowsXP(或WindowsNT、Windows98、Windows2000,以下假定操作系統(tǒng)為WindowsXP)。安裝CCS軟件。2.MSPEXP430G2553launchpad核心實驗板一塊。3.USB連接電纜一條。四.實驗內容與記錄1.實驗準備(1)連接實驗設備檢查EXP430G2553launchpad完好。(2)開啟設備①接通計算機電源,進入Windows操作系統(tǒng)。②提供的USB電纜的扁平端連接到計算機的USB接口上。(3)啟動CodeComposerStudio5雙擊桌面上“CodeComposerStudio5.5.02.實驗步驟僅使用MSP-EXP430G2開發(fā)板進行實驗插上P1.0和P1.6的LED跳線啟動CCS,打開7_3_Key_Long_Short_Mealy工程下載并運行仿真程序短按鍵,切換LED1亮滅長按鍵,切換LED2亮滅打開7_4_Key_Long_Short_Moore工程重復以上實驗3.源代碼Mealy狀態(tài)機/**Key_Long_Short_Mealy*硬件描述:LaunchpadG2553開發(fā)板上P1.3接了一個按鍵,P1.0和P1.6各接了1個LED(用跳線帽連接)*功能描述:使用狀態(tài)機判別長短按鍵,短按鍵切換LED1狀態(tài),長按鍵切換LED2狀態(tài)*Createdon:2013-4-8*Author:Administrator*/#include"MSP430G2553.h"http://對狀態(tài)進行宏定義#defineIDLE 0#defineSHORT 1#defineLONG 2#defineCOUNTER_THRESHOLD30 /*長鍵判別門限*///全局變量unsignedcharWDT_Counter=0; /*用于對按鍵按下時間進行計數(shù)*///在main函數(shù)前提前申明函數(shù)voidGPIO_init();voidWDT_init();voidKey_SM();unsignedcharLongClick_Dect();voidP13_OnShortRelease();voidP13_OnLongClick();/******為符合閱讀習慣,將main函數(shù)放最前面,但其他函數(shù)就必須提前聲明***/voidmain(void){ WDTCTL=WDTPW+WDTHOLD; //關狗 GPIO_init(); WDT_init(); _enable_interrupts(); //開總中斷 _bis_SR_register(LPM3_bits); //LPM3休眠}/*******************************************************************************************************名稱:GPIO_Init()*功能:設定按鍵和LED控制IO的方向,啟用按鍵IO的上拉電阻*入口參數(shù):無*出口參數(shù):無*說明:無*范例:無******************************************************************************************************/voidGPIO_init(){ //設定P1.0和P1.6的輸出初始值 P1DIR|=BIT0+BIT6; //設定P1.0和P1.6為輸出 P1OUT|=BIT0; //設定P1.0初值 P1OUT&=~BIT6; //設定P1.6初值 //配合機械按鍵,啟用內部上拉電阻 P1REN|=BIT3; //啟用P1.3內部上下拉電阻 P1OUT|=BIT3; //將電阻設置為上拉}/*******************************************************************************************************名稱:WDT_init()*功能:設定WDT定時中斷為16ms,開啟WDT定時中斷使能*入口參數(shù):無*出口參數(shù):無*說明:WDT定時中斷的時鐘源選擇ACLK,可以用LPM3休眠。*范例:無******************************************************************************************************/voidWDT_init(){ //設定WDT為 WDTCTL=WDT_ADLY_16; //WDT中斷使能IE1|=WDTIE;}/*******************************************************************************************************名稱:WDT_ISR()*功能:響應WDT定時中斷服務*入口參數(shù):無*出口參數(shù):無*說明:不能直接判斷事件,需啟用狀態(tài)機*范例:無******************************************************************************************************/#pragmavector=WDT_VECTOR__interruptvoidWDT_ISR(void){ //啟用按鍵狀態(tài)機 Key_SM();}/*******************************************************************************************************名稱:Key_SM()*功能:判斷出長短鍵*入口參數(shù):無*出口參數(shù):無*說明:本狀態(tài)機為Mealy型狀態(tài)機,在Switch(State)中需要判斷事件*范例:無******************************************************************************************************/voidKey_SM(){ staticunsignedcharState; //狀態(tài)機的狀態(tài)變量 staticunsignedcharKey_Now; //記錄按鍵的當前電平 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)機靠掃描的按鍵值Key_Dect跳轉狀態(tài) { caseIDLE: WDT_Counter=0; //空閑狀態(tài)對計數(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)對計數(shù)清零 if(Key_Dect==2) State=IDLE; break; //路徑4 defaul
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公會和斗魚之間合同范例
- 商場花卉租賃合同范例
- 公寓美甲店轉讓合同范例
- 合作餐飲協(xié)議合同范例
- 物業(yè)招商居間協(xié)議合同范例
- 唐山勞務合同范例定制
- 生產(chǎn)用品銷售合同范例
- 水泥合同違約合同范例
- 老人門衛(wèi)合同范例
- 拆遷領錢合同范例
- 中學科學教育活動三年發(fā)展規(guī)劃(2024-2026)
- 2025年高考語文復習備考復習策略講座
- 民事訴訟法試題庫
- 2024-2030年中國給水排水管行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 山東省濟南市2023-2024學年高一上學期1月期末考試數(shù)學試題 含解析
- 護理研究試題答案
- 營養(yǎng)與食品衛(wèi)生學智慧樹知到答案2024年溫州醫(yī)科大學
- 儲能行業(yè)-市場前景及投資研究報告-移動式儲能電源應用技術發(fā)展-培訓課件
- 藝人直播帶貨合同(坑位費-CPS)
- 【金融模擬交易實踐報告書3700字(論文)】
- 蔬菜批發(fā)合伙合同范本
評論
0/150
提交評論