




已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
嵌入式系統(tǒng)實訓教程馬興錄2013-03-18目錄第1章 單片機實驗教程11.1 單片機開發(fā)環(huán)境的搭建11.1.1 單片機開發(fā)環(huán)境介紹11.1.2 單片機開發(fā)環(huán)境的搭建11.1.3 聯(lián)機調(diào)試31.1.4 練習41.2 單片機聯(lián)機調(diào)試功能試驗51.2.1 觀察各類存儲單元51.3 單片機定時器實驗71.3.1 實驗目的71.3.2 設計要求71.3.3 實驗原理71.3.4 實驗步驟71.3.5 常見問題81.3.6 練習81.4 單片機中斷系統(tǒng)實驗91.4.1 實驗目的91.4.2 設計要求91.4.3 實驗原理91.4.4 實驗步驟101.4.5 練習131.5 簡單交通燈控制系統(tǒng)的設計141.5.1 實驗目的141.5.2 實驗要求141.6 單片機串行通訊接口實驗141.6.1 實驗目的141.6.2 實驗要求141.6.3 實驗原理1422第1章 單片機實驗教程1.1 單片機開發(fā)環(huán)境的搭建本節(jié)目標:搭建Keil C51單片機編程開發(fā)環(huán)境,以及Proteus仿真環(huán)境,實現(xiàn)兩者的聯(lián)機調(diào)試。1.1.1 單片機開發(fā)環(huán)境介紹目前,51單片機的開發(fā)大都使用C51編程語言,基本不再使用匯編語言。這大大簡化了單片機應用程序的開發(fā)。當前使用最多的開發(fā)環(huán)境是Keil C51。目前最高版本為uVision 4,除支持51系列單片機外,還可支持大多數(shù)的ARM芯片。Keil開發(fā)環(huán)境本身帶有模擬器,可以模擬調(diào)試單片機應用程序。也可以與Proteusl聯(lián)合實現(xiàn)軟硬件聯(lián)調(diào),達到更好的仿真效果。Protues是硬件線路板的設計開發(fā)軟件,用來設計硬件線路連接原理圖及印刷電路板圖等,是常用的硬件線路版設計軟件。同時,它還具有較強的硬件仿真能力,可以形象直觀地仿真硬件的運行情況,特別是它可以仿真多種常見的處理器,允許給處理器提供相應的程序并仿真運行。因此目前最為流行的單片機學習及開發(fā)環(huán)境是Keil C51 + Proteus。1.1.2 單片機開發(fā)環(huán)境的搭建本文以Proteus 7.5和Keil uVision 2為例來搭建51單片機的開發(fā)環(huán)境。(1) 安裝Keil uVision2。(安裝完后,要將補丁文件復制到keilC51bin文件夾內(nèi))(2) 安裝Ptoteus 7.5。(安裝crack時,要關閉殺毒軟件;Keil驅(qū)動要等安裝完Keil之后再安裝)上述兩軟件均安裝在默認文件夾內(nèi)。Proteus安裝在C:Program FilesLabcenter Electronics文件夾內(nèi),Keil安裝在c:keil文件夾內(nèi)。如果只使用keil編寫C51應用程序,編譯生成可執(zhí)行文件(后綴為.hex)供Proteus使用,則兩個軟件無需配置,各自獨立使用即可,以下步驟則無需進行。如想實現(xiàn)Keil與Proteus的聯(lián)機調(diào)試功能,則需要進行如下配置:(1)運行Proteus軟件包內(nèi)的 Keil驅(qū)動vdmagdi.exe ,將驅(qū)動安裝到keil的文件夾內(nèi)。安裝時,選擇“AGDI Driver for uVision2”,然后選擇安裝目錄為c:keil即可。(2)運行ISIS 7 Professional菜單Debug(調(diào)試),選中Use Remote Debug Monitor(使用遠程調(diào)試監(jiān)控),該選項前應該有“”。(3)創(chuàng)建或打開Keil C的工程后,選擇菜單Project-Options for Target Target 1 ,打開Options for Target Target 1 窗口后,選擇Debug選項卡,選擇右邊的Use:Proteus VSM Simulators,確定,如下圖所示:圖1 Keil工程的調(diào)試選項(4) 確保keil生成的可執(zhí)行文件與proteus項目中單片機所執(zhí)行的文件為同一個文件。Keil的輸出配置:如輸出文件名為ledc.hex,所在文件夾選擇好,Create HEX File選項前打“”。圖2 Keil 工程的輸出選項然后在Proteus的項目中,雙擊單片機器件,彈出如下窗口:圖3 Proteus項目內(nèi)的單片機程序文件在該窗口內(nèi)選擇Program File為keil生成輸出的ledc.hex。1.1.3 聯(lián)機調(diào)試尋找可用的Proteus簡單例程。如51單片機的流水燈例程。內(nèi)部包括Proteus項目(后綴為.DSN)以及對應的C51程序項目文件(后綴為.uv2)。用Proteus打開.DSN的項目。確保該項目中的單片機程序為ledc.hex,菜單選項Use Remote Debug Monitor前應該有“”。進入Keil環(huán)境,打開.uv2的項目文件。確保編譯輸出為ledc.hex;確保Debug選項如圖1所示。(1) 編譯C51工程。選擇菜單選項ProjectBuild target(2) 進入調(diào)試模式。選擇菜單選項DebugStart/Stop Debug Session為觀察方便,可將兩個軟件窗口并排在桌面上,如下圖所示:(3) 在Keil內(nèi)單步執(zhí)行C51程序(按F10),可以看到Proteus內(nèi)的指示燈有相應的亮滅變化。(選擇菜單ViewDisassembly Windows可以只保留C語句 )1.1.4 練習(1)針對流水燈硬件設計實例,自行創(chuàng)建相應的C51應用項目,實現(xiàn)流水燈從中間向兩邊流動的效果。(2)在Proteus內(nèi),自行添加紅、黃、綠不同顏色的指示燈,然后編寫C51程序,讓這些燈閃爍起來。1.2 單片機聯(lián)機調(diào)試功能試驗本實驗要學會利用Keil開發(fā)環(huán)境,觀察單片機內(nèi)部的各類存儲器,掌握程序存儲器、數(shù)據(jù)存儲器、SFR各自的特點及使用方法。熟練掌握聯(lián)機調(diào)試單片機程序的方法。1.2.1 觀察各類存儲單元(1)CPU內(nèi)部寄存器的觀察進入程序調(diào)試運行模式,Keil開發(fā)環(huán)境界面如圖所示:左側(cè)顯示CPU內(nèi)部的各寄存器名稱及其內(nèi)容,隨著程序的運行,內(nèi)容發(fā)生變化的寄存器會議高亮顏色標注出來。(2) C語言變量內(nèi)容的觀察:打開“ViewWatch & Call Stack Window”。在C語言變量名字上按鼠標右鍵,選擇“Add XXX to Watch Window”,這樣,該變量的內(nèi)容就會顯示在Watch Windows中,并隨著程序的執(zhí)行而變化。如圖所示:按F2可以修改變量名或刪除該變量。(3) 斷點的設置:在C語句的最左端雙擊(或選擇菜單項DebugInsert/Remove Breakpoint)可以添加或刪除斷點。這樣可以使用DebugGo(或F5鍵)全速運行至斷點位置。1.3 單片機定時器實驗1.3.1 實驗目的本實驗要學會單片機定時器的設定及使用。1.3.2 設計要求設計一個倒計時秒表。要求利用兩個7端數(shù)碼管組成一個2位數(shù)的倒計時秒表,根據(jù)給定初始值,倒計數(shù)至0。1.3.3 實驗原理(1)單片機定時器8051單片機內(nèi)部集成了2個16位的計數(shù)器。可以根據(jù)需要將其作為定時器使用。這時,定時器的計數(shù)頻率為系統(tǒng)CLK/12。如果CPU采用12MHz的晶振,則定時信號源的頻率固定為12MHz/12=1MHz。如果定時周期設定為50ms,則需要計數(shù)0.05S/1MHz=50000個脈沖。因為單片機定時器為加1計數(shù)器,所以,計數(shù)器初始值應設定為65536-50000=15536(即16進制的3CB0)。另外,還需要設置定時器工作模式寄存器TMOD。如果使用定時器0,16位定時器方式,則TMOD=0x01。(2)數(shù)碼管顯示原理1.3.4 實驗步驟(1)學習實驗例程:數(shù)碼管顯示 用Proteus軟件打開其原理圖;用Keil軟件打開配套的C語言工程項目。編譯運行程序,觀察數(shù)碼管的顯示情況,了解數(shù)碼管的顯示原理。重點學習C語言中數(shù)碼管編碼表的作用及用法。(2)修改原理圖打開Proteus軟件,修改數(shù)碼管例程,添加一個7段數(shù)碼管,接至P1端口。注意數(shù)碼管要選擇共陽極類型,公共端要連接VCC。(3)修改程序打開Keil軟件,打開數(shù)碼管的配套工程項目。定義變量sec,用于存放秒數(shù)。Char sec=99;顯示兩位數(shù)的方法:While(1)P2=tabsec/10; /顯示十位數(shù)P1=tabsec%10; /顯示個位數(shù)If(-sec0)sec=99;/重新計數(shù)Delay(0xff);(4)利用定時器實現(xiàn)準確延時 修改delay()函數(shù)如下:Void delay(int nsec)int i; TMOD=0x01;/16 bits,internal pulse counting for(i=0;i20)/如果定時器設定為50ms中斷一次,在此計數(shù)20次,則1S時間到。/進行1s的定時操作二、數(shù)碼管的動態(tài)顯示原理1.4.4 實驗步驟一、修改原理圖: 1) 首先,學習使用連線標號(Wire Label)實現(xiàn)信號連接。如上圖,選擇窗口左側(cè)的“LBL”,然后,鼠標移至相應連線上,出現(xiàn)T型標志時,點擊鼠標左鍵,彈出如下窗口:輸入連線標號,如P21,表明該信號連至單片機的P21引腳。同樣,需要將單片機的P21引腳連上線,并標注相同的標號。這樣,標號相同的連線在物理上是連接在一起的。2)實現(xiàn)單組LED的連接放置LED,型號選擇7SEG-MPX2-CA-BLUE;然后實現(xiàn)如圖連線。3)利用復制功能,放置4組LED。注意修改個器件的標號以及數(shù)碼管公共端的連線標號,不要沖突。分別時用P1口的8個引腳控制8個數(shù)碼管的公共端,如下圖:二、修改程序1)首先使用循環(huán)延時的方法在數(shù)碼管上顯示不同的數(shù)字。利用上次實驗的程序,主函數(shù)修改如下:Main()int i;while(1) P1=0x01; /P10=1,左側(cè)數(shù)碼管顯示 P2=tab2; /顯示數(shù)字2 Delay(2); /延時 P1=0x02; /P11=1,右側(cè)數(shù)碼管顯示 P2=tab3;/顯示數(shù)字3 Delay(2);該程序在上方的數(shù)碼管上顯示23,如圖:2)4組數(shù)碼管顯示不同數(shù)字。將上述程序中的顯示語句復制,增加其他數(shù)碼管控制端的語句,即可在其他數(shù)碼管上顯示。如:While(1)for(i=0;i8;i+) P1=1i; P2=tabi; delay(2); 該程序在8各數(shù)碼管上分別顯示數(shù)字0-7,運行效果如下:3)利用定時中斷實現(xiàn)動態(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個數(shù)碼管。主程序可以安排其他任務。1.4.5 練習 修改程序,增加一個函數(shù)disp(char seg,char data),用于在指定的某組數(shù)碼管上顯示2位十進制數(shù)字data。1.5 簡單交通燈控制系統(tǒng)的設計1.5.1 實驗目的 練習單片機控制程序的設計,掌握以中斷處理程序為主的軟件設計方法1.5.2 實驗要求 在實驗1.4的基礎上,增加四個方向的紅黃綠指示燈。按十字路口交通燈的控制要求,實現(xiàn)固定時間間隔的交通燈控制。1.5.3 程序設計一、程序?qū)崿F(xiàn)的主要功能:(1)數(shù)碼管的動態(tài)顯示數(shù)碼管的動態(tài)顯示需要定期刷新才能保證顯示的正確性。該功能可以放在定時中斷處理程序中實現(xiàn)。實現(xiàn)的思路如下:定義顯示緩沖區(qū),存放4組數(shù)碼管上顯示的2位數(shù):unsigned char dispbuf8;volatile unsigned char li=0;利用定時中斷處理程序刷新顯示: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位十進制數(shù)字data。Void disp(char seg,char data)Dispbufseg * 2 = data % 10; /個位數(shù) Dispbufseg * 2 + 1 = data /10;/十位數(shù)(2)倒計時及紅綠燈的轉(zhuǎn)換該部分功能可以放在定時中斷中完成,也可以放在主程序中完成。下面例子是用主程序?qū)崿F(xiàn):定義計時變量:int tcount=500;/用于計時1S bit SecFlag=0;在定時中斷程序中進行計時判斷:if(-tcount = 0) SecFlag = 1; tcount = 500;在主程序中進行秒計時處理main() While(1) If(SecFlag) /1S時間到 SecFlag=0; 進行4個方向的通行時間到計時;判斷并切換紅黃綠燈;調(diào)用disp函數(shù)修改時間顯示等 IDL=1;/讓單片機處于空閑狀態(tài),本語句可選 1.5.4 練習將每個方向的通行時間設為變量,編寫函數(shù)SetTrafficTime(char dir,char t)。1.6 單片機串行通訊接口實驗1.6.1 實驗目的 學習單片機串行通訊的使用,掌握以中斷方式來處理串行通訊1.6.2 實驗要求 在實驗1.5的基礎上,利用串行通訊,實現(xiàn)交通燈控制系統(tǒng)的遠程設置。允許通過串口設定各方向的通行時間及紅黃綠指示燈的控制方式。1.6.3 實驗原理8051單片機內(nèi)部集成了1路UART接口,用于實現(xiàn)串行通訊。如果需要實現(xiàn)自定義波特率的串行通訊,需要使用定時器1來產(chǎn)生波特率。(1) 首先,設置定時器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) 設置串行通訊格式: 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é)議實現(xiàn)串行通訊的雙方要遵從同樣的協(xié)議,以便進行數(shù)據(jù)的定義及處理。在儀器儀表中,經(jīng)常使用Modbus協(xié)議,也可以使用自定義協(xié)議。有關Modbus協(xié)議請參考相關資料。為簡化程序,在此使用自定義協(xié)議:協(xié)議數(shù)據(jù)包由5個ASCII字符組成:B0:首字符,表示方向,用字母N、S、E、W分別表示North、South、East和West四個方向。B1:大寫字母R表示紅燈時間,G表示綠燈時間。黃燈時間固定為3秒。B2-B4:十進制ASCII碼表示的3位數(shù)時間,B2存放百位數(shù),B3十位數(shù),B4個位數(shù)如設置方向北的紅燈時間為123秒,協(xié)議包為:NR123unsigned char RcvBuf8; /接收緩沖區(qū)unsigned char RcvNum=0; /接收到的字符個數(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ù)包的處理,修改對應方向的時間變量 Else /發(fā)送中斷,無任何處理 TI =0; 1.6.4 實驗步驟(1)打開Proteus軟件,打開上個實驗項目。(2)添加虛擬終端器件:終端的TxDRxD分別與單片機的RxDTxD引腳對接(3)利用Keil,修改源程序,增加串行通訊功能。1.7 單片機課程設計1.7.1 課程設計要求(1)設計一個完整的單片機應用系統(tǒng)。具體應用可以是交通燈控制系統(tǒng),也可以是自選題目(需與老師商量)。(2)要求首先確定系統(tǒng)的功能,即進行需求分析,形成系統(tǒng)需求分析說明書。(3)完成系統(tǒng)的硬件設計:用Proteus實現(xiàn)硬件電路原理圖的設計。(4)完成配套軟件的設計:用Keil C51開發(fā)程序,并能在Proteus中仿真運行。1.7.2 提交 (1)文檔:系統(tǒng)的需求分析說明書及相關設計文檔。 (2)軟硬件設計資料:電路圖和源程序。上述內(nèi)容打包,文件名為“學號姓名.rar”進行提交。第2章 ARM程序設計實驗本章實驗內(nèi)容是針對ARM裸機芯片進行編程。在ARM上編寫程序,可以使用ARM匯編語言、C語言或C+語言進行編程,也可以三者混合編程。所用開發(fā)工具可以使用ADS、Keil或其它與ARM芯片配套提供的專用開發(fā)工具。本章實驗均以Keil公司的uVision 4.0以上版本實現(xiàn)。2.1 ARM混合編程實驗2.1.1 實驗目的(1)學會ARM編程所使用的匯編語言和C語言,掌握這兩種語言混合編程的方法。(2)熟悉在uVision開發(fā)環(huán)境中ARM程序的設計步驟。(3)學習ARM處理器的7種工作模式及切換。2.1.2 實驗要求創(chuàng)建一個新的ARM項目,使用uVision中的默認啟動代碼Startup.S。在啟動代碼的基礎上,增加C語言程序及其他匯編語言程序,實現(xiàn)匯編與C之間的混合編程。2.1.3 實驗原理(1)C語言內(nèi)嵌匯編的方法n 內(nèi)嵌匯編n 在C和C語言中嵌入?yún)R編語言可以實現(xiàn)一些高級語言中沒有的功能。在Keil中,可以采用如下語法實現(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標準,即函數(shù)前4個參數(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年江西省吉安市峽江縣峽江中學高一物理第二學期期末聯(lián)考試題含解析
- 2025屆貴州省遵義鳳岡二中物理高二第二學期期末檢測模擬試題含解析
- 江蘇省揚州市梅嶺中學2025屆高二物理第二學期期末統(tǒng)考試題含解析
- 安徽省濱湖壽春中學2025年物理高二下期末學業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 養(yǎng)雞場申請書
- 假期參與實踐活動總結
- 保護生態(tài)環(huán)境共建綠色家園演講稿
- 建筑業(yè)與氣候變化應對策略-洞察及研究
- 職業(yè)性牙磨損個案護理
- 鼓膜修補術后護理查房
- 2025年省國有資本運營控股集團有限公司人員招聘筆試備考試題及答案詳解(名校卷)
- 2025年輔警招聘考試試題庫完整答案
- 宿州蕭縣鄉(xiāng)鎮(zhèn)事業(yè)單位招聘考試真題2024
- 2025至2030全球及中國近炸引信傳感器行業(yè)項目調(diào)研及市場前景預測評估報告
- 部編版三年級語文上冊 寫字表
- 工廠十周年活動策劃方案
- 天津匯融商業(yè)管理有限公司招聘筆試題庫2025
- 廣東教育學院德育研究中心
- 2025至2030中國清潔機器人市場經(jīng)營效益與投融資發(fā)展狀況報告
- 產(chǎn)品標品牌管理制度
- 高壓氣體絕緣設備中SF6分解產(chǎn)物檢測SO2傳感器的設計與應用
評論
0/150
提交評論