




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、2009級計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院嵌入式技術(shù)基礎(chǔ)與實(shí)踐實(shí)驗(yàn)報告飛思卡爾S08系列單片機(jī)實(shí)驗(yàn)系統(tǒng)綜合實(shí)驗(yàn)的開發(fā)學(xué)號:0927401075姓名:袁杰2012年6月10日目錄第1章 需求分析1第2章 系統(tǒng)構(gòu)成22.1 硬件原理圖22.2 軟件結(jié)構(gòu)圖22.2.1 MCU端軟件結(jié)構(gòu)32.2.2 PC端軟件結(jié)構(gòu)4第3章 MCU方的程序設(shè)計(jì)53.1 串口數(shù)據(jù)接收與發(fā)送53.2 時鐘控制53.3主程序9第4章 PC方程序控制134.1 串口數(shù)據(jù)接收與發(fā)送14第5章 總結(jié)與體會18第6章 使用說明19II嵌入式技術(shù)基礎(chǔ)與實(shí)踐實(shí)驗(yàn)報告第1章 需求分析HC08和HCS08單片機(jī)是Freescale公司于2000年前后推
2、出的新一代單片機(jī)。S08是HCS08的簡寫,表示增強(qiáng)型HC08。從1993年起,F(xiàn)reescale公司為全球提供的8位微控制器已超過50億片,然而我國國內(nèi)大多數(shù)“熟悉”單片機(jī)的人卻不知曉這一底細(xì),國內(nèi)的微控制器市場從20世紀(jì)80年代開始,一直由Intel公司推出的MCS-51占據(jù)著絕對的統(tǒng)治地位。人們又逐漸發(fā)現(xiàn),從進(jìn)口的電子信息類產(chǎn)品,特別是各類通信產(chǎn)品中,其中有MCU的,多數(shù)使用了Freescale的產(chǎn)品,而不是MCS-51。因此學(xué)習(xí)Freescale S08是非常重要,本報告描述一個Freescale S08單片機(jī)實(shí)驗(yàn)系統(tǒng)軟件實(shí)例(Light.mcp),通過各個不同模塊,驗(yàn)證單片機(jī)各模塊工
3、作是否正常??梢元?dú)立工作觀察MCU工作是否正常,也可以通過串口與PC機(jī)連接,實(shí)現(xiàn)與PC機(jī)的相互控制。設(shè)計(jì)時首先設(shè)計(jì)MCU與PC機(jī)間的標(biāo)志符號位,用于確定雙方通訊數(shù)據(jù)的含義。MCU端程序編寫完成后,使用串口調(diào)試器觀察輸出數(shù)據(jù),輸入控制數(shù)據(jù)觀察MCU工作狀態(tài)。使用串口調(diào)試器調(diào)試成功后,再使用C#編寫與其匹配的可視化程序。實(shí)現(xiàn)非聯(lián)機(jī)驗(yàn)證最小系統(tǒng)、普通I/O口輸入輸出、驅(qū)動LCD顯示模塊功能。聯(lián)機(jī)驗(yàn)證串口數(shù)據(jù)接收與發(fā)送、小燈測試、LCD及LED、時鐘計(jì)時、PWM、鍵盤輸入、AD轉(zhuǎn)換、FLASH讀寫模塊功能。第2章 系統(tǒng)構(gòu)成2.1 硬件原理圖圖2.1 AW60硬件原理圖(最小系統(tǒng))系統(tǒng)使用MC9S08A
4、W60型MCU為核心,AW60芯片的硬件最小系統(tǒng)包括:電源及其濾波電路、復(fù)位電路、晶振電路及PLL電路濾波電路、寫入器接口電路。其引腳包括:電源信號引腳、復(fù)位信號引腳、主要功能模塊引腳和其它引腳。2.2 軟件結(jié)構(gòu)圖軟件包括MCU端與PC端2部分組成,下面分別介紹2部分軟件的結(jié)構(gòu)。2.2.1 MCU端軟件結(jié)構(gòu)圖2.2 MCU端軟件結(jié)構(gòu)圖根據(jù)需求分析,對需要測試的功能進(jìn)行編程,MCU端包含LED小燈、LCD顯示、開關(guān)量輸入、鍵盤輸入、AD轉(zhuǎn)換、PWM、FLASH讀寫、串口數(shù)據(jù)發(fā)送與接受等模塊。MCU端軟件結(jié)構(gòu)圖,如圖2.2所示。在脫離PC端控制的情況下LED小燈、LCD顯示可以得到驗(yàn)證,如果需要驗(yàn)
5、證鍵盤輸入、AD轉(zhuǎn)換與串口數(shù)據(jù)發(fā)送與接收必須與PC端聯(lián)機(jī)操作。2.2.2 PC端軟件結(jié)構(gòu)圖2.3 PC端軟件結(jié)構(gòu)圖PC端使用C#編程,以串口通訊為核心,使用串口與MCU進(jìn)行通訊實(shí)現(xiàn),對MCU的控制和對MCU反饋信息進(jìn)行處理,并反映在用戶界面上。根據(jù)MCU提供的功能,編寫程序匹配其工作。PC端程序包括串口數(shù)據(jù)輸入輸出、開關(guān)狀態(tài)反饋、小燈控制、AD轉(zhuǎn)換數(shù)據(jù)顯示、時鐘、PWM控制、FLASH讀寫、鍵盤數(shù)據(jù)顯示模塊。軟件結(jié)構(gòu)圖如圖2.3所示。4第3章 MCU方的程序設(shè)計(jì)本章節(jié)將詳細(xì)介紹MCU端的各個功能模塊,其中包括串口數(shù)據(jù)輸入輸出、LCD顯示、鍵盤、AD轉(zhuǎn)換、PWM、時鐘計(jì)時、FLASH讀寫。程序基
6、于C語言編寫,使用面向硬件對象模塊封裝的思想。面向硬件對象模塊的封裝是對系統(tǒng)中的每個硬件對象建立相對應(yīng)的頭文件和硬件驅(qū)動程序文件。頭文件中主要包含該硬件的接口和相應(yīng)的寄存器設(shè)置參數(shù),硬件驅(qū)動程序文件主要是對該硬件的驅(qū)動,同時標(biāo)注出各個功能模塊的功能,入口,出口和堆棧深度。這樣做剩下的編程工作就只是面向變量和PC的編程,屏蔽的具體硬件對象的差異性,提高了程序的移植性和復(fù)用性。3.1 串行通信數(shù)據(jù)接收與發(fā)送MCU端使用串口中斷,實(shí)現(xiàn)對串口數(shù)據(jù)的接收與發(fā)送。串口是MCU與PC通訊的唯一通道,在串口中斷處理子程序中,將處理由PC端發(fā)送的控制指令與數(shù)據(jù)。標(biāo)志位確定PC端發(fā)送指令的類型,并加以處理,使用M
7、CU內(nèi)部標(biāo)志位確定所需要做的工作,在中斷結(jié)束后使用主程序完成相應(yīng)操作。串口中斷處理程序:/isrSCIre:接收中斷處理函數(shù)-*/功能:接收1個字節(jié)數(shù)據(jù), 發(fā)送接到的數(shù)據(jù) */ 總中斷關(guān)閉,但是接收標(biāo)志還是有,則直接識別緩沖區(qū),就取走就行。 */參數(shù):無 */返回:無 */內(nèi)部調(diào)用函數(shù):SCIreN, SCIsendN */-*interrupt void isrSCIre(void) uint8 f,i,flag; /標(biāo)志是否接受到數(shù)據(jù) DisableInterrupt(); /禁止總中斷 /接收32個字節(jié)的數(shù)據(jù) f = SCIReN(1,1, SerialBuff); /若收到數(shù)據(jù),則發(fā)送
8、接到的數(shù)據(jù) if (f = 0) if(SerialBuff0=130 & SerialBuff0=137 ) flag=SerialBuff0; if(flag=130) /light模塊 LightBuff=SCIRe1(1,&i); else if(flag=131) /LCD標(biāo)志 /連續(xù)接收可以,代碼如下 LCDLen=SCIRe1(1,&i); /LCD顯示字符長度 SCIReN(1,LCDLen,ShowBuff);/LCD顯示的內(nèi)容 else if(flag=132)/時鐘標(biāo)志 /接收3個字節(jié)的數(shù)據(jù) SCIReN(1,3, time); else if(flag=133) /LE
9、D標(biāo)志 /pwm處理模塊 pwmDutyPC = SCIRe1(1,&i); else if(flag=135)/LED標(biāo)志 /接收4個字節(jié)的數(shù)據(jù) i=SCIReN(1,4, LEDBuff); if(i=0) SCISend1(1,135); SCISendN(1,4, LEDBuff); for(i=0;i4;i+) LEDBuffi+=0; else if(flag=137) /AD模塊 chanelNum = SCIRe1(1,&i); else SCISendN(1,1, SerialBuff); EnableInterrupt(); /開放總中斷3.2 時鐘控制MCU端實(shí)現(xiàn)精度為1
10、秒的時鐘計(jì)時功能,可以通過PC端發(fā)送指令設(shè)定當(dāng)前時間,每秒通過串口發(fā)送時鐘數(shù)據(jù)。使用MCU內(nèi)部定時器0實(shí)現(xiàn)計(jì)時,定時器0同時作為PWM使用,所以內(nèi)部需要解決沖突問題。中斷服務(wù)中盡量減少其工作量,所以只對秒信號進(jìn)行處理,其他計(jì)時工作使用主程序完成。 isrT1OV:定時器溢出中斷處理函數(shù):/isrT1OV:定時器1溢出中斷處理函數(shù)-*/功能:以秒為最小單位計(jì)時,并清定時器1溢出標(biāo)志位 */內(nèi)部調(diào)用: */ SecAdd1:以秒為最小單位遞增時,分,秒緩沖區(qū)的值 */-*interrupt void isrT1OV(void) uint8 temp; DisableInterrupt(); /禁止
11、總中斷 SecAdd1(time); /1s到,遞增時,分,秒緩沖區(qū)的值 SCISend1(1,132); SCISendN(1,3, time); temp = AW60_TPM_CSTR(2); /1.讀取定時器1狀態(tài)和控制寄存器T1SC AW60_TPM_CSTR(2) &= AW60_TPM_CSTR_TOF; /2.向定時器溢出標(biāo)志TOF寫0 EnableInterrupt(); /開放總中斷 鍵盤中斷處理函數(shù):/isrKeyBoard:鍵盤中斷處理函數(shù)-*/功能:識別按鍵并發(fā)送鍵值,把鍵值轉(zhuǎn)換成對應(yīng)的定義值,再從串口發(fā)送出去 */調(diào)用函數(shù): */ (1)掃描法讀取鍵值函數(shù)(KBsc
12、anN) */ (2)鍵值轉(zhuǎn)為定義值函數(shù)(KBdef) */ (3)串行發(fā)送一個字節(jié)數(shù)據(jù)(SCIsend1) */ (4)鍵盤初試化(KBInit) */-*interrupt void isrKeyBoard(void) uint8 value; uint16 i; for(i=0; i1000; i+); DisableInterrupt(); /關(guān)總中斷 DisableKBint(); /屏蔽鍵盤中斷 value = KBScanN(10); /掃描鍵值,存于value中 if(value!=0xFF) SCISend1(1,134); SCISend1(1,KBDef(value);/
13、鍵值轉(zhuǎn)化為定義值并發(fā)送 KBInit(); /鍵盤初始化鍵盤中斷 EnableKBint(); /開放鍵盤中斷 EnableInterrupt();/開總中斷3.3主程序主程序作用是將系統(tǒng)初始化,并且根據(jù)標(biāo)志處理各工作/-*/ 工 程 名: Light */ 程序描述: MCU綜合實(shí)驗(yàn),控制系統(tǒng)各個模塊工作 */ 目 的: Freescale AW系列MCU C語言綜合程序 */ 說 明: 包含串口數(shù)據(jù)輸入輸出、LCD顯示、鍵盤、AD轉(zhuǎn)換、PWM、時鐘計(jì)時、FLASH讀寫等模塊 */-蘇州大學(xué)飛思卡爾嵌入式系統(tǒng)實(shí)驗(yàn)室2012年-*void main() /僅在本函數(shù)中用 uint8 i; ui
14、nt8 ma; uint8 LCDi=0; /定義初始顯示緩存并賦初值 const uint8 DisPalyInit = Wait Receiving. Soochow 2010.09; LCDLen=0; chanelNum = 30; /為30,說明沒有收到AD轉(zhuǎn)換的客戶端信息 pwmDutyPC =101; /1 關(guān)總中斷 DisableInterrupt(); /禁止總中斷 /1.1 芯片初始化 MCUInit(); /2. 模塊初始化 SCIInit(1,SYSTEM_CLOCK,9600); /(1) 串口初始化 Light_Init(Light_Run_PORT,Light_R
15、un,Light_OFF); /(2) 燈和蜂鳴器的引腳初始化 KBInit(); /(3) 按鍵初始化 TPMinit(2); /(4) 定時器2初始化 LEDinit(); PWM(1,0,0x800,0);/定時器2通道0初始輸出占空比為0周期為1s的PWM波 ADCInit();/AD初始化 /3. LCD顯示初始化 LCDshow(uint8 *)DisPalyInit); /4. 內(nèi)存初始化 /(1) 時分秒緩存初始化(00:00:00) time0 = 0; time1 = 0; time2 = 0; /(2) 小燈狀態(tài)初始化3,表示沒有命令發(fā)送過來 LightBuff = 3;
16、 /(3) 數(shù)碼管狀態(tài)初始化 LEDBuff0=8; LEDBuff1=8; LEDBuff2=8; LEDBuff3=8; /5. 開放各模塊中斷 EnableSCIReInt(); /(1)開放SCI接收中斷 EnableTimer(2); /(2)開放定時器1溢出中斷 EnableKBint(); /6. 開放總中斷 EnableInterrupt(); /主循環(huán) while (1) if(LightBuff!=3) /不等于3表明PC機(jī)有命令發(fā)送過來,然后進(jìn)行處理 Light_Change(Light_Run_PORT,Light_Run); SCISend1(1,130); /發(fā)送串
17、口的標(biāo)志 SCISend1(1,LightBuff); LightBuff = 3; if(LCDLen!=0) /接收在中斷中進(jìn)行 for(i=LCDLen;i32;i+) /為了滿足32個字符 ShowBuffi=*; /LCD顯示MCU從串口接收到的32個數(shù)據(jù) LCDshow(uint8 *)ShowBuff); SCISend1(1,131); /發(fā)送LCD的標(biāo)志 SCISendN(1,32, ShowBuff); /發(fā)回給PC機(jī) LCDLen=0; if(pwmDutyPC101) PWM(1,0,0x800,pwmDutyPC); Delay(10); pwmDutyPC = 10
18、1; if(chanelNum30) ma = (uint8)ADCAve(chanelNum, 50); SCISend1(1,137); SCISend1(1,ma); chanelNum = 30; LEDshow(LEDBuff); 12第4章 PC方程序控制PC端程序以串口為核心,用戶界面上劃分多個區(qū)域,實(shí)現(xiàn)不同控制功能。PC端用戶界面如圖4.1,4.2所示(因?yàn)榻缑嫣?,分?幅圖片截?。?。圖4.1 PC端程序界面圖4.2 PC端程序界面4.1 串口數(shù)據(jù)接收與發(fā)送串口接收數(shù)據(jù)子程序?qū)崿F(xiàn)對于標(biāo)志位的識別與處理,將MCU發(fā)送的數(shù)據(jù)進(jìn)行分類,并且顯示在用戶界面上。/-* / * / 對
19、象:SCIPort * / 事 件:DataReceived * / 功 能:串口接收數(shù)據(jù) * / 函數(shù)調(diào)用:(1)SCIReceiveData,串口接收函數(shù) * / (2)SCIUpdateRevtxtbox,更新文本框中的內(nèi)容 * / * / * / * /-* private void SCIPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) if (!SCIPort.IsOpen) this.TSSLState.Text = 串口沒打開!; return; String str
20、= String.Empty; bool Flag;/標(biāo)記串口接收數(shù)據(jù)是否成功 int len; /標(biāo)記接收的數(shù)據(jù)的長度 /調(diào)用串口接收函數(shù),并返回結(jié)果 Flag = sci.SCIReceiveData(SCIPort, ref PublicVar.g_ReceiveByteArray); if (Flag = true) /顯示MCU端發(fā)來的數(shù)據(jù),以便于調(diào)試 len = PublicVar.g_ReceiveByteArray.Length; /對于字符串形式,考慮到可能有漢字, /直接調(diào)用系統(tǒng)定義的函數(shù),處理整個字符串 str = Encoding.Default.GetString(P
21、ublicVar.g_ReceiveByteArray); if (this.TbShowString.Text).Length 100) this.TbShowString.Text = string.Empty; this.TbShowDec.Text = string.Empty; this.TbShowHex.Text = string.Empty; else SCIUpdateRevtxtbox(TbShowString, str); /十進(jìn)制和十六進(jìn)制形式按字節(jié)進(jìn)行處理 for (int i = 0; i = 130 & data 1 ? : : ) + (tmr = 3) SCI
22、UpdateRevtxtbox(tbMCUTime, tmrStr); tmrCount = 0; tmrStr = string.Empty; commandType = 0; else if (commandType = 133) /PWM測試模塊 /高端不作處理僅留一接口在此 else if (commandType = 134) /鍵盤測試模塊 byte kbKey = data; for (byte j = 0; j 16; j+) if (KBBoardj = (char)kbKey) kbj.Image = Image.FromFile(Application.StartupPath + .PicturesKeyDown.BMP); KBi = j; SCIUpdateRevtxtbox(tbKBShow, KBBoardj.ToString(); break; else if (commandType = 135) /LED測試模塊 byte dtLED = data; for (byte j = 0; j
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年專升本網(wǎng)上測試題及答案
- 2025年銀行矛盾面試題及答案
- 2025年專升本單選試題及答案
- 2025年專業(yè)老師考試試題及答案
- 2025年專業(yè)監(jiān)理工程師面試題庫
- 2025年上饒初級會計(jì)考試題目
- 湖南省邵陽市北塔區(qū)重點(diǎn)中學(xué)2026屆中考物理最后一模試卷含解析
- 2025屆中鐵長江交通設(shè)計(jì)集團(tuán)有限公司校園招聘筆試參考題庫附帶答案詳解(10套)
- 2026屆黑龍江省哈爾濱市第十七中學(xué)中考三模物理試題含解析
- EHS基礎(chǔ)知識培訓(xùn)
- 2025年磁性展示板項(xiàng)目市場調(diào)查研究報告
- 訂單合同轉(zhuǎn)讓協(xié)議書模板
- 招商項(xiàng)目轉(zhuǎn)讓協(xié)議書
- 江蘇省南京市秦淮區(qū)重點(diǎn)中學(xué)2024-2025學(xué)年初三下學(xué)期中考診斷性測試化學(xué)試題含解析
- 電弧焊基本知識課件
- GB/T 45455-2025成型模帶頭導(dǎo)套和帶頭定位導(dǎo)套
- 麻將室管理制度
- 實(shí)驗(yàn)室生物安全培訓(xùn)課件
- 懸挑式腳手架拆除施工方案改
- T-JSQX 0013-2024 電動汽車變充一體充電設(shè)備技術(shù)規(guī)范
- TCI 535-2024 鋁合金液態(tài)模鍛模具技術(shù)條件
評論
0/150
提交評論