計硬基礎(chǔ)實驗報告3_第1頁
計硬基礎(chǔ)實驗報告3_第2頁
計硬基礎(chǔ)實驗報告3_第3頁
計硬基礎(chǔ)實驗報告3_第4頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計硬基礎(chǔ)實驗報告3 實驗名稱: 中斷技術(shù) 、 基本時鐘和低功耗模式 (實驗 5 5 、實驗 6 6 ) 姓名: 學(xué)號: 實驗班號: 機(jī)器號:d d- - 100 實驗?zāi)康?1. 了解中斷原理,包括對中斷源、中斷向量、中斷類型號、中斷程序以及中斷響應(yīng)過程的理解; 2. 掌握單片機(jī) c 語言中斷程序設(shè)計方法。 3. 了解 msp430gxxx 基本時鐘模塊的工作原理,掌握其控制方法; 4. 掌握利用時鐘信號和中斷技術(shù)實現(xiàn)定時功能的方法; 5掌握低功耗模式控制方法。 實驗 基本 任務(wù) 實驗 5 中斷技術(shù) : 1 中斷響應(yīng)過程的理解 下面 c 語言中斷程序l5_int.c(見后頁),說明程序執(zhí)行的流程

2、和實現(xiàn)功能。上機(jī)實踐,回答下面問題,掌握用c 語言編寫中斷程序的方法。 注意: 1) 查看io430g2553.h 文件末尾處有關(guān)中斷向量偏址的符號定義。 2)為便于了解程序執(zhí)行流程,可在中斷函數(shù)入口處設(shè)置一斷點,然后連續(xù)運行程序(f5),觀察操作按鍵和不操作按鍵兩種情況下程序執(zhí)行的現(xiàn)象有何不同。 程序見 lab_5 項目,程序 l5_int.c 如下: #include io430.h #include in430.h void delay( ) /延時函數(shù) unsigned int j; for (j=0;j0xffff;j+); void blink( ) /led閃 p2out =bi

3、t3; delay(); p2out |= bit3; delay(); void buzz( ) /蜂鳴響 unsigned int i; for (i=0;i3;i+) p2out =bit4; delay(); p2out|= bit4; delay(); ; void main ( void ) wdtctl = wdtpw + wdthold; /關(guān)閉看門狗 /設(shè)置引腳p2.4、p2.3輸出,p2.3連接led,p2.4連接蜂鳴器 p2sel =(bit3+bit4); p2sel2 =(bit3+bit4); p2out|=(bit3+bit4); p2dir|=(bit3+bit

4、4); /中斷相關(guān)設(shè)置即設(shè)置端口p1.3允許中斷 p1sel = bit3; p1sel2 = bit3; p1out |=bit3; p1ren |=bit3; p1dir =bit3; p1ies |= bit3; p1ifg =bit3; p1ie |= bit3; _eint(); /總中斷允許 for (;) /主循環(huán) blink(); ; #pragma vector=port1_vector _interrupt void port_isr( ) buzz(); p1ifg =bit3; 1) 從程序如何判斷用的是哪個中斷源?中斷類型號是多少?將實驗板上某一按鍵與該中斷源對應(yīng)的引

5、腳相連,運行程序,操作按鍵,觀察現(xiàn)象。 答:程序是通過判斷中斷標(biāo)志位來確定是哪個中斷源,p1.3 為中斷源,中斷類型號是 2; 現(xiàn)象:運行程序時p2.3控制的led4燈不斷閃爍,當(dāng)p1.3控制的開關(guān)發(fā)出中斷申請時即按下按鍵k4后閃爍暫停,控制p2.4連接的蜂鳴器響3聲,然后繼續(xù)led4燈閃爍。 2)main 函數(shù)中無調(diào)用函數(shù)port_isr 的語句,函數(shù)port_isr 如何能被執(zhí)行?何時會被執(zhí)行? 據(jù)此描述中斷響應(yīng)過程。 答:當(dāng) p1.3 發(fā)出中斷申請時即當(dāng)按下按鍵時,函數(shù) port_isr 就會被執(zhí)行,執(zhí)行完畢后再返回 main 函數(shù)中繼續(xù)執(zhí)行 main 函數(shù)。 中斷響應(yīng)的過程:p1.3處

