嵌入式系統(tǒng)實(shí)訓(xùn)教程.doc_第1頁
嵌入式系統(tǒng)實(shí)訓(xùn)教程.doc_第2頁
嵌入式系統(tǒng)實(shí)訓(xùn)教程.doc_第3頁
嵌入式系統(tǒng)實(shí)訓(xùn)教程.doc_第4頁
嵌入式系統(tǒng)實(shí)訓(xùn)教程.doc_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)實(shí)訓(xùn)教程馬興錄2013-03-18目錄第1章 單片機(jī)實(shí)驗(yàn)教程11.1 單片機(jī)開發(fā)環(huán)境的搭建11.1.1 單片機(jī)開發(fā)環(huán)境介紹11.1.2 單片機(jī)開發(fā)環(huán)境的搭建11.1.3 聯(lián)機(jī)調(diào)試31.1.4 練習(xí)41.2 單片機(jī)聯(lián)機(jī)調(diào)試功能試驗(yàn)51.2.1 觀察各類存儲(chǔ)單元51.3 單片機(jī)定時(shí)器實(shí)驗(yàn)71.3.1 實(shí)驗(yàn)?zāi)康?1.3.2 設(shè)計(jì)要求71.3.3 實(shí)驗(yàn)原理71.3.4 實(shí)驗(yàn)步驟71.3.5 常見問題81.3.6 練習(xí)81.4 單片機(jī)中斷系統(tǒng)實(shí)驗(yàn)91.4.1 實(shí)驗(yàn)?zāi)康?1.4.2 設(shè)計(jì)要求91.4.3 實(shí)驗(yàn)原理91.4.4 實(shí)驗(yàn)步驟101.4.5 練習(xí)131.5 簡(jiǎn)單交通燈控制系統(tǒng)的設(shè)計(jì)141.5.1 實(shí)驗(yàn)?zāi)康?41.5.2 實(shí)驗(yàn)要求141.6 單片機(jī)串行通訊接口實(shí)驗(yàn)141.6.1 實(shí)驗(yàn)?zāi)康?41.6.2 實(shí)驗(yàn)要求141.6.3 實(shí)驗(yàn)原理1422第1章 單片機(jī)實(shí)驗(yàn)教程1.1 單片機(jī)開發(fā)環(huán)境的搭建本節(jié)目標(biāo):搭建Keil C51單片機(jī)編程開發(fā)環(huán)境,以及Proteus仿真環(huán)境,實(shí)現(xiàn)兩者的聯(lián)機(jī)調(diào)試。1.1.1 單片機(jī)開發(fā)環(huán)境介紹目前,51單片機(jī)的開發(fā)大都使用C51編程語言,基本不再使用匯編語言。這大大簡(jiǎn)化了單片機(jī)應(yīng)用程序的開發(fā)。當(dāng)前使用最多的開發(fā)環(huán)境是Keil C51。目前最高版本為uVision 4,除支持51系列單片機(jī)外,還可支持大多數(shù)的ARM芯片。Keil開發(fā)環(huán)境本身帶有模擬器,可以模擬調(diào)試單片機(jī)應(yīng)用程序。也可以與Proteusl聯(lián)合實(shí)現(xiàn)軟硬件聯(lián)調(diào),達(dá)到更好的仿真效果。Protues是硬件線路板的設(shè)計(jì)開發(fā)軟件,用來設(shè)計(jì)硬件線路連接原理圖及印刷電路板圖等,是常用的硬件線路版設(shè)計(jì)軟件。同時(shí),它還具有較強(qiáng)的硬件仿真能力,可以形象直觀地仿真硬件的運(yùn)行情況,特別是它可以仿真多種常見的處理器,允許給處理器提供相應(yīng)的程序并仿真運(yùn)行。因此目前最為流行的單片機(jī)學(xué)習(xí)及開發(fā)環(huán)境是Keil C51 + Proteus。1.1.2 單片機(jī)開發(fā)環(huán)境的搭建本文以Proteus 7.5和Keil uVision 2為例來搭建51單片機(jī)的開發(fā)環(huán)境。(1) 安裝Keil uVision2。(安裝完后,要將補(bǔ)丁文件復(fù)制到keilC51bin文件夾內(nèi))(2) 安裝Ptoteus 7.5。(安裝crack時(shí),要關(guān)閉殺毒軟件;Keil驅(qū)動(dòng)要等安裝完Keil之后再安裝)上述兩軟件均安裝在默認(rèn)文件夾內(nèi)。Proteus安裝在C:Program FilesLabcenter Electronics文件夾內(nèi),Keil安裝在c:keil文件夾內(nèi)。如果只使用keil編寫C51應(yīng)用程序,編譯生成可執(zhí)行文件(后綴為.hex)供Proteus使用,則兩個(gè)軟件無需配置,各自獨(dú)立使用即可,以下步驟則無需進(jìn)行。如想實(shí)現(xiàn)Keil與Proteus的聯(lián)機(jī)調(diào)試功能,則需要進(jìn)行如下配置:(1)運(yùn)行Proteus軟件包內(nèi)的 Keil驅(qū)動(dòng)vdmagdi.exe ,將驅(qū)動(dòng)安裝到keil的文件夾內(nèi)。安裝時(shí),選擇“AGDI Driver for uVision2”,然后選擇安裝目錄為c:keil即可。(2)運(yùn)行ISIS 7 Professional菜單Debug(調(diào)試),選中Use Remote Debug Monitor(使用遠(yuǎn)程調(diào)試監(jiān)控),該選項(xiàng)前應(yīng)該有“”。(3)創(chuàng)建或打開Keil C的工程后,選擇菜單Project-Options for Target Target 1 ,打開Options for Target Target 1 窗口后,選擇Debug選項(xiàng)卡,選擇右邊的Use:Proteus VSM Simulators,確定,如下圖所示:圖1 Keil工程的調(diào)試選項(xiàng)(4) 確保keil生成的可執(zhí)行文件與proteus項(xiàng)目中單片機(jī)所執(zhí)行的文件為同一個(gè)文件。Keil的輸出配置:如輸出文件名為ledc.hex,所在文件夾選擇好,Create HEX File選項(xiàng)前打“”。圖2 Keil 工程的輸出選項(xiàng)然后在Proteus的項(xiàng)目中,雙擊單片機(jī)器件,彈出如下窗口:圖3 Proteus項(xiàng)目?jī)?nèi)的單片機(jī)程序文件在該窗口內(nèi)選擇Program File為keil生成輸出的ledc.hex。1.1.3 聯(lián)機(jī)調(diào)試尋找可用的Proteus簡(jiǎn)單例程。如51單片機(jī)的流水燈例程。內(nèi)部包括Proteus項(xiàng)目(后綴為.DSN)以及對(duì)應(yīng)的C51程序項(xiàng)目文件(后綴為.uv2)。用Proteus打開.DSN的項(xiàng)目。確保該項(xiàng)目中的單片機(jī)程序?yàn)閘edc.hex,菜單選項(xiàng)Use Remote Debug Monitor前應(yīng)該有“”。進(jìn)入Keil環(huán)境,打開.uv2的項(xiàng)目文件。確保編譯輸出為ledc.hex;確保Debug選項(xiàng)如圖1所示。(1) 編譯C51工程。選擇菜單選項(xiàng)ProjectBuild target(2) 進(jìn)入調(diào)試模式。選擇菜單選項(xiàng)DebugStart/Stop Debug Session為觀察方便,可將兩個(gè)軟件窗口并排在桌面上,如下圖所示:(3) 在Keil內(nèi)單步執(zhí)行C51程序(按F10),可以看到Proteus內(nèi)的指示燈有相應(yīng)的亮滅變化。(選擇菜單ViewDisassembly Windows可以只保留C語句 )1.1.4 練習(xí)(1)針對(duì)流水燈硬件設(shè)計(jì)實(shí)例,自行創(chuàng)建相應(yīng)的C51應(yīng)用項(xiàng)目,實(shí)現(xiàn)流水燈從中間向兩邊流動(dòng)的效果。(2)在Proteus內(nèi),自行添加紅、黃、綠不同顏色的指示燈,然后編寫C51程序,讓這些燈閃爍起來。1.2 單片機(jī)聯(lián)機(jī)調(diào)試功能試驗(yàn)本實(shí)驗(yàn)要學(xué)會(huì)利用Keil開發(fā)環(huán)境,觀察單片機(jī)內(nèi)部的各類存儲(chǔ)器,掌握程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、SFR各自的特點(diǎn)及使用方法。熟練掌握聯(lián)機(jī)調(diào)試單片機(jī)程序的方法。1.2.1 觀察各類存儲(chǔ)單元(1)CPU內(nèi)部寄存器的觀察進(jìn)入程序調(diào)試運(yùn)行模式,Keil開發(fā)環(huán)境界面如圖所示:左側(cè)顯示CPU內(nèi)部的各寄存器名稱及其內(nèi)容,隨著程序的運(yùn)行,內(nèi)容發(fā)生變化的寄存器會(huì)議高亮顏色標(biāo)注出來。(2) C語言變量?jī)?nèi)容的觀察:打開“ViewWatch & Call Stack Window”。在C語言變量名字上按鼠標(biāo)右鍵,選擇“Add XXX to Watch Window”,這樣,該變量的內(nèi)容就會(huì)顯示在Watch Windows中,并隨著程序的執(zhí)行而變化。如圖所示:按F2可以修改變量名或刪除該變量。(3) 斷點(diǎn)的設(shè)置:在C語句的最左端雙擊(或選擇菜單項(xiàng)DebugInsert/Remove Breakpoint)可以添加或刪除斷點(diǎn)。這樣可以使用DebugGo(或F5鍵)全速運(yùn)行至斷點(diǎn)位置。1.3 單片機(jī)定時(shí)器實(shí)驗(yàn)1.3.1 實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)要學(xué)會(huì)單片機(jī)定時(shí)器的設(shè)定及使用。1.3.2 設(shè)計(jì)要求設(shè)計(jì)一個(gè)倒計(jì)時(shí)秒表。要求利用兩個(gè)7端數(shù)碼管組成一個(gè)2位數(shù)的倒計(jì)時(shí)秒表,根據(jù)給定初始值,倒計(jì)數(shù)至0。1.3.3 實(shí)驗(yàn)原理(1)單片機(jī)定時(shí)器8051單片機(jī)內(nèi)部集成了2個(gè)16位的計(jì)數(shù)器??梢愿鶕?jù)需要將其作為定時(shí)器使用。這時(shí),定時(shí)器的計(jì)數(shù)頻率為系統(tǒng)CLK/12。如果CPU采用12MHz的晶振,則定時(shí)信號(hào)源的頻率固定為12MHz/12=1MHz。如果定時(shí)周期設(shè)定為50ms,則需要計(jì)數(shù)0.05S/1MHz=50000個(gè)脈沖。因?yàn)閱纹瑱C(jī)定時(shí)器為加1計(jì)數(shù)器,所以,計(jì)數(shù)器初始值應(yīng)設(shè)定為65536-50000=15536(即16進(jìn)制的3CB0)。另外,還需要設(shè)置定時(shí)器工作模式寄存器TMOD。如果使用定時(shí)器0,16位定時(shí)器方式,則TMOD=0x01。(2)數(shù)碼管顯示原理1.3.4 實(shí)驗(yàn)步驟(1)學(xué)習(xí)實(shí)驗(yàn)例程:數(shù)碼管顯示 用Proteus軟件打開其原理圖;用Keil軟件打開配套的C語言工程項(xiàng)目。編譯運(yùn)行程序,觀察數(shù)碼管的顯示情況,了解數(shù)碼管的顯示原理。重點(diǎn)學(xué)習(xí)C語言中數(shù)碼管編碼表的作用及用法。(2)修改原理圖打開Proteus軟件,修改數(shù)碼管例程,添加一個(gè)7段數(shù)碼管,接至P1端口。注意數(shù)碼管要選擇共陽極類型,公共端要連接VCC。(3)修改程序打開Keil軟件,打開數(shù)碼管的配套工程項(xiàng)目。定義變量sec,用于存放秒數(shù)。Char sec=99;顯示兩位數(shù)的方法:While(1)P2=tabsec/10; /顯示十位數(shù)P1=tabsec%10; /顯示個(gè)位數(shù)If(-sec0)sec=99;/重新計(jì)數(shù)Delay(0xff);(4)利用定時(shí)器實(shí)現(xiàn)準(zhǔn)確延時(shí) 修改delay()函數(shù)如下:Void delay(int nsec)int i; TMOD=0x01;/16 bits,internal pulse counting for(i=0;i20)/如果定時(shí)器設(shè)定為50ms中斷一次,在此計(jì)數(shù)20次,則1S時(shí)間到。/進(jìn)行1s的定時(shí)操作二、數(shù)碼管的動(dòng)態(tài)顯示原理1.4.4 實(shí)驗(yàn)步驟一、修改原理圖: 1) 首先,學(xué)習(xí)使用連線標(biāo)號(hào)(Wire Label)實(shí)現(xiàn)信號(hào)連接。如上圖,選擇窗口左側(cè)的“LBL”,然后,鼠標(biāo)移至相應(yīng)連線上,出現(xiàn)T型標(biāo)志時(shí),點(diǎn)擊鼠標(biāo)左鍵,彈出如下窗口:輸入連線標(biāo)號(hào),如P21,表明該信號(hào)連至單片機(jī)的P21引腳。同樣,需要將單片機(jī)的P21引腳連上線,并標(biāo)注相同的標(biāo)號(hào)。這樣,標(biāo)號(hào)相同的連線在物理上是連接在一起的。2)實(shí)現(xiàn)單組LED的連接放置LED,型號(hào)選擇7SEG-MPX2-CA-BLUE;然后實(shí)現(xiàn)如圖連線。3)利用復(fù)制功能,放置4組LED。注意修改個(gè)器件的標(biāo)號(hào)以及數(shù)碼管公共端的連線標(biāo)號(hào),不要沖突。分別時(shí)用P1口的8個(gè)引腳控制8個(gè)數(shù)碼管的公共端,如下圖:二、修改程序1)首先使用循環(huán)延時(shí)的方法在數(shù)碼管上顯示不同的數(shù)字。利用上次實(shí)驗(yàn)的程序,主函數(shù)修改如下:Main()int i;while(1) P1=0x01; /P10=1,左側(cè)數(shù)碼管顯示 P2=tab2; /顯示數(shù)字2 Delay(2); /延時(shí) P1=0x02; /P11=1,右側(cè)數(shù)碼管顯示 P2=tab3;/顯示數(shù)字3 Delay(2);該程序在上方的數(shù)碼管上顯示23,如圖:2)4組數(shù)碼管顯示不同數(shù)字。將上述程序中的顯示語句復(fù)制,增加其他數(shù)碼管控制端的語句,即可在其他數(shù)碼管上顯示。如:While(1)for(i=0;i8;i+) P1=1i; P2=tabi; delay(2); 該程序在8各數(shù)碼管上分別顯示數(shù)字0-7,運(yùn)行效果如下:3)利用定時(shí)中斷實(shí)現(xiàn)動(dòng)態(tài)顯示int LED_SEG=1;char li=0;void timer0_2ms() interrupt 1TH0=0xf8; TL0=0x30; /Initial value=65535-10000=55535,10ms in 12MHz TF0=0;P1 = 17)li=0;main() TMOD=0x01;/16 bits,internal pulse countingTH0=0xf8; TL0=0x30; /Initial value=65535-2000=63536,2ms in 12MHz TF0=0; TR0=1; /start Timer 0 IE = 0x82; while(1); 該程序利用2ms中斷處理程序,每隔2ms顯示1位數(shù)字,利用中斷可以不停刷新8個(gè)數(shù)碼管。主程序可以安排其他任務(wù)。1.4.5 練習(xí) 修改程序,增加一個(gè)函數(shù)disp(char seg,char data),用于在指定的某組數(shù)碼管上顯示2位十進(jìn)制數(shù)字data。1.5 簡(jiǎn)單交通燈控制系統(tǒng)的設(shè)計(jì)1.5.1 實(shí)驗(yàn)?zāi)康?練習(xí)單片機(jī)控制程序的設(shè)計(jì),掌握以中斷處理程序?yàn)橹鞯能浖O(shè)計(jì)方法1.5.2 實(shí)驗(yàn)要求 在實(shí)驗(yàn)1.4的基礎(chǔ)上,增加四個(gè)方向的紅黃綠指示燈。按十字路口交通燈的控制要求,實(shí)現(xiàn)固定時(shí)間間隔的交通燈控制。1.5.3 程序設(shè)計(jì)一、程序?qū)崿F(xiàn)的主要功能:(1)數(shù)碼管的動(dòng)態(tài)顯示數(shù)碼管的動(dòng)態(tài)顯示需要定期刷新才能保證顯示的正確性。該功能可以放在定時(shí)中斷處理程序中實(shí)現(xiàn)。實(shí)現(xiàn)的思路如下:定義顯示緩沖區(qū),存放4組數(shù)碼管上顯示的2位數(shù):unsigned char dispbuf8;volatile unsigned char li=0;利用定時(shí)中斷處理程序刷新顯示:void timer0_2ms() interrupt 1TH0=0xf8; TL0=0x30; /Initial value=65535-2000=63535,2ms in 12MHz TF0=0;P1 = 17)li=0;再定義函數(shù)disp(char seg,char data),用于修改顯示緩沖區(qū),在指定的某組數(shù)碼管上顯示2位十進(jìn)制數(shù)字data。Void disp(char seg,char data)Dispbufseg * 2 = data % 10; /個(gè)位數(shù) Dispbufseg * 2 + 1 = data /10;/十位數(shù)(2)倒計(jì)時(shí)及紅綠燈的轉(zhuǎn)換該部分功能可以放在定時(shí)中斷中完成,也可以放在主程序中完成。下面例子是用主程序?qū)崿F(xiàn):定義計(jì)時(shí)變量:int tcount=500;/用于計(jì)時(shí)1S bit SecFlag=0;在定時(shí)中斷程序中進(jìn)行計(jì)時(shí)判斷:if(-tcount = 0) SecFlag = 1; tcount = 500;在主程序中進(jìn)行秒計(jì)時(shí)處理main() While(1) If(SecFlag) /1S時(shí)間到 SecFlag=0; 進(jìn)行4個(gè)方向的通行時(shí)間到計(jì)時(shí);判斷并切換紅黃綠燈;調(diào)用disp函數(shù)修改時(shí)間顯示等 IDL=1;/讓單片機(jī)處于空閑狀態(tài),本語句可選 1.5.4 練習(xí)將每個(gè)方向的通行時(shí)間設(shè)為變量,編寫函數(shù)SetTrafficTime(char dir,char t)。1.6 單片機(jī)串行通訊接口實(shí)驗(yàn)1.6.1 實(shí)驗(yàn)?zāi)康?學(xué)習(xí)單片機(jī)串行通訊的使用,掌握以中斷方式來處理串行通訊1.6.2 實(shí)驗(yàn)要求 在實(shí)驗(yàn)1.5的基礎(chǔ)上,利用串行通訊,實(shí)現(xiàn)交通燈控制系統(tǒng)的遠(yuǎn)程設(shè)置。允許通過串口設(shè)定各方向的通行時(shí)間及紅黃綠指示燈的控制方式。1.6.3 實(shí)驗(yàn)原理8051單片機(jī)內(nèi)部集成了1路UART接口,用于實(shí)現(xiàn)串行通訊。如果需要實(shí)現(xiàn)自定義波特率的串行通訊,需要使用定時(shí)器1來產(chǎn)生波特率。(1) 首先,設(shè)置定時(shí)器1的工作模式及初始值TMOD = 0x21; /*-T1:Mode 2;T0:Mode 1*/*Baud Rate=(T1 overflow rate)* 2SMOD/32T1 overflow rate=(fosc/12)/(256-TH1)So if Baud rate is 1200bps, TH1 will be(fosc=11.0592MHz)256-TH1=(11059200/12)/(1200*32)TH1=232=E8(Hex)*/ TH1=0xe8;/0xfd; TL1=0xe8;/1200bps/0xfd;/*9600bps*/ TR1=1; /Start timer1 to generate BAUD rate pulse(2) 設(shè)置串行通訊格式: SCON = 0x50; /Mode 1, T1=baud(3) 允許串行通訊中斷IE = 0x90;/EA=1;ES=1;(4) 編寫串行通訊中斷處理程序void uart_int() interrupt 4unsigned char c; if(RI) /接收中斷 /數(shù)據(jù)接收及處理 Else /發(fā)送中斷,無任何處理 TI =0; 1.6.4 通訊協(xié)議實(shí)現(xiàn)串行通訊的雙方要遵從同樣的協(xié)議,以便進(jìn)行數(shù)據(jù)的定義及處理。在儀器儀表中,經(jīng)常使用Modbus協(xié)議,也可以使用自定義協(xié)議。有關(guān)Modbus協(xié)議請(qǐng)參考相關(guān)資料。為簡(jiǎn)化程序,在此使用自定義協(xié)議:協(xié)議數(shù)據(jù)包由5個(gè)ASCII字符組成:B0:首字符,表示方向,用字母N、S、E、W分別表示North、South、East和West四個(gè)方向。B1:大寫字母R表示紅燈時(shí)間,G表示綠燈時(shí)間。黃燈時(shí)間固定為3秒。B2-B4:十進(jìn)制ASCII碼表示的3位數(shù)時(shí)間,B2存放百位數(shù),B3十位數(shù),B4個(gè)位數(shù)如設(shè)置方向北的紅燈時(shí)間為123秒,協(xié)議包為:NR123unsigned char RcvBuf8; /接收緩沖區(qū)unsigned char RcvNum=0; /接收到的字符個(gè)數(shù) /協(xié)議包的接收與處理void uart_int() interrupt 4unsigned char c; if(RI) /接收中斷 RI = 0; c = SBUF;If( (c=N) | (c=S) | (c=E) | (c=W) /首字符 RcvBuf0=c; RcvNum=1;Else if(RcvNum)/接收后續(xù)字符 RcvBufRcvNum+=c; If(RcvNum=5)/接收到完整的數(shù)據(jù)包 /數(shù)據(jù)包的處理,修改對(duì)應(yīng)方向的時(shí)間變量 Else /發(fā)送中斷,無任何處理 TI =0; 1.6.4 實(shí)驗(yàn)步驟(1)打開Proteus軟件,打開上個(gè)實(shí)驗(yàn)項(xiàng)目。(2)添加虛擬終端器件:終端的TxDRxD分別與單片機(jī)的RxDTxD引腳對(duì)接(3)利用Keil,修改源程序,增加串行通訊功能。1.7 單片機(jī)課程設(shè)計(jì)1.7.1 課程設(shè)計(jì)要求(1)設(shè)計(jì)一個(gè)完整的單片機(jī)應(yīng)用系統(tǒng)。具體應(yīng)用可以是交通燈控制系統(tǒng),也可以是自選題目(需與老師商量)。(2)要求首先確定系統(tǒng)的功能,即進(jìn)行需求分析,形成系統(tǒng)需求分析說明書。(3)完成系統(tǒng)的硬件設(shè)計(jì):用Proteus實(shí)現(xiàn)硬件電路原理圖的設(shè)計(jì)。(4)完成配套軟件的設(shè)計(jì):用Keil C51開發(fā)程序,并能在Proteus中仿真運(yùn)行。1.7.2 提交 (1)文檔:系統(tǒng)的需求分析說明書及相關(guān)設(shè)計(jì)文檔。 (2)軟硬件設(shè)計(jì)資料:電路圖和源程序。上述內(nèi)容打包,文件名為“學(xué)號(hào)姓名.rar”進(jìn)行提交。第2章 ARM程序設(shè)計(jì)實(shí)驗(yàn)本章實(shí)驗(yàn)內(nèi)容是針對(duì)ARM裸機(jī)芯片進(jìn)行編程。在ARM上編寫程序,可以使用ARM匯編語言、C語言或C+語言進(jìn)行編程,也可以三者混合編程。所用開發(fā)工具可以使用ADS、Keil或其它與ARM芯片配套提供的專用開發(fā)工具。本章實(shí)驗(yàn)均以Keil公司的uVision 4.0以上版本實(shí)現(xiàn)。2.1 ARM混合編程實(shí)驗(yàn)2.1.1 實(shí)驗(yàn)?zāi)康模?)學(xué)會(huì)ARM編程所使用的匯編語言和C語言,掌握這兩種語言混合編程的方法。(2)熟悉在uVision開發(fā)環(huán)境中ARM程序的設(shè)計(jì)步驟。(3)學(xué)習(xí)ARM處理器的7種工作模式及切換。2.1.2 實(shí)驗(yàn)要求創(chuàng)建一個(gè)新的ARM項(xiàng)目,使用uVision中的默認(rèn)啟動(dòng)代碼Startup.S。在啟動(dòng)代碼的基礎(chǔ)上,增加C語言程序及其他匯編語言程序,實(shí)現(xiàn)匯編與C之間的混合編程。2.1.3 實(shí)驗(yàn)原理(1)C語言內(nèi)嵌匯編的方法n 內(nèi)嵌匯編n 在C和C語言中嵌入?yún)R編語言可以實(shí)現(xiàn)一些高級(jí)語言中沒有的功能。在Keil中,可以采用如下語法實(shí)現(xiàn)匯編的嵌入void my_strcpy (char *dst, const char *src) int ch; _asm loop: LDRB ch, src, #1 STRB ch, dst, #1 CMP ch, #0 BNE loop (2) C語言中調(diào)用匯編程序首先需要在C語言中聲明將要調(diào)用的匯編子程序的名稱及參數(shù),如下所示的extern void strcopy(char *d, const char *s);#include extern void strcopy(char *d, const char *s);int main() const char *srcstr = First string - source; char dststr = Second string - destination; printf(Before copying:n); printf( %sn %sn,srcstr,dststr); strcopy(dststr,srcstr); printf(After copying:n); printf( %sn %sn,srcstr,dststr); return 0; C語言與匯編語言參數(shù)的傳遞符合ATPCS標(biāo)準(zhǔn),即函數(shù)前4個(gè)參數(shù)通過R0R3來傳遞,其它參數(shù)通過堆棧(FD)傳遞。 匯編語言程序需要將子過程名export出去,以便C語言程序可以引用。 AREA SCopy, CODE, READONLY EXPORT strcopystrcopy ; r0 points to destination string ; r1 points to source string LDRB r2, r1,#1 ; load byte and update address STRB r2, r0,#1 ; store byte and update address; CMP r2, #0 ; check for zero terminator BNE strcopy ; ke

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論