




已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第2章 MSP430單片機原理,2.1 MSP430F249單片機基本結(jié)構(gòu)與原理 MSP430F249的主要結(jié)構(gòu)特點 供電電壓范圍 1.8V3.6V。 超低功耗:活動狀態(tài)270uA(1MHz,2.2V);待機模式0.3uA;關(guān)機模式0.1uA。 16位RISC精簡指令集處理器。 時鐘系統(tǒng):多種時鐘源,可靈活使用。時鐘頻率達到16MHz;具有內(nèi)部振蕩器;可外接32kHz低頻晶振;外接時鐘輸入。,12位A/D轉(zhuǎn)換器,內(nèi)部參考電壓,采用保持電路。 16位定時器A,3個捕獲/比較寄存器。 16位定時器B,7個捕獲/比較寄存器。 4個通用串口:USCI_A0和USCI_A1、USCI_B0和USCI_B1(I2C、SPI)。 60kB+256B的flash程序存儲器,2kB的RAM數(shù)據(jù)存儲器。 64引腳QFP封裝。,MSP430F249的主要結(jié)構(gòu)特點,MSP430F24x系列單片機功能結(jié)構(gòu)示意圖,MSP430F249單片機引腳圖,(1)CPU簡介,MSP430單片機的CPU為16位RISC精簡指令集的處理器,只有27條正交匯編指令和7種尋址方式。RISC處理器基本上是為高級語言所設(shè)計的,編譯程序?qū)φ恢噶钕到y(tǒng)很容易做到最優(yōu)化,利于產(chǎn)生高效緊湊的代碼。MSP430CPU中集成了16個16位通用寄存器R0R15,其中R0R3分別復(fù)用為程序指針PC、堆棧指針SP、狀態(tài)寄存器SR和常數(shù)發(fā)生器CG1/CG2。這些寄存器之間的操作只需要一個CPU周期。,1)程序計數(shù)器(PC指針)也就是CPU專用寄存器R0,PC指針是一個16位寄存器,可以尋址64kB的空間。MSP430單片機的指令長度以字(16位)為最小單位,而程序存儲器單元以字節(jié)(8位)為單位,所以PC的值總是偶數(shù)。,2)堆棧指針SP為CPU專用寄存器R1,SP指針為16為寄存器,也總是偶數(shù)的。堆棧是在片內(nèi)RAM中實現(xiàn)的,通常將堆棧指針設(shè)置為片內(nèi)RAM的最高地址加一。使用C語言編程時,集成編譯軟件IAR會自動設(shè)置堆棧指針初始值。對程序員來說無需關(guān)心細節(jié),編譯結(jié)束后在信息窗提示的編譯結(jié)果會給出 RAM 使用量的大小,只要不超過 RAM 區(qū)實際容量并稍留余量給堆棧用即可。使用匯編語言編程時必須注意堆棧指針的正確設(shè)置,否則堆??赡軙采w你的變量區(qū),導(dǎo)致程序出錯。,(2)片內(nèi)存儲器 MSP430單片機采用馮諾依曼結(jié)構(gòu),程序存儲器flash、數(shù)據(jù)存儲器RAM、特殊功能寄存器以及中斷向量全部映射到64kB內(nèi)部地址空間。MSP430不同型號單片機地址空間略有不同,MSP430F249的存儲器結(jié)構(gòu)如表2-2所示。,表2-3工作模式表,2.2 MSP430單片機的C語言基礎(chǔ),C語言是一種結(jié)構(gòu)化的高級語言,其優(yōu)點是語言簡潔、表達能力強、使用方便靈活、可讀性好、可移植性強。C語言程序本身不依賴單片機硬件,如果更改工程項目中的單片機型號,對C語言程序稍加修改就可以進行程序移植,而且移植程序時不一定要求程序開發(fā)人員詳細掌握新型號單片機的指令系統(tǒng)。 C語言程序的書寫格式十分自由。一條語句可以寫成一行,也可以寫成幾行;還可以在一行內(nèi)寫多條語句;但是需要注意的是,每條語句都必須以分號“;”作為結(jié)束符。,為了C語言程序能夠書寫清晰,便于閱讀、理解和維護,在書寫C語言程序時最好遵循以下規(guī)則。 a)一個聲明或一條語句占一行; b)不同結(jié)構(gòu)層次的語句,從不同的起始位置開始,機縮進相同的字數(shù); c)用括起來的部分表示程序的某一層次結(jié)構(gòu)。,1)C語言的標識符是用來標識源程序中某個對象名字的。這些對象可以是函數(shù)、變量、常量、數(shù)組、數(shù)據(jù)類型、存儲方式、語句等。一個標識符由字符串、數(shù)字和下劃線等組成,第一個字符必須是字母或下劃線,通常以下劃線開頭的標識符是編譯系統(tǒng)專用的,因此在編寫C語言源程序時一般不要使用以下劃線開頭的標識符,而將下劃線用作分段符。標識符的長度由系統(tǒng)決定,標識符最長可達255個字符,編寫源程序時標識符的長度不要超過 32個字符。,2)關(guān)鍵字是一類具有固定名稱和特定含義的特殊標識符,又稱為保留字。在編寫C語言源程序時一般不允許將關(guān)鍵字另作別用,換句話說就是對于標識符的命名不要與關(guān)鍵字相同。上面表2.4所列的C語言關(guān)鍵字由系統(tǒng)保留不能用作用戶標識符。 3)程序中對于標識符的命名應(yīng)當簡潔明了,含義清晰,便于閱讀理解,如用標識符“max”表示最大值,用“TIMER0”表示定時器0等。盡量不要取名“aa”、 “bb”等等沒有特定意義的標識符,這樣雖然沒有違反C語言的規(guī)則,但是在程序里就很不容易理解。,4)C語言區(qū)分大小寫字母,C語言編譯器在對程序進行編譯時,對于程序中同一個字母的大小寫作為不同的變量來處理。例如定義一個延時函數(shù)的形式參數(shù)time,但是如果程序當中再出現(xiàn)一個由大寫字母定義的標識符TIME,那么它們在程序當中是兩個不同的標識符,是沒有沖突的。 5)C語言程序中有且只有一個main函數(shù),一個C語言程序,無論main函數(shù)的物理位置在那里,總是從main函數(shù)開始執(zhí)行。,6)每句程序語句后面一定要加分號,分號是C語言結(jié)構(gòu)的一部分,如果缺少了就會語法出錯。 7)注釋,在程序中添加注釋是為了能更加容易讀懂和理解程序,IAR有兩種風格的注釋方法“/”和“/*-*/”。 “/”的意思是在其后面的全部引導(dǎo)為注釋,而“/*-*/”的意思是在“/*”開始,一直到遇到“*/”為止,在其里面的內(nèi)容都被認為是注釋。,Float和double的指數(shù)位是按補碼的形式來表示的,所以float的指數(shù)范圍為-128+127,而double的指數(shù)范圍為-1024+1023。float的范圍為-2128 +2128,也即-3.40E+38 +3.40E+38;double的范圍為-21024 +21024,也即-1.79E+308 +1.79E+308。 float和double的精度是由尾數(shù)的位數(shù)來決定的。float:223 = 8388608,一共七位,這意味著最多能有7位有效數(shù)字,float的精度為7位; double:252 = 4503599627370496,一共16位,double的精度為16位。,const:定義常量。在 C430 語言中,const關(guān)鍵字定義的常量實際上被放在了 程序存儲器flash中,經(jīng)常用const關(guān)鍵字定義顯示表之類的常數(shù)數(shù)組。 extern:聲明外部變量,外部變量是指在函數(shù)或文件外部定義的全局變量。使用時,extern置于變量或函數(shù)前,表示變量或函數(shù)的定義在別的文件中,提示編譯器在遇到此變量和函數(shù)時在其他模塊中尋找它的定義, static :定義靜態(tài)局部變量或靜態(tài)函數(shù),靜態(tài)局部變量或靜態(tài)函數(shù)只有本文件內(nèi)的代碼才能訪問它,它的名字在其它文件中不可見。有時候希望函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,即其占用的存儲單元不釋放,在下次該函數(shù)調(diào)用時,該變量保留上一次函數(shù)調(diào)用結(jié)束時的值。這時就應(yīng)該指定局部變量為靜態(tài)局部變量。,全局變量:只要定義在函數(shù)體(包括主函數(shù))外,就是全局變量了,編譯器為全局變量安排特定的數(shù)據(jù)區(qū),這些數(shù)據(jù)區(qū)為全局變量專用。全局變量一般定義在C程序的開頭部分、主函數(shù)之前,在與該程序有關(guān)的所有文件都可以使用該變量。程序開始時分配空間,程序結(jié)束時釋放空間,默認初始化為0。對于多文件C語言程序,如果全局變量定義在其它文件中,那么別的程序文件里面的函數(shù)要訪問另一個文件里面的全局變量,須在對全局變量進行外部變量聲明,關(guān)鍵詞extern。 局部變量是在一個函數(shù)內(nèi)部定義的變量,它只在定義它的那個函數(shù)范圍以內(nèi)有效,在此函數(shù)之外局部變量即失去意義,因而也就不能使用這些變量了。不同的函數(shù)可以使用相同的局部變量名,由于它們的作用范圍不同,不會相互干擾。函數(shù)的形式參數(shù)也屬于局部變量。局部變量在每次函數(shù)調(diào)用時分配存儲空間,在每次函數(shù)返回時釋放存儲空間。,自增、自減運算符說明: +i 意思是:i自增1后再參與運算。 -i 意思是:i自減1后再參與運算。 i+ 意思是:i參與運算后,i的值再自增1。 i- 意思是:i參與運算后,i的值再自減1。 復(fù)合賦值運算符說明: 在賦值運算符“”的前面加上其它運算符,就構(gòu)成了所謂復(fù)合賦值運算符。 + 加法賦值, 右移位賦值,-減法賦值, 邏輯與賦值, * 乘法賦值,邏輯或賦值,除法賦值, 邏輯異或賦值, 取模賦值, 邏輯非賦值, 左移位賦值。,1)盡可能避免浮點運算。對于單片機來說,浮點數(shù)的運算速度很慢, RAM開銷也大,且有效位數(shù)有限;在低功耗應(yīng)用中CPU運算時間直接關(guān)系到平均功耗。因此在編程初期就要養(yǎng)成盡量避免使用浮點數(shù)的習慣。 2)防止定點數(shù)溢出。定點數(shù)運算首先要防止數(shù)據(jù)溢出。 3)小數(shù)的處理。遇到需要保留小數(shù)的運算,可以采用浮點數(shù),但是軟件開銷較大。用定點數(shù)也可以處理小數(shù)。原理就是先擴大,再運算。 4)盡量減少乘除法。430 單片機沒有乘法/除法指令,乘除操作會被編譯器轉(zhuǎn)換成移位和加法來實現(xiàn)。如果乘除的數(shù)值剛好是 2 的冪,那么可以用移位直接替代乘除法,運算速度會提高很多。,例如將 P1.0 置高、將 P1.1 置低,將 P1.2 取反,我們可以寫成: P1OUT |= 0x01; /P2.0 置高 P1OUT /P1.1/2/3/4 全置高,char Key; if(P1IN /讀取 P1.5 狀態(tài)賦給變量 Key。,函數(shù)是C語言中的一種基本模塊。在進行程序設(shè)計的過程中,如果所設(shè)計的程序較大,一般應(yīng)將其分成若干個子程序模塊,每個子程序模塊完成一種特定的功能。在C語言中,子程序是用函數(shù)來實現(xiàn)的。對于一些需要經(jīng)常使用的子程序可以按函數(shù)來設(shè)計,以供反復(fù)調(diào)用。此外,EW430編譯器還提供了豐富的運行庫函數(shù),用戶可以根據(jù)需要隨時調(diào)用。這種模塊化的程序設(shè)計方法,可以大大提高編程效率。 從用戶的角度來看,有兩種函數(shù):標準庫函數(shù)和用戶自定義函數(shù)。標準庫函數(shù)是IAR EW430編譯器提供的,不需要用戶進行定義,可以直接調(diào)用。用戶自定義函數(shù)是用戶根據(jù)自己的需要編寫的能實現(xiàn)特定功能的函數(shù),它必須先進行定義之后才能調(diào)用。,指針是C語言中一個十分重要的概念,也是C語言的一個難點,曾經(jīng)有許多人這樣講過,要精通指針的程序員才算正真懂得C語言。只要掌握指針,才能使程序變得更加簡潔、緊湊、高效,在C語言當中指針可以談得上是全部精華的所在。初學者在開始學習時可能會有一點不習慣但是不要灰心,只要我們在平時多思考、多上機,那么很快就可以掌握它了。 所謂指針就是指內(nèi)存中的地址,它可能是變量的地址,也可能是函數(shù)的入口地址。如果指針變量存儲的地址是變量的地址,則稱為變量的指針,簡稱變量指針;如果指針變量存儲的地址是函數(shù)的入口地址,則稱為函數(shù)的指針,簡稱函數(shù)指針。 變量的指針就是該變量的地址,可以定義一個指向某個變量的指針變量。為了表示指針變量和它所指向的變量地址之間的關(guān)系,C語言提供了兩個專門的運算符: * 取內(nèi)容, 取地址。,C語言程序的開始部分通常是預(yù)處理命令,如程序中通常遇到的include命令。這個預(yù)處理命令通知編譯器在對程序進行編譯時,將所需要的頭文件讀入后再一起進行編譯。一般在“頭文件”中包含有程序在編譯時的一
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國錦綸切片行業(yè)競爭格局規(guī)劃研究報告
- 2025-2030年中國銅礦采選行業(yè)發(fā)展狀況及營銷戰(zhàn)略研究報告
- 2025-2030年中國蜂窩紙板市場運營狀況及投資戰(zhàn)略研究報告
- 2025-2030年中國藥學教育發(fā)展模式及未來投資戰(zhàn)略分析報告
- 2025-2030年中國聚碳酸酯pc行業(yè)運行狀況規(guī)劃分析報告
- 2025-2030年中國粗雜糧行業(yè)競爭格局及發(fā)展前景分析報告
- 2025-2030年中國空氣污染治理設(shè)備市場經(jīng)營狀況及發(fā)展趨勢分析報告
- 2025-2030年中國碼垛機器人市場運行動態(tài)及發(fā)展前景分析報告
- 幼兒健康有營養(yǎng)的蔬菜教案(12篇)
- 中國傳媒大學《電子與電工技術(shù)》2023-2024學年第二學期期末試卷
- 四川省2024年中考數(shù)學試卷十七套合卷【附答案】
- 北師大版二年級數(shù)學下冊全冊10套試卷(附答案)
- GB/T 2423.17-2024環(huán)境試驗第2部分:試驗方法試驗Ka:鹽霧
- 數(shù)字出版概論 課件 第六章 數(shù)字內(nèi)容加工、管理技術(shù)
- 糖尿病并發(fā)癥的早期篩查
- 2019年山東省職業(yè)院校技能大賽中職組“沙盤模擬企業(yè)經(jīng)營”賽項規(guī)程
- GB/T 32399-2024信息技術(shù)云計算參考架構(gòu)
- 初中體育與健康 初二 水平四(八年級)田徑大單元教學設(shè)計+快速跑教案
- 2024-2025學年華東師大版數(shù)學七年級上冊計算題專項訓練
- 移動通信運營商倉庫安全管理制度
評論
0/150
提交評論