6、發(fā)出中斷請求判斷是否滿足響應(yīng)條件若滿足,則cpu在執(zhí)行完當(dāng)前指令后,硬件自動完成保護(hù)現(xiàn)場的操作從中斷向量表中取中斷向量至pc轉(zhuǎn)去執(zhí)行中斷服務(wù)子程序; 3) 如果函數(shù)port_isr 中不清分中斷標(biāo)志p1ifg 的后果是什么? 答:如果不清分中斷標(biāo)志p1ifg的話就會一直響應(yīng)中斷,然后port_isr函數(shù)就會一直被執(zhí)行,蜂鳴器不斷的響。 4) 如果l5_int.c 中的port1_vector 改為port2_vector, 其他不變,程序執(zhí)行的后果是什么?為什么?(可在main 函數(shù)入口處加一斷點,運行程序,看現(xiàn)象,分析原因) 答:port1_vector 改為 port2_vector,其他

7、不變,程序?qū)o法進(jìn)入中斷。因為程序中的中斷屬于 p1 引腳的中斷,中斷向量與 p2 引腳的中斷向量不同,所進(jìn)行的改動則是把中斷程序?qū)懭氲搅?p2 引腳的中斷向量對應(yīng)的地址中,而 p1 引腳的中斷向量對應(yīng)的地址上沒有程序,因此無法執(zhí)行原先的中斷子程。 當(dāng)在主程序入口處加一斷點時可以發(fā)現(xiàn),由于已經(jīng)設(shè)置了中斷的端口,因此當(dāng)有中斷信號發(fā)出時,程序仍然會去執(zhí)行中斷子程,但由于中斷向量沒有正確設(shè)置,pc指針會跑飛,然后機(jī)器會自動復(fù)位,重新執(zhí)行程序。 5)如果中斷源采用的是p2.5, 按鍵用k6,請設(shè)計連線,修改l5_int.c 程序完成以中斷方式響 應(yīng)k6 的操作。 答:將 p2.5 引腳連線與 k6

8、相連,其他連線不變,連線圖如下: 修改后見 程序見 lab_5 項目,程序 l5_int-1.c 如下: #include io430.h #include in430.h void delay( ) /延時函數(shù) unsigned int j; for (j=0;j0xffff;j+); void blink( ) /led 閃 p2out =bit3; delay(); p2out |= bit3; delay(); void buzz( ) /蜂鳴響 unsigned int i; for (i=0;i3;i+) p2out =bit4; delay(); p2out|= bit4; de

9、lay(); ; void main ( void ) wdtctl = wdtpw + wdthold; /關(guān)閉看門狗 /設(shè)置引腳 p2.4、p2.3 輸出,p2.3 連接 led,p2.4 連接蜂鳴器 p2sel =(bit3+bit4); p2sel2 =(bit3+bit4); p2out|=(bit3+bit4); p2dir|=(bit3+bit4); /設(shè)置端口 p2.5 允許中斷 p2sel = bit5; p2sel2 = bit5; p2out |=bit5; p2ren |=bit5; p2dir =bit5; p2ies |= bit5; p2ifg =bit5; p2

10、ie |= bit5; _eint(); /總中斷允許 for (;) /主循環(huán) blink(); ; #pragma vector=port2_vector _interrupt void port_isr( ) buzz(); p2ifg =bit5; 2. 中斷程序編程練習(xí) 在實驗板上用跳線將按鍵 k2、k7 分別與單片機(jī)的p1.2 和p1.7 相連,編程以中斷方式響應(yīng)按鍵k2 和k7 的請求:當(dāng)按下一次k2 鍵,實驗板上的蜂鳴器發(fā)出一警報聲;當(dāng)按下一次k7 鍵,實驗板上的發(fā)光二極管l2 閃2 次。主循環(huán)中控制l5 循環(huán)閃亮。 : 答:用跳線將按鍵 k2、k7 分別與單片機(jī)的 p1.2

