版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)名稱:實(shí)驗(yàn)4:尋址方式和指令系統(tǒng)姓名:袁鵬學(xué)號(hào):2013011780實(shí)驗(yàn)班號(hào):33機(jī)器號(hào):42一.實(shí)驗(yàn)?zāi)康?.了解MSP430G2xxx匯編格式指令和常用尋址方式2.了解C語言函數(shù)調(diào)用過程3.通過反匯編了解C編譯器實(shí)現(xiàn)初始化變量的方法4.掌握計(jì)算機(jī)中數(shù)的表示和編碼二.實(shí)驗(yàn)任務(wù)1.匯編格式指令和尋址方式的學(xué)習(xí)代碼:#include"io430.h"voiddelay();//unsignedinti;intmain(void){ //定義函數(shù)變量 WDTCTL=WDTPW+WDTHOLD; //關(guān)閉看門狗 P2SEL=0; //設(shè)置端口2為功能選擇寄存器和2,使P2為基本輸入輸出功能 P2SEL2=0; P2OUT=0xff; //設(shè)置端口2輸出的初值為0xff P2DIR=0xff; //設(shè)置端口2為輸出方向 for(;;) //主循環(huán) { P2OUT=~P2OUT; //將端口2的值取反后輸出 delay(); //延時(shí) };}voiddelay(){ unsignedinti; for(i=0;i<0xffff;i++); //延時(shí)}1)程序用到了哪些指令?mov.wcallclr.bmov.binv.bjmppush.wdecd.wadd.wclr.wjneretbr2)程序用到了哪幾種尋址方式?立即數(shù)尋址寄存器尋址絕對(duì)地址尋址寄存器相對(duì)尋址3)用單步執(zhí)行命令F11,跟蹤函數(shù)delay的調(diào)用和返回,用view/register和view/memory查看堆棧指針SP和堆棧內(nèi)的內(nèi)容,記錄堆棧指針SP和堆棧內(nèi)容的變化;SP:0x03fe(執(zhí)行main函數(shù)時(shí))0x03fc(執(zhí)行delay函數(shù)時(shí))0x03fe0x03fc...堆棧中只有R15的值發(fā)生變化,因?yàn)镽15存放了變量i的值,因此不斷變化。4)修改l4_1.C,將變量i定義為全局變量,通過反匯編的代碼,比較與定義為局部變量的不同;匯編代碼長(zhǎng)度增加變量i的存儲(chǔ)地址由R15變?yōu)镽AM里面的0x02005)修改L4_1.C,將變量i的類型從unsignedint類型,改為unsignedlong類型,反匯編看看函數(shù)delay的代碼發(fā)生了什么變化?程序執(zhí)行的結(jié)果有什么不同?為什么?(需在實(shí)驗(yàn)板上運(yùn)行)。delay函數(shù)的地址變到main函數(shù)上部,i變量由兩個(gè)字節(jié)變?yōu)樗膫€(gè)字節(jié)delay函數(shù)的執(zhí)行時(shí)間變長(zhǎng),LED燈的變化速率變慢。因?yàn)樽兞縤從int轉(zhuǎn)換為long,因此i的增加速率變慢,dealy函數(shù)的執(zhí)行時(shí)間也就變長(zhǎng)。2.了解C語言程序的執(zhí)行過程實(shí)驗(yàn)中查看到該地址的值是多少?程序執(zhí)行的第一條指令是什么指令?main函數(shù)的入口是單片機(jī)上電就被執(zhí)行的第一條語句嗎?未去除runto:PC=0xc00c0XFFFE~0XFFFF:0X00C0第一條指令是關(guān)閉看門狗,00c00c40b25a800120mov.w#0x5a80,&wdtctlmain函數(shù)的入口就是單片機(jī)上電執(zhí)行的第一條語句。去除runto:PC=0xc0000XFFFE~0XFFFF:0X00C0第一條指令是初始化sp,00c00040310400mov.w#0x400,spmain函數(shù)的入口不是單片機(jī)上電執(zhí)行的第一條語句。3.C語言中帶初始化變量的定義及其實(shí)現(xiàn)在debug下反匯編程序,比較一個(gè)數(shù)組分別定義成const型常量、全局變量、局部變量三種不同形式,系統(tǒng)在初始值的實(shí)現(xiàn)上有何不同?代碼:#include"io430.h"constcharstring[4]={0x71,0x32,0xab,0x12}; //第1種const型常量//charstring[4]={0x71,0x32,0xab,0x12}; //第2種全局變量intmain(void){//charstring[4]={0x71,0x32,0xab,0x12}; //第3種局部變量//staticcharstring[4]={0x71,0x32,0xab,0x12};charsum;unsignedinti; WDTCTL=WDTPW+WDTHOLD;P2SEL=0;P2SEL2=0;P2DIR=0xff;sum=0;for(i=0;i<4;i++){sum=sum+(int)string[i];}P2OUT=sum;while(1);}定義成const型常量:從上電復(fù)位后執(zhí)行的第一條指令,到main()函數(shù)中關(guān)閉看門狗的語句:由于數(shù)組已經(jīng)被定義為const型,因此數(shù)組一開始就被分配在0xC000中并完成初始化,上面的代碼完成了初始化SP和開始執(zhí)行main函數(shù)的作用。定義成全局變量:數(shù)組被定義為全局變量時(shí)開始沒有被初始化,但是數(shù)組被分配在0x200地址里,數(shù)組里面數(shù)據(jù)存儲(chǔ)在0xC000中,因此上電后開始執(zhí)行初始化SP,以及將0xC000的賦給R13,將0x200賦給R12,接著跳轉(zhuǎn)執(zhí)行__data16_memcpy,并在memcpy函數(shù)里完成對(duì)數(shù)組初始化,然后返回執(zhí)行main函數(shù)。定義為局部變量:數(shù)組被定義為局部變量時(shí)開始沒有被初始化,也沒有分配存儲(chǔ)地址,但是數(shù)據(jù)里的數(shù)據(jù)還是存儲(chǔ)在0xC000中,上電后執(zhí)行到main函數(shù)里初始化數(shù)組的語句時(shí)程序?qū)?xC000賦給R15,接著用SP和R15完成初始化數(shù)組,并將數(shù)組分配在0x3FA地址中。(選做)定義為static型局部變量時(shí):數(shù)組被定義為static型局部變量時(shí),和定義為全局變量時(shí)類似,數(shù)組被一開始沒有被初始化,但是數(shù)組被分配在0x200地址里,數(shù)組里面數(shù)據(jù)存儲(chǔ)在0xC000中,因此上電后開始執(zhí)行初始化SP,以及將0xC000的賦給R13,將0x200賦給R12,接著跳轉(zhuǎn)執(zhí)行__data16_memcpy,并在memcpy函數(shù)里完成對(duì)數(shù)組初始化,然后返回執(zhí)行main函數(shù)。4.(選做)掌握計(jì)算機(jī)中數(shù)的表示和編碼假設(shè)某內(nèi)存單元的字內(nèi)容為0xFF06,試問該內(nèi)容看作無符號(hào)數(shù)是多少?看作帶符號(hào)數(shù)是多少?看作一條指令的機(jī)器碼,如何利用DEBUG下的命令知道表示一條什么指令?如果內(nèi)存單元的內(nèi)容為0x5439,看作無符號(hào)數(shù)、看作帶符號(hào)數(shù)、看作一條指令的機(jī)器碼,分別表示什么?看作ASCII碼,表示的是哪兩個(gè)字符?如何理解存放在內(nèi)存中的內(nèi)容?0XFF06看作無符號(hào)數(shù)是65286,看作有符號(hào)數(shù)是-250。建立一個(gè)C項(xiàng)目,在DEBUG下,利用memory命令,將RAM區(qū)的內(nèi)容改為0x06,0xFF,再用disassembly命令反匯編該RAM區(qū)內(nèi)容,可查看0xFF06所代表的指令為and.wR15,R6。0x5439看作無符號(hào)數(shù)是21561,看作帶符號(hào)數(shù)也是21561,看作指令的機(jī)器碼則所代表的指令是add.w@R4+,R9,看作ASCII碼的話表示5I。內(nèi)存中存放的內(nèi)容是二進(jìn)制數(shù)編碼表示的指令是機(jī)器碼,是CPU能夠直接識(shí)別的語言,能夠被機(jī)器識(shí)別并轉(zhuǎn)化為相應(yīng)的操作指令。思考:為什么查看0xFF06是一條什么指令的機(jī)器碼時(shí),按順序修改存儲(chǔ)單元的內(nèi)容時(shí)輸入的是0x06,0xFF,而不是0xFF,0x06?因?yàn)镸SP430存儲(chǔ)器的讀寫模式采用的是小端模式,即低字節(jié)到低地址單元,高字節(jié)到高地址單元,所以當(dāng)寫入0x06,0xFF時(shí),表示的正是0xFF06。實(shí)驗(yàn)名稱:實(shí)驗(yàn)5.單片機(jī)應(yīng)用系統(tǒng)硬件組成姓名:袁鵬學(xué)號(hào):2013011780實(shí)驗(yàn)班號(hào):33機(jī)器號(hào):42一.實(shí)驗(yàn)?zāi)康?.了解MSP430F1xx單片機(jī)結(jié)構(gòu)及其編程仿真接口2.了解MSP430G2xxx兩線制JTAG編程仿真接口3.了解單片機(jī)應(yīng)用系統(tǒng)的基本硬件組成4.學(xué)習(xí)相對(duì)復(fù)雜項(xiàng)目的程序結(jié)構(gòu)和良好編程風(fēng)格二、實(shí)驗(yàn)任務(wù)1.了解MSP430F1xx單片機(jī)結(jié)構(gòu)及其編程仿真接口MSP430F149單片機(jī)的引腳基本輸入/輸出控制與MSP430G2553的基本相同,不同的是:1)MSP430F149有P1~P6六個(gè)I/O端口;2)各I/引腳在MSP430F149內(nèi)沒有上拉電阻,所以沒有PxREN寄存器;3)MSP430F149的引腳有64根,每個(gè)引腳的復(fù)用功能沒有MSP430G2553多,所以沒有PxSEL2寄存器。因此,在將實(shí)驗(yàn)2中用MSP430G2553上完成的任務(wù)2、任務(wù)3的C語言程序移植到MSP430F149上時(shí),要根據(jù)MSP430F149的結(jié)構(gòu)對(duì)程序進(jìn)行相應(yīng)的調(diào)整。具體代碼如下:代碼1:#include"io430.h"voiddelay(void);intmain(void){//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;unsignedcharLEDdata1[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharLEDdata2[4]={0x7e,0xbd,0xdb,0xe7};unsignedinti;P2SEL=0;P2OUT=0;P2DIR=0xFF;while(1){for(i=0;i<12;i++){if(i<8)P2OUT=LEDdata1[i];elseP2OUT=LEDdata2[i-8];delay();}};}voiddelay(){unsignedintj;for(j=0;j<0xffff;j++);}代碼2:#include"io430.h"voiddelay(void);intmain(void){//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;unsignedcharLEDdata1[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharLEDdata2[4]={0x7e,0xbd,0xdb,0xe7};unsignedinti,key=0;P2SEL=0;P2OUT=0xff;P2DIR=0xFF;P1SEL&=~(BIT0+BIT1);P1DIR&=~(BIT0+BIT1);P1OUT=0XFF;while(1){if((P1IN&BIT0)==0)key=1;elseif((P1IN&BIT1)==0)key=2;if(key==1)for(i=0;i<8;i++){P2OUT=LEDdata1[i];delay();}elseif(key==2)for(i=0;i<4;i++){P2OUT=LEDdata2[i];delay();}};}voiddelay(){unsignedintj;for(j=0;j<0xffff;j++);}2.了解MSP430G2xxx兩線制JTAG編程仿真接口根據(jù)MSP430的結(jié)構(gòu)特點(diǎn),MSP430G2xxx實(shí)驗(yàn)板上有板載仿真器,因此既可以直接連接USB線進(jìn)行仿真調(diào)試,又可以利用板載仿真器進(jìn)行仿真調(diào)試。后者具體可以通過兩種方式進(jìn)行:一是用eZ板載仿真器對(duì)MSP430G2553單片機(jī)進(jìn)行仿真調(diào)試:將一塊實(shí)驗(yàn)班做仿真器用,一塊做目標(biāo)實(shí)驗(yàn)板使用。二是用USB型430JTAG仿真器對(duì)MSP430G2553單片機(jī)進(jìn)行仿真調(diào)試,將USB型430JTAG與實(shí)驗(yàn)班采用兩線制線的方式連接起來。L5_LED.c代碼如下:#include"io430.h"intmain(void){//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;P1SEL=0;P1SEL2=0;P1DIR|=(BIT0+BIT6);P1DIR&=~BIT3;P1OUT|=BIT3;P1REN|=BIT3;while(1){if((P1IN&BIT3)==0)P1OUT|=(BIT0+BIT6);e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GB-T 27509-2011透射式投影器 投影臺(tái)尺寸》專題研究報(bào)告
- 《GBT 33452-2016 洗染術(shù)語》專題研究報(bào)告
- 《儲(chǔ)能材料與器件分析測(cè)試技術(shù)》課件-BTS測(cè)試軟件設(shè)置與認(rèn)知
- 《寵物鑒賞》課件-北京犬
- 2026年成都紡織高等??茖W(xué)校單招職業(yè)傾向性測(cè)試題庫(kù)及參考答案詳解
- 《藥品生物檢定技術(shù)》創(chuàng)新課件-中醫(yī)藥智慧康養(yǎng)度假村商業(yè)藍(lán)圖
- 虛擬電廠能源調(diào)度信息服務(wù)合同
- 智能手表維修技師(中級(jí))考試試卷及答案
- 珠寶設(shè)計(jì)師崗位招聘考試試卷及答案
- 2026年安全檢查工作計(jì)劃
- 村級(jí)事務(wù)監(jiān)督工作報(bào)告
- T/TAC 10-2024機(jī)器翻譯倫理要求
- 兄妹合伙買房協(xié)議書
- 家庭農(nóng)場(chǎng)項(xiàng)目可行性報(bào)告
- 施工升降機(jī)防護(hù)方案
- 溫室大棚可行性報(bào)告修改版
- JISG3141-2017冷軋鋼板及鋼帶
- 瑞加諾生注射液-藥品臨床應(yīng)用解讀
- 2025中醫(yī)體重管理臨床指南
- xx區(qū)老舊街區(qū)改造項(xiàng)目可行性研究報(bào)告
- 《新聞基礎(chǔ)知識(shí)》近年考試真題題庫(kù)(附答案)
評(píng)論
0/150
提交評(píng)論