MSP430的C語(yǔ)言程序設(shè)計(jì)_第1頁(yè)
MSP430的C語(yǔ)言程序設(shè)計(jì)_第2頁(yè)
MSP430的C語(yǔ)言程序設(shè)計(jì)_第3頁(yè)
MSP430的C語(yǔ)言程序設(shè)計(jì)_第4頁(yè)
MSP430的C語(yǔ)言程序設(shè)計(jì)_第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)介

MSP430的C語(yǔ)言的程序設(shè)計(jì)電研151魏文震學(xué)號(hào):2201500036目錄概述1編程基礎(chǔ)2c語(yǔ)言編程實(shí)例4編程技巧3概述在結(jié)構(gòu)上MSP430系列單片機(jī)集成了一部計(jì)算機(jī)的各個(gè)基本組成成分,雖然其工作原理與普通微機(jī)并無(wú)差異,但MSP430系列單片機(jī)在結(jié)構(gòu)上更加突出了體積小、功能強(qiáng)、面向控制的特點(diǎn),具有很高的性能價(jià)格比。MSP430系列單片機(jī)由CPU、存儲(chǔ)器和外圍模塊組成,這些部件通過(guò)內(nèi)部地址總線、數(shù)據(jù)總線和控制總線相連構(gòu)成單片機(jī)微機(jī)系統(tǒng)。MSP430的內(nèi)核CPU結(jié)構(gòu)是按照精簡(jiǎn)指令的宗旨來(lái)設(shè)計(jì)的。具有豐富的寄存器資源、強(qiáng)大的處理控制能力和靈活的操作方式。MSP430的存儲(chǔ)器結(jié)構(gòu)采用了統(tǒng)一的編址方式,可以使得對(duì)外圍模塊寄存器的操作跟普通的RAM單元一樣方便、靈活。MSP430存儲(chǔ)器的信息類型豐富,并具有很強(qiáng)的系統(tǒng)外圍模塊擴(kuò)展能力。C語(yǔ)言的編程基礎(chǔ)C語(yǔ)言的數(shù)據(jù)類型常使用8位、16位、32位、64位,同時(shí)分有無(wú)符號(hào)之分例如:特殊功能寄存器變量sfrb、sfrw,它直接定義在片內(nèi),要大寫。無(wú)符號(hào)整數(shù):char、unsignedint、unsignedlong有符號(hào)整數(shù):int、long浮點(diǎn)型:floatC430的配置由于430各芯片的差異,430要進(jìn)行特性配置。你也可以根據(jù)需要去修改這些配置文件。C語(yǔ)言的編程基礎(chǔ)C語(yǔ)言的優(yōu)點(diǎn):1、對(duì)cpu的寄存器、尋址方式、指令系統(tǒng)不要求了解,對(duì)存儲(chǔ)器和I/O組織有簡(jiǎn)單了解即可。2、寄存器和存儲(chǔ)器的分配、尋址及數(shù)據(jù)類型等細(xì)節(jié)由C編輯器自動(dòng)管理。3、程序由函數(shù)構(gòu)成,程序結(jié)構(gòu)化。4、可調(diào)用系統(tǒng)提供的許多標(biāo)準(zhǔn)子程序。5、編輯及調(diào)節(jié)時(shí)間縮短,效率提高。6、移植性比較好。C語(yǔ)言的編程基礎(chǔ)c語(yǔ)言的算術(shù)運(yùn)算符C語(yǔ)言的編程基礎(chǔ)C語(yǔ)言的邏輯運(yùn)算符C語(yǔ)言的編程基礎(chǔ)C語(yǔ)言上機(jī)過(guò)程1、創(chuàng)建一個(gè)c語(yǔ)言項(xiàng)目(creatanewproject/c/main)2、設(shè)置項(xiàng)目屬性(option)(MCU類型、debugger類型等)3、編寫源程序并添加到項(xiàng)目中4、編譯和連接(compile、make或rebuildall)5、下載程序到目標(biāo)MCU(debug)6、調(diào)試和運(yùn)行(go、stepover、view/register、memory)編程技巧c程序模板#include"io430.h"intmain(void){WDTCTL=WCTTCL+WDTHOLD;//Stopwatchdog......//用戶程序return0;}

C語(yǔ)言預(yù)處理命令總結(jié)

C程序的源代碼中可包括各種編譯指令,這些指令稱為預(yù)處理命令。雖然它們實(shí)際上不是C語(yǔ)言的一部分,但卻擴(kuò)展了C程序設(shè)計(jì)的環(huán)境。本節(jié)將介紹如何應(yīng)用預(yù)處理程序和注釋簡(jiǎn)化程序開(kāi)發(fā)過(guò)程,并提高程序的可讀性。ANSI標(biāo)準(zhǔn)定義的C語(yǔ)言預(yù)處理程序包括下列命令:

#define,#error,#include,#if,#else,#elif,