11、和 p1.7 相連,p2.1、p2.4 分別連接 l2和 l5,p2.3 連接蜂鳴器, 接線圖如下: : 修改后見 程序見 lab_5 項目,程序 l5_int-2.c 如下: #include io430.h #include in430.h void delay( ) /延時函數(shù) unsigned int j; for (j=0;j0xffff;j+); void l2blink( ) /l2 閃 2 次 unsigned int i; for (i=0;i2;i+) p2out =bit1; delay(); p2out|= bit1; delay(); ; void l5blink(

12、) /l5 閃 p2out =bit4; delay(); p2out |= bit4; delay(); void buzz( ) /蜂鳴響 p2out =bit3; delay(); p2out|= bit3; delay(); void main ( void ) wdtctl = wdtpw + wdthold; /關(guān)閉看門狗 /設(shè)置引腳 p2.1、p2.3 、p2.4 輸出,p2.1、p2.4 分別連接 l2 和 l5,p2.3 連接蜂鳴器 p2sel =(bit1+bit3+bit4); p2sel2 =(bit1+bit3+bit4); p2out|=(bit1+bit3+bit

13、4); p2dir|=(bit1+bit3+bit4); /設(shè)置端口 p1.2、p1.7 允許中斷 k2、k7 分別與單 p1.2 和 p1.7 相連 p1sel = (bit2+bit7); p1sel2 = (bit2+bit7); p1out |=(bit2+bit7); p1ren |=(bit2+bit7); p1dir =(bit2+bit7); p1ies |= (bit2+bit7); p1ifg =(bit2+bit7); p1ie |= (bit2+bit7); _eint(); /總中斷允許 for (;) /主循環(huán) l5blink(); ; #pragma vector

14、=port1_vector _interrupt void port_isr( ) if (p1ifgbit2)!=0) buzz(); p1ifg =bit2; ; if (p1ifgbit7)!=0) l2blink(); p1ifg=bit7; 思考: 1) 如果按鍵 k2、k7 分別連接在p2.1 和p2.6 上,如何修改程序以實現(xiàn)任務(wù)2 功能? 答: : p2.0、p2.4 分別連接 l2 和 l5,p2.3 連接蜂鳴器,p2.1、p2.6 分別連接按鍵 k2、k7,接線圖如下: 修改后見 程序見 lab_5 項目,程序 l5_int-3.c 如下: #include io430.h

15、 #include in430.h void delay( ) /延時函數(shù) unsigned int j; for (j=0;j0xffff;j+); void l2blink( ) /l2 閃 2 次 unsigned int i; for (i=0;i2;i+) p2out =bit0; delay(); p2out|= bit0; delay(); ; void l5blink( ) /l5 閃 p2out =bit4; delay(); p2out |= bit4; delay(); void buzz( ) /蜂鳴響 p2out =bit3; delay(); p2out|= bit

16、3; delay(); void main ( void ) wdtctl = wdtpw + wdthold; /關(guān)閉看門狗 /設(shè)置引腳 p2.0、p2.3 、p2.4 輸出,p2.0、p2.4 分別連接 l2 和 l5,p2.3 連接蜂鳴器 p2sel =(bit0+bit3+bit4); p2sel2 =(bit0+bit3+bit4); p2out|=(bit0+bit3+bit4); p2dir|=(bit0+bit3+bit4); /設(shè)置端口 p2.1、p2.6 允許中斷,p2.1、p2.6 分別連接按鍵 k2、k7 p2sel = (bit1+bit6); p2sel2 = (b

17、it1+bit6); p2out |=(bit1+bit6); p2ren |=(bit1+bit6); p2dir =(bit1+bit6); p2ies |= (bit1+bit6); p2ifg =(bit1+bit6); p2ie |= (bit1+bit6); _eint(); /總中斷允許 for (;) /主循環(huán) l5blink(); ; #pragma vector=port2_vector _interrupt void port_isr( ) if (p2ifgbit1)!=0) buzz(); p2ifg =bit1; ; if (p2ifgbit6)!=0) l2bli

