MSP430單片機(jī)原理.ppt_第1頁(yè)
MSP430單片機(jī)原理.ppt_第2頁(yè)
MSP430單片機(jī)原理.ppt_第3頁(yè)
MSP430單片機(jī)原理.ppt_第4頁(yè)
MSP430單片機(jī)原理.ppt_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第2章 MSP430單片機(jī)原理,2.1 MSP430F249單片機(jī)基本結(jié)構(gòu)與原理 MSP430F249的主要結(jié)構(gòu)特點(diǎn) 供電電壓范圍 1.8V3.6V。 超低功耗:活動(dòng)狀態(tài)270uA(1MHz,2.2V);待機(jī)模式0.3uA;關(guān)機(jī)模式0.1uA。 16位RISC精簡(jiǎn)指令集處理器。 時(shí)鐘系統(tǒng):多種時(shí)鐘源,可靈活使用。時(shí)鐘頻率達(dá)到16MHz;具有內(nèi)部振蕩器;可外接32kHz低頻晶振;外接時(shí)鐘輸入。,12位A/D轉(zhuǎn)換器,內(nèi)部參考電壓,采用保持電路。 16位定時(shí)器A,3個(gè)捕獲/比較寄存器。 16位定時(shí)器B,7個(gè)捕獲/比較寄存器。 4個(gè)通用串口:USCI_A0和USCI_A1、USCI_B0和USCI_B1(I2C、SPI)。 60kB+256B的flash程序存儲(chǔ)器,2kB的RAM數(shù)據(jù)存儲(chǔ)器。 64引腳QFP封裝。,MSP430F249的主要結(jié)構(gòu)特點(diǎn),MSP430F24x系列單片機(jī)功能結(jié)構(gòu)示意圖,MSP430F249單片機(jī)引腳圖,(1)CPU簡(jiǎn)介,MSP430單片機(jī)的CPU為16位RISC精簡(jiǎn)指令集的處理器,只有27條正交匯編指令和7種尋址方式。RISC處理器基本上是為高級(jí)語(yǔ)言所設(shè)計(jì)的,編譯程序?qū)φ恢噶钕到y(tǒng)很容易做到最優(yōu)化,利于產(chǎn)生高效緊湊的代碼。MSP430CPU中集成了16個(gè)16位通用寄存器R0R15,其中R0R3分別復(fù)用為程序指針PC、堆棧指針SP、狀態(tài)寄存器SR和常數(shù)發(fā)生器CG1/CG2。這些寄存器之間的操作只需要一個(gè)CPU周期。,1)程序計(jì)數(shù)器(PC指針)也就是CPU專用寄存器R0,PC指針是一個(gè)16位寄存器,可以尋址64kB的空間。MSP430單片機(jī)的指令長(zhǎng)度以字(16位)為最小單位,而程序存儲(chǔ)器單元以字節(jié)(8位)為單位,所以PC的值總是偶數(shù)。,2)堆棧指針SP為CPU專用寄存器R1,SP指針為16為寄存器,也總是偶數(shù)的。堆棧是在片內(nèi)RAM中實(shí)現(xiàn)的,通常將堆棧指針設(shè)置為片內(nèi)RAM的最高地址加一。使用C語(yǔ)言編程時(shí),集成編譯軟件IAR會(huì)自動(dòng)設(shè)置堆棧指針初始值。對(duì)程序員來(lái)說(shuō)無(wú)需關(guān)心細(xì)節(jié),編譯結(jié)束后在信息窗提示的編譯結(jié)果會(huì)給出 RAM 使用量的大小,只要不超過(guò) RAM 區(qū)實(shí)際容量并稍留余量給堆棧用即可。使用匯編語(yǔ)言編程時(shí)必須注意堆棧指針的正確設(shè)置,否則堆??赡軙?huì)覆蓋你的變量區(qū),導(dǎo)致程序出錯(cuò)。,(2)片內(nèi)存儲(chǔ)器 MSP430單片機(jī)采用馮諾依曼結(jié)構(gòu),程序存儲(chǔ)器flash、數(shù)據(jù)存儲(chǔ)器RAM、特殊功能寄存器以及中斷向量全部映射到64kB內(nèi)部地址空間。MSP430不同型號(hào)單片機(jī)地址空間略有不同,MSP430F249的存儲(chǔ)器結(jié)構(gòu)如表2-2所示。,表2-3工作模式表,2.2 MSP430單片機(jī)的C語(yǔ)言基礎(chǔ),C語(yǔ)言是一種結(jié)構(gòu)化的高級(jí)語(yǔ)言,其優(yōu)點(diǎn)是語(yǔ)言簡(jiǎn)潔、表達(dá)能力強(qiáng)、使用方便靈活、可讀性好、可移植性強(qiáng)。C語(yǔ)言程序本身不依賴單片機(jī)硬件,如果更改工程項(xiàng)目中的單片機(jī)型號(hào),對(duì)C語(yǔ)言程序稍加修改就可以進(jìn)行程序移植,而且移植程序時(shí)不一定要求程序開(kāi)發(fā)人員詳細(xì)掌握新型號(hào)單片機(jī)的指令系統(tǒng)。 C語(yǔ)言程序的書(shū)寫(xiě)格式十分自由。一條語(yǔ)句可以寫(xiě)成一行,也可以寫(xiě)成幾行;還可以在一行內(nèi)寫(xiě)多條語(yǔ)句;但是需要注意的是,每條語(yǔ)句都必須以分號(hào)“;”作為結(jié)束符。,為了C語(yǔ)言程序能夠書(shū)寫(xiě)清晰,便于閱讀、理解和維護(hù),在書(shū)寫(xiě)C語(yǔ)言程序時(shí)最好遵循以下規(guī)則。 a)一個(gè)聲明或一條語(yǔ)句占一行; b)不同結(jié)構(gòu)層次的語(yǔ)句,從不同的起始位置開(kāi)始,機(jī)縮進(jìn)相同的字?jǐn)?shù); c)用括起來(lái)的部分表示程序的某一層次結(jié)構(gòu)。,1)C語(yǔ)言的標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)源程序中某個(gè)對(duì)象名字的。這些對(duì)象可以是函數(shù)、變量、常量、數(shù)組、數(shù)據(jù)類型、存儲(chǔ)方式、語(yǔ)句等。一個(gè)標(biāo)識(shí)符由字符串、數(shù)字和下劃線等組成,第一個(gè)字符必須是字母或下劃線,通常以下劃線開(kāi)頭的標(biāo)識(shí)符是編譯系統(tǒng)專用的,因此在編寫(xiě)C語(yǔ)言源程序時(shí)一般不要使用以下劃線開(kāi)頭的標(biāo)識(shí)符,而將下劃線用作分段符。標(biāo)識(shí)符的長(zhǎng)度由系統(tǒng)決定,標(biāo)識(shí)符最長(zhǎng)可達(dá)255個(gè)字符,編寫(xiě)源程序時(shí)標(biāo)識(shí)符的長(zhǎng)度不要超過(guò) 32個(gè)字符。,2)關(guān)鍵字是一類具有固定名稱和特定含義的特殊標(biāo)識(shí)符,又稱為保留字。在編寫(xiě)C語(yǔ)言源程序時(shí)一般不允許將關(guān)鍵字另作別用,換句話說(shuō)就是對(duì)于標(biāo)識(shí)符的命名不要與關(guān)鍵字相同。上面表2.4所列的C語(yǔ)言關(guān)鍵字由系統(tǒng)保留不能用作用戶標(biāo)識(shí)符。 3)程序中對(duì)于標(biāo)識(shí)符的命名應(yīng)當(dāng)簡(jiǎn)潔明了,含義清晰,便于閱讀理解,如用標(biāo)識(shí)符“max”表示最大值,用“TIMER0”表示定時(shí)器0等。盡量不要取名“aa”、 “bb”等等沒(méi)有特定意義的標(biāo)識(shí)符,這樣雖然沒(méi)有違反C語(yǔ)言的規(guī)則,但是在程序里就很不容易理解。,4)C語(yǔ)言區(qū)分大小寫(xiě)字母,C語(yǔ)言編譯器在對(duì)程序進(jìn)行編譯時(shí),對(duì)于程序中同一個(gè)字母的大小寫(xiě)作為不同的變量來(lái)處理。例如定義一個(gè)延時(shí)函數(shù)的形式參數(shù)time,但是如果程序當(dāng)中再出現(xiàn)一個(gè)由大寫(xiě)字母定義的標(biāo)識(shí)符TIME,那么它們?cè)诔绦虍?dāng)中是兩個(gè)不同的標(biāo)識(shí)符,是沒(méi)有沖突的。 5)C語(yǔ)言程序中有且只有一個(gè)main函數(shù),一個(gè)C語(yǔ)言程序,無(wú)論main函數(shù)的物理位置在那里,總是從main函數(shù)開(kāi)始執(zhí)行。,6)每句程序語(yǔ)句后面一定要加分號(hào),分號(hào)是C語(yǔ)言結(jié)構(gòu)的一部分,如果缺少了就會(huì)語(yǔ)法出錯(cuò)。 7)注釋,在程序中添加注釋是為了能更加容易讀懂和理解程序,IAR有兩種風(fēng)格的注釋方法“/”和“/*-*/”。 “/”的意思是在其后面的全部引導(dǎo)為注釋,而“/*-*/”的意思是在“/*”開(kāi)始,一直到遇到“*/”為止,在其里面的內(nèi)容都被認(rèn)為是注釋。,Float和double的指數(shù)位是按補(bǔ)碼的形式來(lái)表示的,所以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ù)來(lái)決定的。float:223 = 8388608,一共七位,這意味著最多能有7位有效數(shù)字,float的精度為7位; double:252 = 4503599627370496,一共16位,double的精度為16位。,const:定義常量。在 C430 語(yǔ)言中,const關(guān)鍵字定義的常量實(shí)際上被放在了 程序存儲(chǔ)器flash中,經(jīng)常用const關(guān)鍵字定義顯示表之類的常數(shù)數(shù)組。 extern:聲明外部變量,外部變量是指在函數(shù)或文件外部定義的全局變量。使用時(shí),extern置于變量或函數(shù)前,表示變量或函數(shù)的定義在別的文件中,提示編譯器在遇到此變量和函數(shù)時(shí)在其他模塊中尋找它的定義, static :定義靜態(tài)局部變量或靜態(tài)函數(shù),靜態(tài)局部變量或靜態(tài)函數(shù)只有本文件內(nèi)的代碼才能訪問(wèn)它,它的名字在其它文件中不可見(jiàn)。有時(shí)候希望函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,即其占用的存儲(chǔ)單元不釋放,在下次該函數(shù)調(diào)用時(shí),該變量保留上一次函數(shù)調(diào)用結(jié)束時(shí)的值。這時(shí)就應(yīng)該指定局部變量為靜態(tài)局部變量。,全局變量:只要定義在函數(shù)體(包括主函數(shù))外,就是全局變量了,編譯器為全局變量安排特定的數(shù)據(jù)區(qū),這些數(shù)據(jù)區(qū)為全局變量專用。全局變量一般定義在C程序的開(kāi)頭部分、主函數(shù)之前,在與該程序有關(guān)的所有文件都可以使用該變量。程序開(kāi)始時(shí)分配空間,程序結(jié)束時(shí)釋放空間,默認(rèn)初始化為0。對(duì)于多文件C語(yǔ)言程序,如果全局變量定義在其它文件中,那么別的程序文件里面的函數(shù)要訪問(wèn)另一個(gè)文件里面的全局變量,須在對(duì)全局變量進(jìn)行外部變量聲明,關(guān)鍵詞extern。 局部變量是在一個(gè)函數(shù)內(nèi)部定義的變量,它只在定義它的那個(gè)函數(shù)范圍以內(nèi)有效,在此函數(shù)之外局部變量即失去意義,因而也就不能使用這些變量了。不同的函數(shù)可以使用相同的局部變量名,由于它們的作用范圍不同,不會(huì)相互干擾。函數(shù)的形式參數(shù)也屬于局部變量。局部變量在每次函數(shù)調(diào)用時(shí)分配存儲(chǔ)空間,在每次函數(shù)返回時(shí)釋放存儲(chǔ)空間。,自增、自減運(yùn)算符說(shuō)明: +i 意思是:i自增1后再參與運(yùn)算。 -i 意思是:i自減1后再參與運(yùn)算。 i+ 意思是:i參與運(yùn)算后,i的值再自增1。 i- 意思是:i參與運(yùn)算后,i的值再自減1。 復(fù)合賦值運(yùn)算符說(shuō)明: 在賦值運(yùn)算符“”的前面加上其它運(yùn)算符,就構(gòu)成了所謂復(fù)合賦值運(yùn)算符。 + 加法賦值, 右移位賦值,-減法賦值, 邏輯與賦值, * 乘法賦值,邏輯或賦值,除法賦值, 邏輯異或賦值, 取模賦值, 邏輯非賦值, 左移位賦值。,1)盡可能避免浮點(diǎn)運(yùn)算。對(duì)于單片機(jī)來(lái)說(shuō),浮點(diǎn)數(shù)的運(yùn)算速度很慢, RAM開(kāi)銷(xiāo)也大,且有效位數(shù)有限;在低功耗應(yīng)用中CPU運(yùn)算時(shí)間直接關(guān)系到平均功耗。因此在編程初期就要養(yǎng)成盡量避免使用浮點(diǎn)數(shù)的習(xí)慣。 2)防止定點(diǎn)數(shù)溢出。定點(diǎn)數(shù)運(yùn)算首先要防止數(shù)據(jù)溢出。 3)小數(shù)的處理。遇到需要保留小數(shù)的運(yùn)算,可以采用浮點(diǎn)數(shù),但是軟件開(kāi)銷(xiāo)較大。用定點(diǎn)數(shù)也可以處理小數(shù)。原理就是先擴(kuò)大,再運(yùn)算。 4)盡量減少乘除法。430 單片機(jī)沒(méi)有乘法/除法指令,乘除操作會(huì)被編譯器轉(zhuǎn)換成移位和加法來(lái)實(shí)現(xiàn)。如果乘除的數(shù)值剛好是 2 的冪,那么可以用移位直接替代乘除法,運(yùn)算速度會(huì)提高很多。,例如將 P1.0 置高、將 P1.1 置低,將 P1.2 取反,我們可以寫(xiě)成: P1OUT |= 0x01; /P2.0 置高 P1OUT /P1.1/2/3/4 全置高,char Key; if(P1IN /讀取 P1.5 狀態(tài)賦給變量 Key。,函數(shù)是C語(yǔ)言中的一種基本模塊。在進(jìn)行程序設(shè)計(jì)的過(guò)程中,如果所設(shè)計(jì)的程序較大,一般應(yīng)將其分成若干個(gè)子程序模塊,每個(gè)子程序模塊完成一種特定的功能。在C語(yǔ)言中,子程序是用函數(shù)來(lái)實(shí)現(xiàn)的。對(duì)于一些需要經(jīng)常使用的子程序可以按函數(shù)來(lái)設(shè)計(jì),以供反復(fù)調(diào)用。此外,EW430編譯器還提供了豐富的運(yùn)行庫(kù)函數(shù),用戶可以根據(jù)需要隨時(shí)調(diào)用。這種模塊化的程序設(shè)計(jì)方法,可以大大提高編程效率。 從用戶的角度來(lái)看,有兩種函數(shù):標(biāo)準(zhǔn)庫(kù)函數(shù)和用戶自定義函數(shù)。標(biāo)準(zhǔn)庫(kù)函數(shù)是IAR EW430編譯器提供的,不需要用戶進(jìn)行定義,可以直接調(diào)用。用戶自定義函數(shù)是用戶根據(jù)自己的需要編寫(xiě)的能實(shí)現(xiàn)特定功能的函數(shù),它必須先進(jìn)行定義之后才能調(diào)用。,指針是C語(yǔ)言中一個(gè)十分重要的概念,也是C語(yǔ)言的一個(gè)難點(diǎn),曾經(jīng)有許多人這樣講過(guò),要精通指針的程序員才算正真懂得C語(yǔ)言。只要掌握指針,才能使程序變得更加簡(jiǎn)潔、緊湊、高效,在C語(yǔ)言當(dāng)中指針可以談得上是全部精華的所在。初學(xué)者在開(kāi)始學(xué)習(xí)時(shí)可能會(huì)有一點(diǎn)不習(xí)慣但是不要灰心,只要我們?cè)谄綍r(shí)多思考、多上機(jī),那么很快就可以掌握它了。 所謂指針就是指內(nèi)存中的地址,它可能是變量的地址,也可能是函數(shù)的入口地址。如果指針變量存儲(chǔ)的地址是變量的地址,則稱為變量的指針,簡(jiǎn)稱變量指針;如果指針變量存儲(chǔ)的地址是函數(shù)的入口地址,則稱為函數(shù)的指針,簡(jiǎn)稱函數(shù)指針。 變量的指針就是該變量的地址,可以定義一個(gè)指向某個(gè)變量的指針變量。為了表示指針變量和它所指向的變量地址之間的關(guān)系,C語(yǔ)言提供了兩個(gè)專門(mén)的運(yùn)算符: * 取內(nèi)容, 取地址。,C語(yǔ)言程序的開(kāi)始部分通常是預(yù)處理命令,如程序中通常遇到的include命令。這個(gè)預(yù)處理命令通知編譯器在對(duì)程序進(jìn)行編譯時(shí),將所需要的頭文件讀入后再一起進(jìn)行編譯。一般在“頭文件”中包含有程序在編譯時(shí)的一

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論