#endif,#ifdef,#ifndef,#undef,#line,#pragma等。非常明顯,所有預(yù)處理命令均以符號(hào)#開(kāi)頭,下面分別加以介紹。#define命令#define定義了一個(gè)標(biāo)識(shí)符及一個(gè)串。在源程序中每次遇到該標(biāo)識(shí)符時(shí),均以定義的串代換它。ANSI標(biāo)準(zhǔn)將標(biāo)識(shí)符定義為宏名,將替換過(guò)程稱為宏替換。命令的一般形式為:#defineidentifierstring注意:1該語(yǔ)句沒(méi)有分號(hào)。在標(biāo)識(shí)符和串之間可以有任意個(gè)空格,串一旦開(kāi)始,僅由一新行結(jié)束。2宏名定義后,即可成為其它宏名定義中的一部分。3宏替換僅僅是以文本串代替宏標(biāo)識(shí)符,前提是宏標(biāo)識(shí)符必須獨(dú)立的識(shí)別出來(lái),否則不進(jìn)行替換。例如:#defineXYZthisisates

使用宏printf("XYZ");//該段不打印"thisisatest"而打印"XYZ"。因?yàn)轭A(yù)編譯器識(shí)別出的是"XYZ"4如果串長(zhǎng)于一行,可以在該行末尾用一反斜杠'\'續(xù)行。#defineLONG_STRING"thisisaverylong\stringthatisusedasanexample"5C語(yǔ)言程序普遍使用大寫字母定義標(biāo)識(shí)符。6用宏代換代替實(shí)在的函數(shù)的一大好處是宏替換增加了代碼的速度,因?yàn)椴淮嬖诤瘮?shù)調(diào)用的開(kāi)銷。但增加速度也有代價(jià):由于重復(fù)編碼而增加了程序長(zhǎng)度。#error命令#error強(qiáng)迫編譯程序停止編譯,主要用于程序調(diào)試。#error指令使預(yù)處理器發(fā)出一條錯(cuò)誤消息,該消息包含指令中的文本.這條指令的目的就是在程序崩潰之前能夠給出一定的信息。