18、nk(); p2ifg=bit6; 2) 如果按鍵 k2、k7 分別連接在 p1.0 和 p2.4 上,如何修改程序以實現(xiàn)任務(wù) 2 功能? 答: : p2.1、p2.5 分別連接 l2 和 l5,p2.3 連接蜂鳴器,p1.0、p2.4 分別連接按鍵 k2、k7,接線圖如下: 修改后見 程序見 lab_5 項目,程序 l5_int-4.c 如下: #include io430.h #include in430.h void delay( ) /延時函數(shù) unsigned int j; for (j=0;j0xffff;j+); void l2blink( ) /l2 閃 2 次 unsigne

19、d int i; for (i=0;i2;i+) p2out =bit1; delay(); p2out|= bit1; delay(); ; void l5blink( ) /l5 閃 p2out =bit5; delay(); p2out |= bit5; delay(); void buzz( ) /蜂鳴響 p2out =bit3; delay(); p2out|= bit3; delay(); void main ( void ) wdtctl = wdtpw + wdthold; /關(guān)閉看門狗 /設(shè)置引腳 p2.1、p2.3 、p2.5 輸出,p2.1、p2.5 分別連接 l2 和

20、l5,p2.3 連接蜂鳴器 p2sel =(bit1+bit3+bit5); p2sel2 =(bit1+bit3+bit5); p2out|=(bit1+bit3+bit5); p2dir|=(bit1+bit3+bit5); /設(shè)置端口 p1.0、p2.4 允許中斷,p1.0、p2.4 分別連接按鍵 k2、k7 p1sel = bit0; p1sel2 = bit0; p1out |=bit0; p1ren |=bit0; p1dir =bit0; p1ies |= bit0; p1ifg =bit0; p1ie |= bit0; p2sel = bit4; p2sel2 = bit4;

21、p2out |=bit4; p2ren |=bit4; p2dir =bit4; p2ies |= bit4; p2ifg =bit4; p2ie |= bit4; _eint(); /總中斷允許 for (;) /主循環(huán) l5blink(); ; #pragma vector=port1_vector #pragma vector=port2_vector _interrupt void port_isr( ) if (p1ifgbit0)!=0) buzz(); p2ifg =bit3; ; if (p2ifgbit4)!=0) l2blink(); p2ifg=bit4; 3. 采用事件

22、標(biāo)志處理中斷 程序 l5_inta.c 和l5_intb.c(見后頁),描述其實現(xiàn)功能。在實驗板上將p1.4 與一個按鍵的控制端相連, p1.6 與蜂鳴器的控制端相連。 比較l5_inta.c 和l5_intb.c 二者在編程實現(xiàn)上有何不同。注意各自中斷函數(shù)執(zhí)行時間的長短。 用l5_intb.c 的方法,改寫任務(wù)2 的編程。 答: 程序見lab_5 項目下程序l5_inta.c與 程序見lab_5 項目下程序l5_intb.c在實驗板上進(jìn)行比較情況如下: 程序a和程序b實現(xiàn)的功能相同:用p1.4作為中斷源,當(dāng)p1.4接收到中斷信號時,控制蜂鳴器響一聲。不同的是程序a把控制蜂鳴器鳴叫的過程放在中

23、斷程序中,而程序b僅僅在中斷程序中設(shè)置了一個事件標(biāo)志,而把控制蜂鳴器鳴叫放在了while循環(huán)中,這樣每當(dāng)事件標(biāo)志被響應(yīng)時,蜂鳴器就會鳴一聲。因此程序a的中斷子程執(zhí)行時間長于程序b。 用 用 l5_intb.c 的方法 任務(wù) 2 2 修改編程:用跳線將按鍵 k2、k7 分別與單片機(jī)的 p1.2 和 p1.7 相連,p2.1、p2.4 分別連接 l2 和 l5,p2.3 連接蜂鳴器, 接線圖如下: : 修改后見 程序見 lab_5 項目,程序 l5_intb- -1 1c .c 如下: #include io430.h #include in430.h int flag=0; void delay

