版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
MSP430的C語言的程序設(shè)計電研151魏文震學(xué)號:2201500036目錄概述1編程基礎(chǔ)2c語言編程實(shí)例4編程技巧3概述在結(jié)構(gòu)上MSP430系列單片機(jī)集成了一部計算機(jī)的各個基本組成成分,雖然其工作原理與普通微機(jī)并無差異,但MSP430系列單片機(jī)在結(jié)構(gòu)上更加突出了體積小、功能強(qiáng)、面向控制的特點(diǎn),具有很高的性能價格比。MSP430系列單片機(jī)由CPU、存儲器和外圍模塊組成,這些部件通過內(nèi)部地址總線、數(shù)據(jù)總線和控制總線相連構(gòu)成單片機(jī)微機(jī)系統(tǒng)。MSP430的內(nèi)核CPU結(jié)構(gòu)是按照精簡指令的宗旨來設(shè)計的。具有豐富的寄存器資源、強(qiáng)大的處理控制能力和靈活的操作方式。MSP430的存儲器結(jié)構(gòu)采用了統(tǒng)一的編址方式,可以使得對外圍模塊寄存器的操作跟普通的RAM單元一樣方便、靈活。MSP430存儲器的信息類型豐富,并具有很強(qiáng)的系統(tǒng)外圍模塊擴(kuò)展能力。C語言的編程基礎(chǔ)C語言的數(shù)據(jù)類型常使用8位、16位、32位、64位,同時分有無符號之分例如:特殊功能寄存器變量sfrb、sfrw,它直接定義在片內(nèi),要大寫。無符號整數(shù):char、unsignedint、unsignedlong有符號整數(shù):int、long浮點(diǎn)型:floatC430的配置由于430各芯片的差異,430要進(jìn)行特性配置。你也可以根據(jù)需要去修改這些配置文件。C語言的編程基礎(chǔ)C語言的優(yōu)點(diǎn):1、對cpu的寄存器、尋址方式、指令系統(tǒng)不要求了解,對存儲器和I/O組織有簡單了解即可。2、寄存器和存儲器的分配、尋址及數(shù)據(jù)類型等細(xì)節(jié)由C編輯器自動管理。3、程序由函數(shù)構(gòu)成,程序結(jié)構(gòu)化。4、可調(diào)用系統(tǒng)提供的許多標(biāo)準(zhǔn)子程序。5、編輯及調(diào)節(jié)時間縮短,效率提高。6、移植性比較好。C語言的編程基礎(chǔ)c語言的算術(shù)運(yùn)算符C語言的編程基礎(chǔ)C語言的邏輯運(yùn)算符C語言的編程基礎(chǔ)C語言上機(jī)過程1、創(chuàng)建一個c語言項(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ù)處理命令總結(jié)
C程序的源代碼中可包括各種編譯指令,這些指令稱為預(yù)處理命令。雖然它們實(shí)際上不是C語言的一部分,但卻擴(kuò)展了C程序設(shè)計的環(huán)境。本節(jié)將介紹如何應(yīng)用預(yù)處理程序和注釋簡化程序開發(fā)過程,并提高程序的可讀性。ANSI標(biāo)準(zhǔn)定義的C語言預(yù)處理程序包括下列命令:
#define,#error,#include,#if,#else,#elif,
#endif,#ifdef,#ifndef,#undef,#line,#pragma等。非常明顯,所有預(yù)處理命令均以符號#開頭,下面分別加以介紹。#define命令#define定義了一個標(biāo)識符及一個串。在源程序中每次遇到該標(biāo)識符時,均以定義的串代換它。ANSI標(biāo)準(zhǔn)將標(biāo)識符定義為宏名,將替換過程稱為宏替換。命令的一般形式為:#defineidentifierstring注意:1該語句沒有分號。在標(biāo)識符和串之間可以有任意個空格,串一旦開始,僅由一新行結(jié)束。2宏名定義后,即可成為其它宏名定義中的一部分。3宏替換僅僅是以文本串代替宏標(biāo)識符,前提是宏標(biāo)識符必須獨(dú)立的識別出來,否則不進(jìn)行替換。例如:#defineXYZthisisates
使用宏printf("XYZ");//該段不打印"thisisatest"而打印"XYZ"。因?yàn)轭A(yù)編譯器識別出的是"XYZ"4如果串長于一行,可以在該行末尾用一反斜杠'\'續(xù)行。#defineLONG_STRING"thisisaverylong\stringthatisusedasanexample"5C語言程序普遍使用大寫字母定義標(biāo)識符。6用宏代換代替實(shí)在的函數(shù)的一大好處是宏替換增加了代碼的速度,因?yàn)椴淮嬖诤瘮?shù)調(diào)用的開銷。但增加速度也有代價:由于重復(fù)編碼而增加了程序長度。#error命令#error強(qiáng)迫編譯程序停止編譯,主要用于程序調(diào)試。#error指令使預(yù)處理器發(fā)出一條錯誤消息,該消息包含指令中的文本.這條指令的目的就是在程序崩潰之前能夠給出一定的信息。
#include命令#include使編譯程序?qū)⒘硪辉次募度霂в校nclude的源文件,被讀入的源文件必須用雙引號或尖括號括起來。例如:#include"stdio.h"或者#include<stdio.h>這兩行代碼均使用C編譯程序讀入并編譯用于處理磁盤文件庫的子程序。將文件嵌入#include命令中的文件內(nèi)是可行的,這種方式稱為嵌套的嵌入文件,嵌套層次依賴于具體實(shí)現(xiàn)。如果顯式路徑名為文件標(biāo)識符的一部分,則僅在那些子目錄中搜索被嵌入文件。否則,如果文件名用雙引號括起來,則首先檢索當(dāng)前工作目錄。如果未發(fā)現(xiàn)文件,則在命令行中說明的所有目錄中搜索。如果仍未發(fā)現(xiàn)文件,則搜索實(shí)現(xiàn)時定義的標(biāo)準(zhǔn)目錄。如果沒有顯式路徑名且文件名被尖括號括起來,則首先在編譯命令行中的目錄內(nèi)檢索。如果文件沒找到,則檢索標(biāo)準(zhǔn)目錄,不檢索當(dāng)前工作目錄。條件編譯命令有幾個命令可對程序源代碼的各部分有選擇地進(jìn)行編譯,該過程稱為條件編譯。商業(yè)軟件公司廣泛應(yīng)用條件編譯來提供和維護(hù)某一程序的許多顧客版本。#if、#else,#elif及#endif#if的一般含義是如果#if后面的常量表達(dá)式為true,則編譯它與#endif之間的代碼,否則跳過這些代碼。命令#endif標(biāo)識一個#if塊的結(jié)束。#ifconstant-expressionstatementsequence#endifEg:#defineMAX91#include<iostream>usingnamespacestd;intmain(){#ifMAX>99cout<<"MAXisbiggerthan99"<<endl;#elifMAX>90cout<<"MAXisbiggerthan90"<<endl;#elsecout<<"MAXissmallerthan90"<<endl;#endifreturn0;}跟在#if后面的表達(dá)式在編譯時求值,因此它必須僅含常量及已定義過的標(biāo)識符,不可使用變量。表達(dá)式不許含有操作符sizeof(sizeof也是編譯時求值)。#else命令的功能有點(diǎn)象C語言中的else;#else建立另一選擇(在#if失敗的情況下)。注意,#else屬于#if塊。#elif命令意義與ELSEIF相同,它形成一個ifelse-if階梯狀語句,可進(jìn)行多種編譯選擇。#elif后跟一個常量表達(dá)式。如果表達(dá)式為true,則編譯其后的代碼塊,不對其它#elif表達(dá)式進(jìn)行測試。否則,順序測試下一塊。#pragma命令#pragma為實(shí)現(xiàn)時定義的命令,它允許向編譯程序傳送各種指令。#pragma的作用是設(shè)定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動作。#pragma指令對每個編譯器給出了一個方法,在保持與C和C++語言完全兼容的情況下,給出主機(jī)或操作系統(tǒng)專有的特征。依據(jù)定義,編譯指示是機(jī)器或操作系統(tǒng)專有的,且對于每個編譯器都是不同的。其格式一般為:#PragmaPara1message參數(shù)。Message參數(shù)能夠在編譯信息輸出窗口中輸出相應(yīng)的信息,這對于源代碼信息的控制是非常重要的。2code_seg參數(shù)。格式如:#pragmacode_seg(["section-name"[,"section-class"]])它能夠設(shè)置程序中函數(shù)代碼存放的代碼段,當(dāng)我們開發(fā)驅(qū)動程序的時候就會使用到它。3#pragmaonce(比較常用)只要在頭文件的最開始加入這條指令就能夠保證頭文件被編譯一次。這條指令實(shí)際上在VC6中就已經(jīng)有了,但是考慮到兼容性并沒有太多的使用它。4#pragmahdrstop表示預(yù)編譯頭文件到此為止,后面的頭文件不進(jìn)行預(yù)編譯。BCB可以預(yù)編譯頭文件以加快鏈接的速度,但如果所有頭文件都進(jìn)行預(yù)編譯又可能占太多磁盤空間,所以使用這個選項(xiàng)排除一些頭文件。5#pragmaresource"*.dfm"表示把*.dfm文件中的資源加入工程。*.dfm中包括窗體外觀的定義。6pragmacomment(...)該指令將一個注釋記錄放入一個對象文件或可執(zhí)行文件中。常用的lib關(guān)鍵字,可以幫我們連入一個庫文件。編程技巧在ccs中的c語言程序結(jié)構(gòu)和一般的c程序基本相同//包含頭文件#include<io430.h>//帶初始化全局變量定義(在RAM區(qū))unsignedcharSTD[45]={"Hi,thisisMSP430."}//未初始化全局變量定義(在RAM區(qū))inta,b,c//函數(shù)聲明voidmain(void)編程技巧{數(shù)據(jù)說明部分;//局部變量定義執(zhí)行語句部分;subN(實(shí)際參數(shù));//子程序調(diào)用......}voidsubN(形式參數(shù)){數(shù)據(jù)說明部分;//局部變量定義執(zhí)行語句部分;......}編程技巧程序格式程序由函數(shù)構(gòu)成,函數(shù)由語句構(gòu)成;語句以分號作為結(jié)束符;程序由主函數(shù)main()標(biāo)識程序入口,用戶程序從函數(shù)main()的第一條語句開始執(zhí)行,程序執(zhí)行完畢的標(biāo)志是main()函數(shù)中的代碼執(zhí)行完畢;標(biāo)識符區(qū)分大小寫,不能在變量名、函數(shù)名、關(guān)鍵字中插入空格和空行;關(guān)鍵字及編譯預(yù)處理命令用小寫字母書寫;程序用多大括號{}表示程序的層次范圍;程序沒有行的概念,可任意書寫,但為了可讀性,書寫一對大括號時根據(jù)層次采用縮格和列向?qū)R方式;注釋部分用/*......*/表示或用“//”表示其后的內(nèi)容為注釋;編程技巧主程序含兩部分初始化部分和執(zhí)行部分,其中執(zhí)行部分一般為一個無限循環(huán)#include"io430.h"intmain(void){unsignedinti;//定義函數(shù)變量WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗P2DIR=0xFF;//設(shè)置端口2為輸出P2OUT=0;//端口2為輸出初始值for(;;)//無限循環(huán){P2OUT=~P20UT;//將端口2的值取反后輸出for(i=0;i<0xffff;i++);//延時}}編程技巧子函數(shù)的聲明、定義和調(diào)用#includ"io430.h"voiddelay();intmain(void){WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗P2DIR=0xFF;//設(shè)置端口2為輸出P2OUT=0;//端口2為輸出初始值while(1)//無限循環(huán){P2OUT=~P2OUT;//將端口2的值取反后輸出delay();//延時}}voiddelay(){unsignedinti;//定義函數(shù)變量for(i=0;i<0xffff;i++);//延時}C語言編程實(shí)例例一連接如右圖,編程控制發(fā)光二極管從L0到L7再到L0...一盞一盞點(diǎn)亮,每次只有一盞亮,如此不斷反復(fù)。MSP430C語言編程實(shí)例#include"io430.h"intmain(void){unsignedcharLED_0=0x01,LED_temp;unsignedinti,j;WDTCTL=WDTPW+WDTHOLD;//關(guān)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《計算機(jī)病毒與木馬》課件
- 睪丸觸痛的臨床護(hù)理
- 丹毒絲菌病的臨床護(hù)理
- 堵奶的健康宣教
- 維生素營養(yǎng)障礙的健康宣教
- JJF(陜) 113-2024 低頻電磁場測量儀校準(zhǔn)規(guī)范
- 函數(shù)復(fù)習(xí)課課件
- 新課程標(biāo)準(zhǔn)學(xué)習(xí)與落實(shí)計劃
- 數(shù)字在線服務(wù)相關(guān)項(xiàng)目投資計劃書范本
- 新型膜材料及其裝置行業(yè)相關(guān)投資計劃提議
- 新教材人教A版高中數(shù)學(xué)必修第一冊第四章測試題及答案
- GB/T 18266.3-2017體育場所等級的劃分第3部分:游泳場館星級劃分及評定
- 六年級上冊數(shù)學(xué)同步練習(xí)-1. 分?jǐn)?shù)與整數(shù)相乘《分?jǐn)?shù)乘整數(shù)的實(shí)際問題》蘇教版(含答案)1
- GB 5009.226-2016食品安全國家標(biāo)準(zhǔn)食品中過氧化氫殘留量的測定
- 反有組織犯罪法學(xué)習(xí)PPT
- 懸梁刺股-圖文
- 公司組織結(jié)構(gòu)圖Word模板
- CYYF城鎮(zhèn)污水廠全過程除臭工藝課件
- 課件:第三章 社會工作項(xiàng)目的策劃(《社會工作項(xiàng)目策劃與評估》課程)
- 國產(chǎn)保健食品靈芝孢子粉膠囊工藝(GMP使用)
- 新歷史小說1課件
評論
0/150
提交評論