#include命令#include使編譯程序?qū)⒘硪辉次募度霂в校nclude的源文件,被讀入的源文件必須用雙引號(hào)或尖括號(hào)括起來(lái)。例如:#include"stdio.h"或者#include<stdio.h>這兩行代碼均使用C編譯程序讀入并編譯用于處理磁盤文件庫(kù)的子程序。將文件嵌入#include命令中的文件內(nèi)是可行的,這種方式稱為嵌套的嵌入文件,嵌套層次依賴于具體實(shí)現(xiàn)。如果顯式路徑名為文件標(biāo)識(shí)符的一部分,則僅在那些子目錄中搜索被嵌入文件。否則,如果文件名用雙引號(hào)括起來(lái),則首先檢索當(dāng)前工作目錄。如果未發(fā)現(xiàn)文件,則在命令行中說(shuō)明的所有目錄中搜索。如果仍未發(fā)現(xiàn)文件,則搜索實(shí)現(xiàn)時(shí)定義的標(biāo)準(zhǔn)目錄。如果沒(méi)有顯式路徑名且文件名被尖括號(hào)括起來(lái),則首先在編譯命令行中的目錄內(nèi)檢索。如果文件沒(méi)找到,則檢索標(biāo)準(zhǔn)目錄,不檢索當(dāng)前工作目錄。條件編譯命令有幾個(gè)命令可對(duì)程序源代碼的各部分有選擇地進(jìn)行編譯,該過(guò)程稱為條件編譯。商業(yè)軟件公司廣泛應(yīng)用條件編譯來(lái)提供和維護(hù)某一程序的許多顧客版本。#if、#else,#elif及#endif#if的一般含義是如果#if后面的常量表達(dá)式為true,則編譯它與#endif之間的代碼,否則跳過(guò)這些代碼。命令#endif標(biāo)識(shí)一個(gè)#if塊的結(jié)束。#ifconstant-expressionstatementsequence#endifEg:#defineMAX91#include<iostream>usingnamespacestd;intmain(){#ifMAX>99cout<<"MAXisbiggerthan99"<<endl;#elifMAX>90cout<<"MAXisbiggerthan90"<<endl;#elsecout<<"MAXissmallerthan90"<<endl;#endifreturn0;}跟在#if后面的表達(dá)式在編譯時(shí)求值,因此它必須僅含常量及已定義過(guò)的標(biāo)識(shí)符,不可使用變量。表達(dá)式不許含有操作符sizeof(sizeof也是編譯時(shí)求值)。#else命令的功能有點(diǎn)象C語(yǔ)言中的else;#else建立另一選擇(在#if失敗的情況下)。注意,#else屬于#if塊。#elif命令意義與ELSEIF相同,它形成一個(gè)ifelse-if階梯狀語(yǔ)句,可進(jìn)行多種編譯選擇。#elif后跟一個(gè)常量表達(dá)式。如果表達(dá)式為true,則編譯其后的代碼塊,不對(duì)其它#elif表達(dá)式進(jìn)行測(cè)試。否則,順序測(cè)試下一塊。#pragma命令#pragma為實(shí)現(xiàn)時(shí)定義的命令,它允許向編譯程序傳送各種指令。#pragma的作用是設(shè)定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動(dòng)作。#pragma指令對(duì)每個(gè)編譯器給出了一個(gè)方法,在保持與C和C++語(yǔ)言完全兼容的情況下,給出主機(jī)或操作系統(tǒng)專有的特征。依據(jù)定義,編譯指示是機(jī)器或操作系統(tǒng)專有的,且對(duì)于每個(gè)編譯器都是不同的。其格式一般為:#PragmaPara1message參數(shù)。Message參數(shù)能夠在編譯信息輸出窗口中輸出相應(yīng)的信息,這對(duì)于源代碼信息的控制是非常重要的。2code_seg參數(shù)。格式如:#pragmacode_seg(["section-name"[,"section-class"]])它能夠設(shè)置程序中函數(shù)代碼存放的代碼段,當(dāng)我們開(kāi)發(fā)驅(qū)動(dòng)程序的時(shí)候就會(huì)使用到它。3#pragmaonce(比較常用)只要在頭文件的最開(kāi)始加入這條指令就能夠保證頭文件被編譯一次。這條指令實(shí)際上在VC6中就已經(jīng)有了,但是考慮到兼容性并沒(méi)有太多的使用它。4#pragmahdrstop表示預(yù)編譯頭文件到此為止,后面的頭文件不進(jìn)行預(yù)編譯。BCB可以預(yù)編譯頭文件以加快鏈接的速度,但如果所有頭文件都進(jìn)行預(yù)編譯又可能占太多磁盤空間,所以使用這個(gè)選項(xiàng)排除一些頭文件。5#pragmaresource"*.dfm"表示把*.dfm文件中的資源加入工程。*.dfm中包括窗體外觀的定義。6pragmacomment(...)該指令將一個(gè)注釋記錄放入一個(gè)對(duì)象文件或可執(zhí)行文件中。常用的lib關(guān)鍵字,可以幫我們連入一個(gè)庫(kù)文件。編程技巧在ccs中的c語(yǔ)言程序結(jié)構(gòu)和一般的c程序基本相同//包含頭文件#include<io430.h>//帶初始化全局變量定義(在RAM區(qū))unsignedcharSTD[45]={"Hi,thisisMSP430."}//未初始化全局變量定義(在RAM區(qū))inta,b,c//函數(shù)聲明voidmain(void)編程技巧{數(shù)據(jù)說(shuō)明部分;//局部變量定義執(zhí)行語(yǔ)句部分;subN(實(shí)際參數(shù));//子程序調(diào)用......}voidsubN(形式參數(shù)){數(shù)據(jù)說(shuō)明部分;//局部變量定義執(zhí)行語(yǔ)句部分;......}編程技巧程序格式程序由函數(shù)構(gòu)成,函數(shù)由語(yǔ)句構(gòu)成;語(yǔ)句以分號(hào)作為結(jié)束符;程序由主函數(shù)main()標(biāo)識(shí)程序入口,用戶程序從函數(shù)main()的第一條語(yǔ)句開(kāi)始執(zhí)行,程序執(zhí)行完畢的標(biāo)志是main()函數(shù)中的代碼執(zhí)行完畢;標(biāo)識(shí)符區(qū)分大小寫,不能在變量名、函數(shù)名、關(guān)鍵字中插入空格和空行;關(guān)鍵字及編譯預(yù)處理命令用小寫字母書(shū)寫;程序用多大括號(hào){}表示程序的層次范圍;程序沒(méi)有行的概念,可任意書(shū)寫,但為了可讀性,書(shū)寫一對(duì)大括號(hào)時(shí)根據(jù)層次采用縮格和列向?qū)R方式;注釋部分用/*......*/表示或用“//”表示其后的內(nèi)容為注釋;編程技巧主程序含兩部分初始化部分和執(zhí)行部分,其中執(zhí)行部分一般為一個(gè)無(wú)限循環(huán)#include"io430.h"intmain(void){unsignedinti;//定義函數(shù)變量WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗P2DIR=0xFF;//設(shè)置端口2為輸出P2OUT=0;//端口2為輸出初始值for(;;)//無(wú)限循環(huán){P2OUT=~P20UT;//將端口2的值取反后輸出for(i=0;i<0xffff;i++);//延時(shí)}}編程技巧子函數(shù)的聲明、定義和調(diào)用#includ"io430.h"voiddelay();intmain(void){WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗P2DIR=0xFF;//設(shè)置端口2為輸出P2OUT=0;//端口2為輸出初始值while(1)//無(wú)限循環(huán){P2OUT=~P2OUT;//將端口2的值取反后輸出delay();//延時(shí)}}voiddelay(){unsignedinti;//定義函數(shù)變量for(i=0;i<0xffff;i++);//延時(shí)}C語(yǔ)言編程實(shí)例例一連接如右圖,編程控制發(fā)光二極管從L0到L7再到L0...一盞一盞點(diǎn)亮,每次只有一盞亮,如此不斷反復(fù)。MSP430C語(yǔ)言編程實(shí)例#include"io430.h"intmain(void){unsignedcharLED_0=0x01,LED_temp;unsignedinti,j;WDTCTL=WDTPW+WDTHOLD;//關(guān)

溫馨提示

  • 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)論