24、( ) /延時函數(shù) unsigned int j; for (j=0;j0xffff;j+); void l2blink( ) /l2 閃 2 次 unsigned int i; for (i=0;i2;i+) p2out =bit1; delay(); p2out|= bit1; delay(); ; void l5blink( ) /l5 閃 p2out =bit4; delay(); p2out |= bit4; delay(); void buzz( ) /蜂鳴響連 p2.3 p2out =bit3; delay(); p2out|= bit3; delay(); void main

25、( void ) wdtctl = wdtpw + wdthold; /關(guān)閉看門狗 /設(shè)置引腳 p2.1、p2.3 、p2.4 輸出,p2.1、p2.4 分別連接 l2 和 l5,p2.3 連接蜂鳴器 p2sel =(bit1+bit3+bit4); p2sel2 =(bit1+bit3+bit4); p2out|=(bit1+bit3+bit4); p2dir|=(bit1+bit3+bit4); /設(shè)置端口 p1.2 連 k2、p1.7 連 k7 允許中斷 p1sel = (bit2+bit7); p1sel2 = (bit2+bit7); p1out |=(bit2+bit7); p1r

26、en |=(bit2+bit7); p1dir =(bit2+bit7); p1ies |= (bit2+bit7); p1ifg =(bit2+bit7); p1ie |= (bit2+bit7); _eint(); /總中斷允許 for (;) /主循環(huán) l5blink(); if (flag=1) buzz(); flag=0; if (flag=2) l2blink(); flag=0; #pragma vector=port1_vector _interrupt void port_isr( ) if (p1ifgbit2)!=0) flag=1; p1ifg =bit2; ; if

27、 (p1ifgbit7)!=0) flag=2; p1ifg=bit7; 4 (提高)按鍵抖動處理 程序 l5_key.c 見后頁, 其功能是用中斷方式相應(yīng)與 p1.2 連接的按鍵,計數(shù)按鍵的次數(shù),并將所計的次數(shù)用8 個發(fā)光二極管顯示出來。運行該程序,并操作按鍵,觀察實際操作的次數(shù)與顯示值之間的關(guān)系。編程改進(jìn)l5_key.c 程序,用軟件方式去除按鍵抖動的影響。 說明: 通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān),當(dāng)機(jī)械觸點斷開、閉合時,由于機(jī)械觸點的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會一下子斷開。因而在閉合(按下)及斷開(釋放)的瞬間均伴隨有一連串的抖動,產(chǎn)生電壓毛刺,見圖

28、5-1機(jī)械按鍵的電壓變化圖。 在一次按鍵過程中,因為電壓毛刺的產(chǎn)生,會有若干次下降沿和上升沿。采用下降沿判斷時,只有第一次下降沿是真正的按鍵事件,其它是由于按鍵抖動帶來的毛刺,不是按鍵事件。去除這些毛刺帶來的影響,稱為按鍵消抖或去抖。軟件編程處理比較簡單的方法是,在響應(yīng)了第一次下降沿后,在中斷函數(shù)中加入一定的延時,躲過其它電壓毛刺的產(chǎn)生時間。 答: 通過在實驗板測試見 程序見 lab_5 項目 下程序 l5_key.c ,顯示按鍵次數(shù)大于實際數(shù)。 改進(jìn)在按鍵中斷程序增加延時函數(shù),調(diào)整延時長短,使實際按鍵數(shù)與顯示數(shù)值大致相等。 修改后見 程序見 lab_5 項 項 目,程序 l5_key- -1

29、 1c .c 如下: #include io430.h #include in430.h unsigned int number=0; /記錄響應(yīng)按鍵次數(shù) void delay( ) /延時函數(shù) unsigned int j; for (j=0; j0xffff; j+); int main( void ) wdtctl = wdtpw + wdthold; /關(guān)閉看門狗 _disable_interrupt(); /_dint(); 禁止總中斷 p2sel=0; /置 p2 為基本 i/o 功能 p2sel2=0; p2out=0xff; /置 p2 輸出的初值 p2dir=0xff; /置

