




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第一章 MSP430單片機(jī)入門基礎(chǔ),前沿,1、MSP430系列單片機(jī)系統(tǒng)工程設(shè)計(jì)與實(shí)踐這本書是我見過的最好的關(guān)于單片機(jī)的書,非常值得逐字逐句的徹底學(xué)習(xí)一遍。 2、與51不同,MSP430單片機(jī)是RISC處理器,通過對比兩者的區(qū)別,可以建立起代碼移植的思想。 3、MSP430單片機(jī)屬于混合信號(hào)處理器,資源極其豐富,有利于全面學(xué)習(xí)硬件知識(shí)。,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),2,1.1 初識(shí)MSP430單片機(jī),MSP430:低功耗之王,水果電池驅(qū)動(dòng) 1、為什么我們在乎功耗? 凡是以電池為電源的電子設(shè)備都看重低功耗。 幾乎所有的單片機(jī)會(huì)標(biāo)榜自己有低功耗方面的設(shè)計(jì)。 2、MSP430為什么可以成為
2、低功耗之王? 在硬件上,cpu和不用的模塊可以休眠 在軟件上,必須設(shè)計(jì)恰當(dāng)?shù)男菝吆蛦拘?430是實(shí)現(xiàn)低功耗的必要條件,非充分條件。,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),3,1.1.1 MSP430單片機(jī)的應(yīng)用前景,便攜設(shè)備,高集成度、小型化。 野外安置的終身電池設(shè)備。 無需額外供電的自供電設(shè)備。 高精度測量、控制領(lǐng)域。 當(dāng)普通單片機(jī)用。,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),4,1.1.2 MSP430單片機(jī)的特點(diǎn),多時(shí)鐘系統(tǒng) CPU時(shí)鐘、功能模塊時(shí)鐘、休眠喚醒時(shí)鐘 軟件設(shè)置時(shí)鐘 16位RISC處理器,單指令周期 模塊化結(jié)構(gòu) 各模塊完全獨(dú)立,不需要cpu干涉 避免了cpu與外部模塊復(fù)雜的數(shù)據(jù)
3、通信 學(xué)會(huì)最貴的430,等于會(huì)用了全系列430,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),5,采用馮諾依曼結(jié)構(gòu)(普林斯頓結(jié)構(gòu)),程序指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器統(tǒng)一編址。 舉例:實(shí)現(xiàn)存儲(chǔ)器中兩數(shù)據(jù)相乘,要經(jīng)過3個(gè)步驟,通過總線取兩個(gè)數(shù)據(jù)和取出指令(干什么)到CPU。 如果是哈佛結(jié)構(gòu),數(shù)據(jù)總線和指令總線分開。 430可以在ram里跑程序,加上具有flash控制器,可實(shí)現(xiàn)固件更新。 rom中的升級(jí)代碼-復(fù)制到ram運(yùn)行-擦除rom-升級(jí)rom,1.1.2 MSP430單片機(jī)的特點(diǎn),青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),6,科普:ROM、RAM、DRAM、SRAM、EEPROM、FLASH,我們現(xiàn)在用的51,
4、都是flash rom的,但是內(nèi)部沒有flash控制器,所以需要EEPROM存實(shí)時(shí)數(shù)據(jù)。 Msp430帶flash控制器,單片機(jī)自己就能擦寫flash,所以不用EEPROM。,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),7,MSP430FE425A資源 8M/s處理速度 512RAM(數(shù)據(jù))+16KB Flash(程序代碼) 內(nèi)置Flash控制器,剩余Flash可存數(shù)據(jù)。 內(nèi)置時(shí)鐘管理單元,可內(nèi)部倍頻 3路同步采樣、差分輸入、32倍程控增益放大器的16位ADC 溫度傳感器 1.2V基準(zhǔn)源和輸出緩沖器 128段LCD驅(qū)動(dòng)器 增強(qiáng)UART串口 看門狗 BasicTimer定時(shí)器 16位TimeA定時(shí)器,
5、3路捕獲和2路PWM 內(nèi)置BOR復(fù)位電路 16個(gè)雙向可中斷IO口 內(nèi)置電能計(jì)量模塊 后綴帶A的,比如FE425A帶硬件乘法器,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),8,1.1.3 MSP430單片機(jī)最小系統(tǒng),一般單片機(jī)最小系統(tǒng)需要什么? 電源、晶振、復(fù)位、下載/仿真接口 MSP430FE425自帶片內(nèi)數(shù)控時(shí)鐘(DCO),掉電復(fù)位電路(BOR) 一般講究一點(diǎn)都需要“電源監(jiān)視芯片” 內(nèi)部時(shí)鐘一般不如晶振精確 可以外接手表晶振32.768k,然后倍頻 JTAG、SBW、可下載+調(diào)試,BSL只能下載,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),9,1.2 MSP430單片機(jī)開發(fā)軟件入門,一般用IAR430軟
6、件 工程管理、程序編輯、代碼編譯下載、仿真調(diào)試 工程管理:管理外部函數(shù)、頭文件。 程序編輯:寫代碼 編譯:替程序員處理所有打雜的事情C-匯編 調(diào)試:真正的考驗(yàn)水平的地方,不是所有單片機(jī)都支持調(diào)試,這是要硬件支持的。,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),10,全速執(zhí)行、單步執(zhí)行。 執(zhí)行到光標(biāo)處 設(shè)置斷點(diǎn)(在程序中加一個(gè)空操作,然后用來設(shè)斷點(diǎn)) 查看變量寄存器 查看調(diào)用函數(shù)關(guān)系,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),11,1.3 MSP430單片機(jī)C語言基礎(chǔ),在寫C語言的過程中,盡量消除不同CPU的差異,或者將差異集中到一個(gè)地方做修改,那么就能方便的實(shí)現(xiàn)代碼移植。 我們現(xiàn)在寫C程序,就必須按此要
7、求嚴(yán)格要求自己。 這樣才能一通百通,才能減少重復(fù)勞動(dòng)。,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),12,1.3.1 變量,我們?yōu)槭裁匆x各種變量? 定義短字節(jié)變量有哪些好處和壞處? 定義長字節(jié)變量有哪些好處和壞處? 一些特殊的關(guān)鍵字 const unsigned char Table7=1,2,3,4,5,6,7 static int a;/本地全局變量 volatile int b;/不被優(yōu)化 _no_init int c; /不對其初始化 為什么要慎重使用全局變量?,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),13,1.3.2 數(shù)學(xué)運(yùn)算,盡可能避免浮點(diǎn)數(shù)運(yùn)算。 運(yùn)算慢、非常慢。占用RAM多。 所以
8、應(yīng)盡量避免使用浮點(diǎn)數(shù)float。 防止定點(diǎn)數(shù)溢出。 long int x; int a; x=a*1000;/a和1000都是int型,a65溢出 應(yīng)改為 x=a*long(1000) 或 x=(long)a*1000,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),14,小數(shù)的處理 例如,溫度的最后計(jì)算公式為: Deg_C=ADC*1.32/1.25-273 為避免浮點(diǎn)數(shù)可改為: Deg_C=(long)ADC*132/125-273 如需保留1位小數(shù),則: Deg_C=(long)ADC*1320/125-2730 /擴(kuò)大10倍 程序中加上明確注釋 在顯示時(shí),將小數(shù)點(diǎn)移位即可 減小乘除法 取平均時(shí),
9、盡量取2、4、8等2次冪,這樣可以用移位代替乘除(可編譯器自動(dòng)) 后綴帶A的型號(hào)有硬件乘法器(自動(dòng)使用),青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),15,1.3.3 位操作,精簡指令處理器如何寫IO口? P2OUT = P2OUT | 0 x01; /P2.0置高 按位或 P2OUT |=0 x01;/一般均簡寫成這樣 P2OUT ,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),16,1.3.4 寄存器操作,如何理解寄存器操作? 如果設(shè)計(jì)模擬電路算是天才干的事情,那么操作單片機(jī)的寄存器就算是傻瓜干的事情。 處理器把能干的事全干了,需要人過問的事情,通過一系列開關(guān)讓人來選擇,所以這是傻瓜就能干的事情 越是功
10、能強(qiáng)大的處理器,需要配置的寄存器越多。 處理器說明書就是用來查寄存器功能的,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),17,宏定義幫助我們理解抽象的數(shù)字,查說明書,找到控制串口收發(fā)的是IE1寄存器的最高兩位,我們可以用下面的賦值。 IE1 |= BIT6/開串口收中斷 IE1 |= BIT7/開串口發(fā)中斷 為便于記憶和理解,頭文件中有如下宏定義: #define URXIE0(0 x40)/在MSP430 x42x.h #define UTXIE0(0 x80)/頭文件中已有 IE1 |=URXIE0+UTXIE0 以后我們接觸高級(jí)處理器的程序中,大部分都是這么寫,不會(huì)像51里面直接寫TMOD=0
11、 x20這樣,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),18,特別注意:使用“|=”賦值不會(huì)影響其他位,但要搞清楚是不是要先對標(biāo)志位清0。 例如:PWM控制器輸出模式有3個(gè)控制位,可以表示8種模式。頭文件中定義了OUTMODE_0OUTMODE_7宏定義,000-111。 TACCTL1 |= OUTMODE_3;/011 . TACCTL1 |= OUTMODE_6;/110 實(shí)際效果是111,也就是模式7,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),19,1.3.5 中斷,中斷的作用是快速響應(yīng)事件 430中幾乎所有“資源”都帶中斷,為的是休眠cpu后,喚醒CPU。 Cpu發(fā)送指令給模塊,然后休眠。模
12、塊執(zhí)行完畢后,中斷喚醒CPU。 中斷向量表位于ROM最高段0 xFE000 xFFFF(512B) 特別注意!430的中斷沒有中斷嵌套的優(yōu)先級(jí) #pragma vector=BASICTIMER_VECTOR _interrupt void BT_ISR(void) . ,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),20,Msp430 x42x頭文件中的中斷向量表 #define BASICTIMER_VECTOR(0*2u) /*0 xFFE0 基礎(chǔ)定時(shí)器) PORT2_VECTOR (1 * 2u) /* 0 xFFE2 P2 */ PORT1_VECTOR (4 * 2u) /* 0 xFFE
13、8 P1 */ TIMERA1_VECTOR (5 * 2u) /* 0 xFFEA Timer A CCR1/2*/ TIMERA0_VECTOR (6 * 2u) /* 0 xFFEC Timer A CCR0 */ USART0TX_VECTOR (8 * 2u) /* 0 xFFF0 串口發(fā)送 */ USART0RX_VECTOR (9 * 2u) /* 0 xFFF2 串口接收*/ WDT_VECTOR (10 * 2u) /* 0 xFFF4 Watchdog Timer */ SD16_VECTOR (12 * 2u) /* 0 xFFF8 16位ADC */ NMI_VECTO
14、R (14 * 2u) /* 0 xFFFC Non-maskable */ RESET_VECTOR (15 * 2u) /* 0 xFFFE Reset */,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),21,中斷的具體過程,事先將中斷服務(wù)程序入口地址裝入中斷向量表。 中斷發(fā)生后,如果中斷被允許(可屏蔽中斷),CPU將當(dāng)前程序地址和CPU狀態(tài)寄存器SR壓入堆棧。 跳轉(zhuǎn)到中斷服務(wù)程序入口,備份寄存器入堆棧。 開始執(zhí)行中斷服務(wù)程序。 退出中斷前,恢復(fù)寄存器。CPU取回SR寄存器,跳轉(zhuǎn)回中斷前主程序地址。,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),22,退出中斷時(shí)喚醒CPU,進(jìn)中斷前CPU休眠,那么退出中
15、斷后CPU仍然休眠。 可以在中斷子程序中修改堆棧中的SR,使得中斷結(jié)束后,CPU不休眠。 #pragma vector=BASICTIMER_VECTOR _interrupt void BT_ISR(void) . _low_power_mode_off_on_exit();/此函數(shù)經(jīng)匯編優(yōu)化 ,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),23,中斷標(biāo)志位,同類中斷合并成一個(gè)總的中斷。 由軟件判斷中斷標(biāo)志位flag來確定具體中斷。 什么是標(biāo)志位?不急用、待查詢。 #pragma vector=PORT1_VECTOR _interrupt void P1_ISR(void) if(P1IFG ,青
16、島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),24,1.3.6 內(nèi)部函數(shù),頭文件instrinsic.h和in430.h _low_power_mode_0(); 或LPM0 _low_power_mode_off_on_exit(); _delay_cycles(long int cycles); _enable_interrupt(); 或_EINT(); _diaable_interrupt();或_DINT; _no_operation();或_NOP(); _swap_bytes(x); _bcd_add_short(unsigned int,unsigned int),青島大學(xué)-TI 大學(xué)生
17、創(chuàng)新中心 傅強(qiáng),25,1.3.7 庫函數(shù),IAR EW430提供100個(gè)庫函數(shù) Ctype.h字符處理類 Math.h數(shù)學(xué)類 Stdio.h輸入和輸出類 Stdlib.h通用子程序類 String.h字符串處理類 庫函數(shù)是C語言通用的,內(nèi)部函數(shù)與特定處理器有關(guān)。,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),26,1.4 文件管理,將大程序劃分為若干小的C文件,最常用的劃分方法是按功能模塊劃分(對象)。,/* DataProcess.c */ int Sum(int a,int b,int c) int y; y=a+b+c; return(y); float Average(int a,int b,
18、int c) float y; y=a+b+c; return(y/3); ,/* DataProcess.h */ Extern int Sum (int a,int b,int c); Extern float Average(int a,int c);,/* main.c */ #include “DataProcess.h” . void main() . Tem=Average(tem1,tem2,tem3); Weight=Sum(W1,W2,W3); . ,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),27,全局變量的處理,隸屬關(guān)系模糊的全局變量單獨(dú)建global.c 隸屬于某
19、模塊的,寫在模塊c文件中,/* global.c */ int BattVoltage; unsigned int SystemStatus; int Temperature;,/* global.h */ Extern int BattVoltage; Extern unsigned int SystemStatus; Extern int Temperature;,/* DataProcess.c */ Unsigned char OverflowFlag; int Sum(int a,int b,int c) int y; y=a+b+c; If(y65535) OverflowFlag
20、=1; return(y); ,/* DataProcess.h */ Extern int Sum (int a,int b,int c); Extern unsigned char OverflowFlag;,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),28,1.5 代碼優(yōu)化,編譯器可自動(dòng)對代碼進(jìn)行優(yōu)化 速度快,但占rom多 速度慢,占rom少 可選優(yōu)化等級(jí),等級(jí)越高,占rom越小 調(diào)試階段最好關(guān)閉優(yōu)化 要是不優(yōu)化還有變量改變,則加volatile,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),29,1.6 風(fēng)格,對于寫程序代碼,有3個(gè)層次 首先,計(jì)算機(jī)要能讀 其次,要自己能讀 最后,要?jiǎng)e人能讀,青島大
21、學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),30,1.6.1 變量命名規(guī)則,變量名要有含義,不要隨便用abcxyz 變量名最好是名詞詞性,1-4個(gè)單詞 每個(gè)單詞首字母大寫 Int InputVoltage; Int Temperature; 必須出現(xiàn)空格時(shí),用下劃線代替 Int Degree_C; Int Degree_F; 單詞較長,適當(dāng)簡寫 int NumOfInputChr; Int Deg_F; 多個(gè)模塊都有的變量,按“模塊名_變量名” Char ADC_Status; Int UART1_RxcharCnt; 約定俗成的變量不要改動(dòng) I、j作為循環(huán)變量,p、q作為指針,s、t表示字符串,青島大學(xué)
22、-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),31,1.6.2 函數(shù)命名規(guī)則,模塊名_不及物動(dòng)詞 模塊名_及物動(dòng)詞+名詞 首字母大寫 專用名詞全部大寫 長單詞縮寫 返回值是布爾型的,對返回1還是0的表意清晰,Unsigned int ADC16_Sample(); CharLCD_Init(); CharRTC_Get(); VoidPWM_SetPeriod(); VoidFlash_WriteChar(); VoidUART_GetChar(); CharKey_GetKey(); CharTouchPad_GetKey();,TransmitTx RecetiveRx CountCnt To2,Char
23、UART_CheckTxBuff();/檢查緩沖區(qū) Char UART_IsTxBuffFull();/緩沖區(qū)是否已滿,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),32,1.6.3 表達(dá)式,好的表達(dá)式可以朗讀出來 消除歧義,運(yùn)算優(yōu)先級(jí)拿不準(zhǔn)就加括號(hào),表達(dá)式復(fù)雜就拆開。,If ( UART_IsTxBuffFull() )UART_ClearTxBuff(); ElseUART_PutChar(0 x55);,i=5; j=+i;結(jié)果i=6,j=6等效于i=5; i=i+1; j=i; i=5; j=i+;結(jié)果i=6,j=5等效于i=5; j=i; i=i+1;,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),
24、33,1.6.4 風(fēng)格一致性,For(i=0;i100;i+) for(j=0;j200;j+) Count+; While(a=b) if(c=d) Flag=1; else Flag=0; ,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),34,1.6.5 注釋,注釋不是對代碼的重復(fù)。要意譯,不要直譯。,For(i=6;iDOT;i- -) /從第6位到小數(shù)點(diǎn)依次遞減 if(DispBuffi=0) DispBuffi= ; /如果該位數(shù)值是0,則替換成空格 else break; /如果不是,則跳出循環(huán) ,For(i=6;iDOT;i- -) /對全部6位顯示數(shù)據(jù)進(jìn)行判斷 if(DispBuffi
25、=0) DispBuffi= ; /消隱小數(shù)點(diǎn)前的無效0 else break; ,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),35,功能函數(shù)的注釋,/* * 名 稱:LCD_DisplayDigit() * 功 能:在LCD上任意位置顯示一個(gè)數(shù)字 * 入口參數(shù):Digit: 待顯示數(shù)字 (09) Location: 顯示位置 從左至右對應(yīng)76543210 * 出口參數(shù):無 * 說 明:調(diào)用該函數(shù)不影響LCD其他位的顯示。 * 范 例:LCD_DisplayDigit(3,0); /在第一位(右側(cè)最低位)顯示3 LCD_DisplayDigit(2,1); /在第二位顯示2 LCD_DisplayD
26、igit(1,2); /在第三位顯示1 - 顯示結(jié)果: 123 */ void LCD_DisplayDigit ( char Digit, char Location ) char DigitSeg;/ 存放字形筆劃的變量 char *pLCD;/ 存放LCD顯存指針的變量 DigitSeg = LCD_TabDigit; / 得到待顯示數(shù)字的字形筆劃 pLCD= / 在LCDM1之后Location個(gè)單元顯示出數(shù)字 ,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),36,1.6.6 宏定義,宏定義給予常數(shù)可讀性 宏定義全部大寫,以區(qū)別變量 數(shù)據(jù)加括號(hào),注釋使用/*/,#define TXBUFF_S
27、IZE(128)/*發(fā)送緩沖區(qū)大小*/ #define LCD_ROW(128)/*點(diǎn)陣液晶行數(shù)*/ #define LCD_CLUMN(128)/*點(diǎn)陣液晶列數(shù)*/ #define LCD_BUF_SIZE(LCD_CLUMN*LCD_ROW/8)/*點(diǎn)陣液晶緩沖區(qū)大小*/,Unsigned char TxBuffTXBUFF_SIZE;/定義發(fā)送緩沖區(qū) Char IsTxBuffFull() if(NumOfTxChars=TXBUFF_SIZE) return(1);/緩沖區(qū)是否滿? else return(0); ,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),37,使用宏定義時(shí),要防止定點(diǎn)數(shù)
28、溢出,宏定義的用途廣泛 增強(qiáng)程序的可移植性 進(jìn)行軟件版本的管理,#define VOLT_RATE(1000)/*比例系數(shù)*/ . long Voltage; Int InputValue; . Voltage=InputValue*VOLT_RATE;/*可能溢出*/,#define VOLT_RATE(long(1000)/*比例系數(shù),強(qiáng)行整成long*/,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),38,1.7可移植性,可移植性是嵌入式軟件設(shè)計(jì)的重要思想 用到不同的硬件,比如LCD到數(shù)碼管 用到不同的處理器,比如51到430,ARM 編程時(shí)應(yīng)盡量消除硬件差異 無法消除的差異,集中到小的局部來修
29、改,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),39,1.7.1 消除CPU差異,例如用宏定義消除IO口操作的差異 此后的程序不用修改,直接用LED_ON和LED_OFF來操作IO口,#include”MSP430 x42x.h” #define LED_ONP2OUT |=BIT0 #define LED_OFFP2OUT #define LED_ONP2.0=1; #define LED_OFFP2.0=0;,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),40,1.7.2 消除硬件差異,用宏定義消除硬件差異 例如LCD或數(shù)碼管的IO口,順序經(jīng)常會(huì)改變,/*宏定義,數(shù)碼管ag、DP各段對應(yīng)的比特,更換硬件
30、只用改動(dòng)以下8行*/ #define a0 x01 #define b0 x02 #define c0 x04 #define d0 x08 #define e0 x10 #define f0 x20 #define g0 x40 #define DP0 x80,/*宏定義自動(dòng)生成段碼表,不要改動(dòng)*/ Const char LCD_Tab = a+b+c+d+e+f,/0 b+c,/1 a+b+d+e+g,/2 a+b+c+d+g,/3 b+c+f+g,/4 a+c+d+f+g,/5 a+c+d+e+f+g, /6 a+b+c,/7 a+b+c+d+e+f+g, /8 a+b+c+d+f+g,
31、 /9 #undef a .,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),41,用函數(shù)來消除硬件差異,例如控制電機(jī)的啟和停 直流電機(jī)設(shè)置IO口高低電平即可 步進(jìn)電機(jī)要輸出一定規(guī)則的脈沖序列 大型交流電機(jī)需要用串口控制變頻器 我們把具體操作“封”在函數(shù)里,Moter_ON( ) . Moter_OFF( ) . ,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),42,1.7.3 軟件層次劃分,大量復(fù)雜的調(diào)用函數(shù)需要有清晰的層次關(guān)系,菜單/人機(jī)界面,Key_GetKey(); Key_WaitKey();,鍵盤緩沖區(qū)【FIFO】,定時(shí)掃描并判斷按鍵,LCD_Clear(); LCD_DisplayNumber()
32、; LCD_DisplayDecimal(); LCD_InsertChar(); LCD_DeleteChar();,顯示緩沖區(qū)【數(shù)組】,LED定時(shí)循環(huán)掃描,LED顯存映射,應(yīng)用層,功能函數(shù)層,硬件隔離層,硬件驅(qū)動(dòng)層,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),43,應(yīng)用層:最終功能,往往和人的感官有關(guān) 功能層:功能函數(shù),表達(dá)具體要干什么 硬件隔離層:宏定義、緩沖區(qū)、函數(shù)封裝 硬件隔離層(硬件抽象層Hardware Abstract Layer,HAL)是非常重要的環(huán)節(jié)。 功能函數(shù)只操作硬件隔離層的數(shù)據(jù),與具體硬件無關(guān)。 硬件驅(qū)動(dòng)層:和具體硬件有關(guān)的代碼,硬件驅(qū)動(dòng)層從硬件隔離層獲得“指示”,或是將
33、“結(jié)果”發(fā)送至硬件隔離層。,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),44,軟件劃分層次的好處,每個(gè)層的函數(shù)只對上下層“可見”,這樣設(shè)置好接口參數(shù)后,各單元軟件可獨(dú)立開發(fā)。 改動(dòng)硬件時(shí),只需配置相應(yīng)的底層驅(qū)動(dòng),修改硬件隔離層,而整個(gè)大軟件功能可以不變。軟件的可移植性增強(qiáng)。 功能層的函數(shù)無需關(guān)心硬件如何實(shí)現(xiàn),以及何時(shí)何處被應(yīng)用層調(diào)用,專心做好自己的事情就行。 將大型軟件任務(wù)分塊,團(tuán)隊(duì)合作。只要明確了模塊功能,接口規(guī)范,就能分派任務(wù)。,青島大學(xué)-TI 大學(xué)生創(chuàng)新中心 傅強(qiáng),45,1.7.4 接口,Void RTC_Tick(int DivSec)/硬件無關(guān)的走時(shí)函數(shù),DivSec入口 char Days;/每月的天數(shù)變量 DSEC+;/定時(shí)中斷加數(shù) DISABLE_INT;/宏定義關(guān)總中斷 If(DSEC=DivSec)SECOND+;DS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 無線基站維護(hù)培訓(xùn)課件
- 抖音商戶短視頻創(chuàng)意提案評審制度
- BWA-6047-生命科學(xué)試劑-MCE
- 江蘇省興化市顧莊區(qū)三校2024-2025學(xué)年七上數(shù)學(xué)期末教學(xué)質(zhì)量檢測模擬試題含解析
- 美發(fā)培訓(xùn)卷杠課件
- 國際多式聯(lián)運(yùn)操作規(guī)范與風(fēng)險(xiǎn)管理
- 航空行業(yè)三年發(fā)展報(bào)告:國際與國內(nèi)市場的比較研究
- 2024-2025學(xué)年浙江省杭州市濱江區(qū)數(shù)學(xué)七年級(jí)第一學(xué)期期末調(diào)研試題含解析
- 云南司法警官職業(yè)學(xué)院《國畫山水》2023-2024學(xué)年第一學(xué)期期末試卷
- 河道垃圾清理管理辦法
- 七十歲以上老年人換本考駕照三力測試題含答案
- 2026年版廣西高等職業(yè)教育考試(新職教高考)新聞傳播大類《攝影攝像》模擬試卷(第1套)
- 2025年度分布式光伏項(xiàng)目居間代理服務(wù)合同
- 《輸血相容性檢測設(shè)備性能驗(yàn)證技術(shù)規(guī)范》
- 2024魯科版五四制六年級(jí)生物上冊全冊知識(shí)點(diǎn)(填空版+背誦版)
- 混齡分組教學(xué)活動(dòng)設(shè)計(jì)
- 債權(quán)轉(zhuǎn)讓協(xié)議書范文范本下載電子版
- 代理記賬業(yè)務(wù)內(nèi)部規(guī)范(三篇)
- 會(huì)計(jì)師事務(wù)所職業(yè)道德規(guī)章制度
- 蘇教版二年級(jí)下冊混合計(jì)算題200道及答案
- 外研版(2021)中職英語基礎(chǔ)模塊1 Unit 6 Not Just Tasty For Better Performance,Around the world 教案
評論
0/150
提交評論