MSP430的C語言程序設計_第1頁
MSP430的C語言程序設計_第2頁
MSP430的C語言程序設計_第3頁
MSP430的C語言程序設計_第4頁
MSP430的C語言程序設計_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

C語言預處理命令總結

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論