30、 p2 為輸出方向 p1sel = bit2; /置 p1.2 允許中斷連 k3 p1sel2 = bit2; p1out |=bit2; p1ren |=bit2; p1dir =bit2; p1ies |= bit2; p1ifg =bit2; p1ie |= bit2; _enable_interrupt(); /_eint(); 總中斷運行 while(1) ; #pragma vector=port1_vector _interrupt void port_int(void) if( (p1ifgbit2)!=0 ) delay(); /增加延時函數(shù),避開毛刺 if ( (p1ifg

31、bit2)!=0 ) number+; p2out=number; p1ifg =bit2; 思考: : 1.延時函數(shù)加在按鍵中斷程序的什么位置? 為什么? 答:延時函數(shù)在按鍵中斷程序接收到信號之前,根據(jù)分析,需要在響應(yīng)了第一次下降沿后,加入一定的延時,躲過其它電壓毛刺的產(chǎn)生時間。 2.延時函數(shù)的延時長短如何控制? 答:通過實驗觀察可以發(fā)現(xiàn),改進(jìn)之前,二進(jìn)制顯示的數(shù)值明顯大于實際按鍵數(shù),而改進(jìn)之后,兩者數(shù)值大致相等以此來調(diào)整延時長短。 3.除延時方法去抖外,有沒有其他的方法可去抖?可上網(wǎng)查找相關(guān)資料了解。 答:在鍵數(shù)較少時可用硬件方法消除鍵抖動,如:rs 觸發(fā)器為常用的硬件去抖。 實驗 6 基

32、本時鐘和低功耗模式: 1. 數(shù)字示波器的使用 1)將信號源的波形在示波器上顯示出來,掌握測量周期、頻率、峰峰值的方法; 答:用示波器測得信號源的周期 t=20us、頻率 f=1.000khz、峰峰值 v=3.18v。 2)用導(dǎo)線將實驗板的地信號與示波器的地信號相連,測量實驗板上的 vcc 電源信號是否正常。 答: : 測得實驗板上 vcc 信號正常,vccmax=3.76v,vccmin=3.52v,vccavg=3.66v。 2. 測試上電復(fù)位系統(tǒng)的 aclk 、和 smclk 時鐘頻率 新創(chuàng)建的一個msp430g2553 項目,在給出的main.c 基礎(chǔ)上,編程輸出單片機(jī)上電復(fù)位后的acl

33、k、和smclk 時鐘,用示波器測量其頻率值,記錄下來。 答:程序需要置引腳 p1.0、p1.4 分別輸出 aclk、smclk,需要確認(rèn)外部晶振連上,輸出的 aclk 頻率為 f(aclk)=32.7khz,smclk 的頻率為 f(smclk)=1.031mhz。接線如下: 見 程序見 lab_6 項目,程序 l6_pin.c 如下: #include io430.h int main( void ) /關(guān)閉看門狗 wdtctl = wdtpw + wdthold; /設(shè)置 p2.6、p2.7 連接外部晶振 p2sel|=(bit6+bit7); p2sel2=(bit6+bit7); p

34、2dir=bit6; p2dir|=bit7; /設(shè)置 p1.0、p1.4 輸出 aclk、smclk p1sel|=bit0; p1sel2=bit0; p1dir|=bit0; p1sel|=bit4; p1sel2=bit4; p1dir|=bit4; while(1); 思考 : 1) 實驗板上jp8 中間的兩個插針接到32.768kh 晶振側(cè)和接到p2.6/p2.7 側(cè),測得aclk 的結(jié)果有何不同? 為什么? 答:是由 32.768khz 低頻振蕩器控制的,因此比較精確,示波器測量的精確值和理論值相差不大,接到 p2.6/p2.7 側(cè)是由片內(nèi)低功耗低頻振蕩器控制的,受環(huán)境溫度和工作

35、電壓影響較大,因此測量值和理論值相差較大。 2) 在debug 下如圖6-1,通過view/register 更改system clock 模塊控制寄存器值,分別置diva1、diva0=01、11;divs1、divs0=10、11;置lfxt1s0、lfxt1s0=00、10,記錄示波器測量得到的aclk(p1.0 輸出)和smclk(p1.4 輸出)的頻率值,填寫在表6-1、6-2、6-3 中,掌握時鐘模塊各控制寄存器相關(guān)位的作用。 表 6-1 divaxx 與 aclk 關(guān)系 diva1 diva0 aclk 頻率值 作用 0 1 1 1 表 6-2 divsxx 與 smclk 關(guān)系

36、 divs1 divs0 smclk 頻率值 作用 1 0 1 1 表 6-3 lfxt1sxx 與 aclk 關(guān)系 lfxt1s1 lfxt1s0 aclk 頻率值 時鐘來源 0 0 1 0 3) 上電復(fù)位后,cpu 工作的時鐘信號 mclk 頻率值是多少? 答:上電復(fù)位后,通過查看基本時鐘模塊相關(guān)寄存器,發(fā)現(xiàn) bcsctl2 寄存器上 selm 位為00,sels 位為則 0,可知 mclk 的時鐘源為 dco,smclk 的時鐘源也為 dco,因此通過測量上面復(fù)位后的 smclk 頻率可知 mclk 的頻率,由上述可知 f(mclk)=1.031mhz。 3. 掌握基本時鐘模塊的編程控制

37、 參看附錄a 實驗板原理圖,用跳線將jp8 中的插針信號接到晶振32.768khz 側(cè),使晶振與單片機(jī)的p2.6 和p2.7 相連。編程控制基本時鐘模塊,設(shè)置aclk 分別為下面時鐘頻率,并通過p1.0輸出aclk,用示波器觀察: 1) aclk=16.384khz;(時鐘源外部晶振二分頻,即32768hz/2) 答:p2.6、p2.7 連接外部晶振引腳,通過 p1.0 輸出 aclk,觀察的 f(aclk)=16.3khz。接線如下圖: 見 程序見 lab_6 項目,程序 l6_pin - 1.c 如下: #include io430.h int main( void ) / stop wa

38、tchdog timer to prevent time out reset wdtctl = wdtpw + wdthold; p1sel|=bit0; /設(shè)置 p1.0 輸出 aclk p1sel2=bit0; p1dir|=bit0; p2sel|=bit6; /設(shè)置 p2.6、p2.7 連接外部晶振引腳 p2sel2=bit6; p2dir=bit6; /p2.6 xin 輸入 p2sel|=bit7; p2sel2=bit7; p2dir|=bit7; /p2.7 xou 輸出 bcsctl1|=diva_1; /設(shè)置 aclk 為 2 分頻 while(1); 2) aclk=1.

39、5khz;(時鐘源vloclk 八分頻,即12khz/8) 答:通過 p1.0 輸出 aclk,觀察的 f(aclk)=1.4khz。 見 程序見 lab_6 項目,程序 l6_pin - 2.c 如下: #include io430.h int main( void ) / stop watchdog timer to prevent time out reset wdtctl = wdtpw + wdthold; p1sel|=bit0; /設(shè)置 p1.0 輸出 aclk p1sel2=bit0; p1dir|=bit0; bcsctl1|=diva_3; /設(shè)置 aclk 時鐘源為 vl

40、oclk,并為 8 分頻 bcsctl3|=lfxt1s_2; while(1); 思考 :可否通過對時鐘模塊編程在引腳 p2.4 上輸出 aclk? 為什么? 答:不可以,因為根據(jù)說明指導(dǎo)書 msp430g2553 的輔助時鐘 aclk 是由 p1.0 輸出的,內(nèi)部硬件電路設(shè)計結(jié)構(gòu)決定了不能用 p2.4 輸出 aclk。 4. dco 出廠校驗值的頻率檢測 1)利用出廠校驗值,編程使dco 分別為1mhz、16mhz,通過p1.4 輸出,并用示波器測量實際值。 答: : 出廠校驗值為 1mhz 時,f 實際=0.991mhz,出廠校驗值為 16mhz 時,f 實際=16.17mhz。 以上測

41、試數(shù)據(jù)說明:dcoclk 是由片內(nèi)數(shù)字可控 rc 振蕩器控制的,受環(huán)境溫度和工作電壓的影響較大,因此出廠校驗值和實際測量值也存在不小的誤差。 見 程序見 lab_6 項目,程序 l6_pin - 3.c 如下: #include io430.h int main( void ) / stop watchdog timer to prevent time out reset wdtctl = wdtpw + wdthold; /關(guān)閉看門狗 p1sel|=bit4; /設(shè)置 p1.4 輸出 smclk p1sel2=bit4; p1dir|=bit4; bcsctl1=calbc1_1mhz; /

42、利用出廠校驗值設(shè)置 dco 的振蕩頻率為 1mhz, /其他情況改變 1mhz 就可以了 dcoctl=caldco_1mhz; while(1); 2)(提高)在實驗1 例程test_2553.c 基礎(chǔ)上,分別編程使主系統(tǒng)時鐘工作在(1) mclk = 復(fù)位頻率/8 約100khz;(2) mclk=dco=16mhz; 兩種不同mclk 頻率下,觀察燈的亮滅速度有何不同,掌握主系統(tǒng)時鐘的變化對程序執(zhí)行速度的影響。 答: : 經(jīng)實驗觀察可知,mclk 設(shè)置為 100khz 時 led1 燈的閃爍頻率比設(shè)置為 16mhz 慢了非常多,由此可知主系統(tǒng)時鐘是主要提供給 cpu 工作的時鐘,mclk

43、 頻率越高,cpu 工作速度越快。 (1) mclk = 復(fù)位頻率/8 約 100khz,程 程見 序見 lab_6 項目,程序 l6_pin - 4.c 如下: #include io430.h void delay( ) /延時函數(shù) unsigned int j; for (j=0;j0xffff;j+); int main( void ) / stop watchdog timer to prevent time out reset wdtctl = wdtpw + wdthold; p2sel=bit0; /設(shè)置 p2.0 連接 l1 控制 led1 閃爍 p2sel2=bit0; p

44、2dir|=bit0; bcsctl2|=divm_3; /設(shè)置 mclk=復(fù)位頻率/8 約 100khz; unsigned int i; while(1) for (i=0;i5;i+) p2out =bit0; delay(); p2out|=bit0; delay(); (2) mclk=dco=16mhz,程 程見 序見 lab_6 項目,程序 l6_pin - 5.c 如下: #include io430.h void delay( ) /延時函數(shù) unsigned int j; for (j=0;j0xffff;j+); int main( void ) / stop watch

45、dog timer to prevent time out reset wdtctl = wdtpw + wdthold; p2sel=bit0; /設(shè)置 p2.0 連接 l1 控制 led1 閃爍 p2sel2=bit0; p2dir|=bit0; bcsctl1=calbc1_16mhz; /利用出廠校驗值設(shè)置 dco 的振蕩頻率為 16mhz dcoctl=caldco_16mhz; unsigned int i; while(1) for (i=0;i5;i+) p2out = bit0; delay(); p2out |=bit0; delay(); 5. 低功耗模式學(xué)習(xí) 程序 l6

46、_lpm.c 見下,用跳線將p2.3 與l4 短接,將p2.4 用長杜邦線與buzz 短接,p1.1 與 k2短接,并用示波器分別觀察p1.0、p1.4 輸出的aclk 和smclk,了解低功耗模式的進(jìn)入和退出。 答:接線如下圖: 程 序見lab_6 項目,程序l6_lpm.c 清單(提供電子版): #include io430.h #include in430.h void delay( ) /延時函數(shù) unsigned int j; for (j=0;j0xffff;j+); void blink( ) /led閃 unsigned int i; for (i=0;i5;i+) p2out = bit3; delay(); p2out |=bit3; delay(); ; void buzz( ) /蜂鳴響 unsigned int i; for (i=0;i3;i+) p2out = bit4; delay(); p2out |=bit4; delay(); ; int main ( void ) wdtctl = wdtpw + wdthold; /關(guān)閉看門狗 /設(shè)置端口p2.3輸出,控制led,p2.4輸出,控制蜂鳴器 p2s

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論