關(guān)于我們
書單推薦
新書推薦
|
MSP430單片機(jī)原理與應(yīng)用
本書以MSP430F261x單片機(jī)為例, 全面而詳實(shí)地介紹了MSP430單片機(jī)結(jié)構(gòu)組成、工作原理以及常用模塊的使用方法。內(nèi)容組織上不貪大求全, 而是盡量做到把最常用、最能反映單片機(jī)精髓的知識(shí)講細(xì)、講精、講透, 以達(dá)到讓讀者觸類旁通的目的。
考慮到初學(xué)者的特點(diǎn),實(shí)例先易后難,先單個(gè)功能、單個(gè)模塊地學(xué)習(xí),逐步轉(zhuǎn)換成對(duì)整個(gè)系統(tǒng)的分析和設(shè)計(jì)。
秉承“理論學(xué)習(xí)是認(rèn)識(shí)單片機(jī)的起點(diǎn),設(shè)計(jì)單片機(jī)系統(tǒng)是*終落腳點(diǎn)”的理念,把*常用、*能反映單片機(jī)精髓的知識(shí)講細(xì)、講精、講透,以達(dá)到讓讀者觸類旁通的目的;通過實(shí)例并配合配合豐富有趣的習(xí)題練習(xí)使學(xué)生對(duì)單片機(jī)的理解硬件化或產(chǎn)品化。
前言
MSP430單片機(jī)是美國德州儀器(TexasInstruments,TI)于1996年開始推向市場(chǎng)的一種16位超低功耗單片機(jī),它具有極低功耗、高性能、豐富的片上外設(shè)和通信接口等特點(diǎn)。由于將多個(gè)不同功能的模擬電路、數(shù)字電路模塊和微處理器集成在一個(gè)芯片上,所以又稱之為混合信號(hào)處理器。
MSP430單片機(jī)不但具有傳統(tǒng)單片機(jī)的特征,還具有一些片上系統(tǒng)的特點(diǎn)。因此,國內(nèi)外很多高等院校已將MSP430系列單片機(jī)作為單片機(jī)相關(guān)課程的講授對(duì)象。
利用該單片機(jī)進(jìn)行嵌入式系統(tǒng)教學(xué)具有以下特點(diǎn)。
1.結(jié)構(gòu)簡(jiǎn)單、資源豐富、使用方便
MSP430單片機(jī)使用的是16位RISCCPU,存儲(chǔ)結(jié)構(gòu)上采用馮·諾依曼結(jié)構(gòu)。各個(gè)片上外設(shè)均掛接在內(nèi)部總線上,但外設(shè)與外設(shè)之間、外設(shè)與CPU之間都是獨(dú)立工作的,外設(shè)與CPU通過中斷機(jī)制聯(lián)系在一起。MSP430單片機(jī)內(nèi)嵌有JTAG邏輯部件,便于下載和在線仿真。
MSP430單片機(jī)組織結(jié)構(gòu)簡(jiǎn)潔、便于理解,其核心部件主要包括時(shí)鐘系統(tǒng)、RISCCPU、Flash、RAM和相關(guān)I/O端口,其他片上外設(shè)都是對(duì)該類單片機(jī)自身的擴(kuò)展和增強(qiáng)。
MSP430系列單片機(jī)種類豐富多樣。目前,MSP430單片機(jī)涵蓋F1xx、F2xx、G2xx、F4xx、F5xx、F6xx共6大系列,還有集成有無線收發(fā)功能的CC430系列等合計(jì)約有600種,能夠滿足大多數(shù)工程應(yīng)用場(chǎng)合的需求。
2.有利于減少外圍電路設(shè)計(jì)
MSP430單片機(jī)中集成大量的片上外圍設(shè)備,例如看門狗、模擬比較器、定時(shí)器、串行通信接口、硬件乘法器、液晶驅(qū)動(dòng)器、10位/12位ADC、16位ΣΔADC、DMA、I/O端口、基本定時(shí)器、實(shí)時(shí)時(shí)鐘和USB控制器等。充分利用這些片上外設(shè),可以減少嵌入式系統(tǒng)外圍電路設(shè)計(jì)、簡(jiǎn)化設(shè)計(jì)流程、節(jié)約成本、提高系統(tǒng)可靠性、縮小PCB和產(chǎn)品體積。
3.有利于開展更高層次的學(xué)習(xí)
MSP430單片機(jī)的內(nèi)核是16位RISCCPU。在整個(gè)單片機(jī)系列中,屬于中端單片機(jī)。在高端32位單片機(jī)中,一般是采用RISC核,如CortexM系列單片機(jī)。在掌握了MSP430單片機(jī)原理及其開發(fā)技術(shù)后,再學(xué)習(xí)32位的高端單片機(jī)難度將大為降低。當(dāng)然,在熟悉MSP430單片機(jī)的基礎(chǔ)上學(xué)習(xí)其他類型的單片機(jī)(如51單片機(jī))會(huì)更加容易。
4.MSP430單片機(jī)的市場(chǎng)逐漸擴(kuò)大
在美國德州儀器公司多年來不懈的努力下,MSP430單片機(jī)的市場(chǎng)份額在不斷增加,在16位單片機(jī)市場(chǎng)中獨(dú)占鰲頭。即便是在8位單片機(jī)市場(chǎng)中,也已對(duì)傳統(tǒng)的51單片機(jī)形成了強(qiáng)烈沖擊。
5.符合目前及未來節(jié)能降耗的要求
隨著世界能源危機(jī)日趨嚴(yán)重,迫切需要節(jié)能環(huán)保的產(chǎn)品。MSP430單片機(jī)與其他單片機(jī)相比在低功耗方面有著不可比擬的優(yōu)勢(shì),推廣使用MSP430單片機(jī)符合“節(jié)能降耗”的時(shí)代主題。
盡管MSP430單片機(jī)具有眾多的技術(shù)優(yōu)勢(shì),也是目前嵌入式系統(tǒng)應(yīng)用開發(fā)所必需的,但是目前能夠用于MSP430單片機(jī)教學(xué)的圖書較少。盡管這些圖書在編寫上各有所長(zhǎng),但就課堂教學(xué)來說,仍存在一些不足:①有些圖書內(nèi)容大多直接翻譯TI提供的用戶指南和數(shù)據(jù)手冊(cè),并未做進(jìn)一步加工或整合;②有些圖書完全工程化的講解方式對(duì)工程師或具有一定單片機(jī)基礎(chǔ)的人有參考價(jià)值,不適合初學(xué)者。因?yàn)檫@些圖書直接講述單片機(jī)的工程應(yīng)用,對(duì)工作原理講解較少,讀者從這些書中獲取的信息,只是知其然,而不知其所以然,難以激發(fā)創(chuàng)新思維。
為此,我們?cè)诰帉戇^程中盡量彌補(bǔ)這些不足,同時(shí)融合了我們多年在嵌入式系統(tǒng)方面的科研積累與教學(xué)改革經(jīng)驗(yàn),使得本書具有以下鮮明特色。
(1)在內(nèi)容組織上打破了傳統(tǒng)的參考書式的講解方式,對(duì)各個(gè)知識(shí)點(diǎn)的內(nèi)容重新劃分整合。然后再按照由淺入深、循序漸進(jìn)的思路進(jìn)行重新組織,使之容易被學(xué)生接受。
(2)在實(shí)例選擇上盡量做到先易后難、先部分后整體,考慮到初學(xué)者的特點(diǎn),力求使實(shí)例做到簡(jiǎn)單易懂。首先讓學(xué)生通過學(xué)習(xí)簡(jiǎn)單的例子激發(fā)和培養(yǎng)學(xué)生的學(xué)習(xí)興趣和探索欲望,然后再逐步提高難度、提升水平。先是單個(gè)功能、單個(gè)模塊的學(xué)習(xí),逐步轉(zhuǎn)換成對(duì)整個(gè)系統(tǒng)的分析和設(shè)計(jì)。
(3)秉承“理論學(xué)習(xí)是認(rèn)識(shí)單片機(jī)的起點(diǎn),設(shè)計(jì)單片機(jī)系統(tǒng)是最終落腳點(diǎn)”的理念。在理論講解的基礎(chǔ)上,通過實(shí)例讓學(xué)生對(duì)單片機(jī)的認(rèn)識(shí)形象化,配合豐富有趣的習(xí)題練習(xí)使學(xué)生對(duì)于單片機(jī)的理解硬件化或產(chǎn)品化。
本書以MSP430F261x單片機(jī)為例,全面而翔實(shí)地介紹了MSP430單片機(jī)的結(jié)構(gòu)組成、工作原理以及常用模塊的使用方法。內(nèi)容組織上不貪大求全,而是盡量做到把最常用、最能反映單片機(jī)精髓的知識(shí)講細(xì)、講精、講透,以達(dá)到讓讀者觸類旁通的目的。在組織結(jié)構(gòu)上,全書共分為12章,第1章介紹了與嵌入式系統(tǒng)相關(guān)的基本知識(shí);第2章介紹了MSP430單片機(jī)的內(nèi)部結(jié)構(gòu)和外部組成,并簡(jiǎn)要介紹了MSP430單片機(jī)尋址方式、指令系統(tǒng);第3章主要回顧了MSP430單片機(jī)C程序設(shè)計(jì)的相關(guān)知識(shí);第4~11章分別講述了MSP430單片機(jī)的輸入輸出端口及常用接口設(shè)計(jì)、時(shí)鐘系統(tǒng)、定時(shí)器、模數(shù)轉(zhuǎn)換器、數(shù)模轉(zhuǎn)換器、通用串行通信接口、存儲(chǔ)器、DMA等常用片上模塊的工作原理及使用方法;第12章介紹了MSP430單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)基礎(chǔ)。
書中各章節(jié)的知識(shí)點(diǎn)都提供了簡(jiǎn)單易懂的例程,本書所有例程均在IAREmbeddedWorkbenchForMSP430v5和TICCSv5中調(diào)試通過。每章附有大量習(xí)題供學(xué)生課下鞏固本章內(nèi)容,部分習(xí)題可以訓(xùn)練學(xué)生的創(chuàng)新思維能力。
總之,全書結(jié)構(gòu)緊湊、布局合理,具有一定的通用性、系統(tǒng)性和實(shí)用性。內(nèi)容敘述力求簡(jiǎn)潔、凝練。力求做到深入淺出的理論講解、簡(jiǎn)單易懂的實(shí)例設(shè)計(jì)、豐富有趣的習(xí)題練習(xí)、獨(dú)具匠心的知識(shí)體系。為了便于學(xué)習(xí)和閱讀TI公司提供的相關(guān)原始數(shù)據(jù)資料,本書使用的邏輯電路符號(hào)與公司官方資料中使用的符號(hào)保持一致。
在本書的編寫和出版過程中得到了蘭州大學(xué)信息科學(xué)與工程學(xué)院電路與系統(tǒng)研究所田毅、張燕、孫曉光、李劍、郭麗杰、楊澤坤、陳麗娜、張垚、趙繼鵬等研究生,以及蘭州大學(xué)信息科學(xué)與工程學(xué)院電子信息科學(xué)與技術(shù)專業(yè)和通信工程專業(yè)部分本科生的協(xié)助。感謝他們?cè)谫Y料搜集、書稿整理、程序調(diào)試、后期校稿等方面所做的工作。此外,書中例題參考了TI官方網(wǎng)站提供的大量例程,個(gè)別例題及部分內(nèi)容也參考了互聯(lián)網(wǎng)上的有關(guān)資料,在此向這些資料的作者一并表示誠摯的感謝。
需要特別指出的是,本教材的出版得到了蘭州大學(xué)教材建設(shè)基金資助和蘭州大學(xué)信息科學(xué)與工程學(xué)院教材建設(shè)基金資助。感謝美國德州儀器公司大學(xué)計(jì)劃給予蘭州大學(xué)MSP430&CortexM單片機(jī)聯(lián)合實(shí)驗(yàn)室的持續(xù)支持。
由于作者水平所限,書中難免存在部分疏漏和不妥之處,懇請(qǐng)廣大讀者批評(píng)指正!
編者2017年3月于蘭州大學(xué)
第1章緒論
1.1嵌入式系統(tǒng)概述
1.1.1嵌入式系統(tǒng)的定義
1.1.2嵌入式系統(tǒng)的構(gòu)成
1.1.3嵌入式系統(tǒng)的特點(diǎn)
1.1.4嵌入式系統(tǒng)的發(fā)展
1.1.5嵌入式系統(tǒng)的應(yīng)用
1.2嵌入式微處理器
1.2.1嵌入式處理器分類
1.2.2嵌入式處理器的體系結(jié)構(gòu)
1.2.3常見嵌入式處理器
1.2.4嵌入式處理器的發(fā)展
1.3MSP430單片機(jī)
1.3.1典型特點(diǎn)
1.3.2命名規(guī)則
1.3.3產(chǎn)品系列概況
1.3.4應(yīng)用場(chǎng)合
習(xí)題
第2章MSP430單片機(jī)結(jié)構(gòu)組成
2.1內(nèi)部結(jié)構(gòu)
2.1.1中央處理器
2.1.2存儲(chǔ)空間組織結(jié)構(gòu)
2.1.3單片機(jī)復(fù)位過程
2.2外部結(jié)構(gòu)
2.2.1封裝類型
2.2.2引腳說明
2.2.3MSP430單片機(jī)最小系統(tǒng)
2.3指令系統(tǒng)
2.3.1指令集
2.3.2尋址方式
2.3.3指令周期
2.3.4指令集擴(kuò)展
習(xí)題
第3章MSP430單片機(jī)C語言程序設(shè)計(jì)基礎(chǔ)
3.1單片機(jī)程序設(shè)計(jì)基礎(chǔ)
3.1.1程序流程圖
3.1.2單片機(jī)程序設(shè)計(jì)語言
3.1.3單片機(jī)程序設(shè)計(jì)的一般步驟
3.2MSP430單片機(jī)C語言程序設(shè)計(jì)
3.2.1數(shù)據(jù)類型與運(yùn)算符
3.2.2常見程序結(jié)構(gòu)
3.2.3數(shù)組
3.2.4函數(shù)
3.2.5指針類型
3.2.6預(yù)處理
3.2.7typedef定義類型
3.2.8規(guī)范化編程
3.3集成開發(fā)環(huán)境快速入門
3.3.1IAR EW430快速入門
3.3.2TI CCS快速入門
習(xí)題
第4章MSP430單片機(jī)中斷系統(tǒng)與輸入輸出接口
4.1中斷系統(tǒng)
4.1.1中斷系統(tǒng)基本概念
4.1.2中斷類型
4.1.3中斷響應(yīng)過程
4.1.4中斷函數(shù)
4.2數(shù)字I/O端口
4.2.1控制寄存器
4.2.2內(nèi)部結(jié)構(gòu)
4.2.3電氣特性
4.3端口應(yīng)用
4.3.1普通I/O端口
4.3.2外部中斷
4.3.3總線模擬
習(xí)題
第5章MSP430單片機(jī)時(shí)鐘系統(tǒng)與休眠模式
5.1時(shí)鐘系統(tǒng)
5.1.1時(shí)鐘系統(tǒng)結(jié)構(gòu)
5.1.2時(shí)鐘失效處理
5.2休眠模式
5.2.1休眠模式與低功耗
5.2.2休眠喚醒與退出
5.2.3休眠模式的應(yīng)用
習(xí)題
第6章MSP430單片機(jī)定時(shí)器
6.1定時(shí)器A
6.1.1定時(shí)計(jì)數(shù)部件
6.1.2捕獲/比較部件
6.2定時(shí)器B
6.2.1邏輯結(jié)構(gòu)
6.2.2定時(shí)計(jì)數(shù)部件
6.2.3捕獲/比較部件
6.3看門狗
6.3.1邏輯結(jié)構(gòu)
6.3.2定時(shí)模式
6.3.3看門狗模式
習(xí)題
第7章MSP430單片機(jī)常用接口設(shè)計(jì)
7.1LED顯示接口設(shè)計(jì)
7.1.1LED發(fā)光原理
7.1.2LED數(shù)碼管
7.1.3點(diǎn)陣LED
7.2LCD接口設(shè)計(jì)
7.2.1LCD顯示原理
7.2.2段式LCD
7.2.3點(diǎn)陣LCD
7.3鍵盤接口設(shè)計(jì)
7.3.1獨(dú)立式鍵盤
7.3.2矩陣式鍵盤
7.3.3觸摸按鍵
習(xí)題
第8章MSP430單片機(jī)模擬信號(hào)處理
8.1模擬信號(hào)處理概述
8.1.1自動(dòng)控制系統(tǒng)
8.1.2單片機(jī)控制系統(tǒng)
8.1.3MSP430單片機(jī)集成的模擬設(shè)備
8.2模數(shù)轉(zhuǎn)換模塊
8.2.1模數(shù)轉(zhuǎn)換概述
8.2.2ADC12模塊
8.2.3ADC12工作過程
8.2.4轉(zhuǎn)換模式
8.3數(shù)模轉(zhuǎn)換模塊
8.3.1數(shù)模轉(zhuǎn)換概述
8.3.2DAC12模塊
8.3.3應(yīng)用舉例
習(xí)題
第9章MSP430單片機(jī)異步串行通信
9.1異步串行通信概述
9.1.1串行通信基本概念
9.1.2常見異步串行通信
9.1.3MSP430的串行通信模塊
9.2異步串行通信
9.2.1UART工作原理
9.2.2多機(jī)通信模式
9.2.3帶有自動(dòng)波特率檢測(cè)的UART
9.2.4紅外通信
9.2.5軟件模擬UART通信
習(xí)題
第10章MSP430單片機(jī)同步串行通信
10.1同步串行通信概述
10.1.1同步方式
10.1.2常見同步串行通信
10.2I2C通信
10.2.1I2C概述
10.2.2I2C邏輯結(jié)構(gòu)
10.2.3中斷與初始化
10.2.4工作模式
10.2.5軟件模擬I2C通信
10.3SPI通信
10.3.1SPI總線及工作原理
10.3.2SPI模塊
10.3.3SPI連接方式
10.3.4軟件模擬SPI通信
習(xí)題
第11章MSP430單片機(jī)存儲(chǔ)系統(tǒng)
11.1存儲(chǔ)器概述
11.1.1半導(dǎo)體存儲(chǔ)器
11.1.2Flash存儲(chǔ)原理
11.1.3FRAM存儲(chǔ)原理
11.2MSP430單片機(jī)存儲(chǔ)系統(tǒng)
11.2.1地址空間劃分及訪問方式
11.2.2數(shù)據(jù)存儲(chǔ)器
11.2.3程序存儲(chǔ)器
11.3Flash控制器及應(yīng)用
11.3.1Flash控制器
11.3.2Flash的操作
11.4MSP430單片機(jī)存儲(chǔ)器的擴(kuò)展
11.4.1存儲(chǔ)器擴(kuò)展
11.4.2SD卡的應(yīng)用
11.5直接存儲(chǔ)器存取
11.5.1DMA模塊的結(jié)構(gòu)與工作原理
11.5.2DMA傳輸模式
11.5.3DMA觸發(fā)源
習(xí)題
第12章MSP430單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)基礎(chǔ)
12.1單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)概述
12.1.1單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)一般步驟
12.1.2基于MSP430單片機(jī)的應(yīng)用系統(tǒng)設(shè)計(jì)
12.2單片機(jī)應(yīng)用系統(tǒng)的抗干擾與低功耗設(shè)計(jì)
12.2.1抗干擾技術(shù)
12.2.2低功耗設(shè)計(jì)技術(shù)
12.3嵌入式操作系統(tǒng)的應(yīng)用
12.3.1嵌入式操作系統(tǒng)基礎(chǔ)
12.3.2μC/OS Ⅱ在MSP430單片機(jī)上的移植
12.3.3基于μC/OS Ⅱ的單片機(jī)系統(tǒng)開發(fā)
習(xí)題
附錄A中斷向量速查表
附錄B端口功能速查表
附錄C寄存器速查表
參考文獻(xiàn)
第3章
CHAPTER3
MSP430單片機(jī)C語言
程序設(shè)計(jì)基礎(chǔ)
3.1單片機(jī)程序設(shè)計(jì)基礎(chǔ)
3.1.1程序流程圖
在程序設(shè)計(jì)中,最重要的不是編寫代碼而是算法設(shè)計(jì),這與建筑和機(jī)械制造很相似。例如,當(dāng)要建設(shè)一棟高樓時(shí),首先要做的是繪制高樓的結(jié)構(gòu)圖以及施工圖,然后是現(xiàn)場(chǎng)施工。程序設(shè)計(jì)也是如此,當(dāng)面對(duì)一個(gè)程序設(shè)計(jì)任務(wù)時(shí),首先想要做的是先畫出整個(gè)任務(wù)實(shí)現(xiàn)的流程圖,然后再使用具體的程序設(shè)計(jì)語言進(jìn)行代碼實(shí)現(xiàn)。可見,程序流程圖的繪制在整個(gè)程序設(shè)計(jì)中起著重要作用。實(shí)際上,繪制流程圖的過程就是思考和形成算法的過程。由于其直觀性,繪制過程本身又促進(jìn)了思考。因此,程序流程圖是人們對(duì)解決問題的方法、思路或算法的一種描述方法。當(dāng)人們看到一個(gè)優(yōu)秀的程序流程圖時(shí),就能很快地把握住程序結(jié)構(gòu)和處理思路,有利于程序糾錯(cuò)和維護(hù)。
程序流程圖具有符號(hào)規(guī)范、畫法簡(jiǎn)單、結(jié)構(gòu)清晰、邏輯性強(qiáng)、便于描述、容易理解等優(yōu)點(diǎn)。繪制流程圖所需要的基本符號(hào)如圖3.1所示,它們分別是起始框、終止框、執(zhí)行框和判別框。其中,起始框和終止框是程序流程圖必備的;執(zhí)行框中注有必要文字說明以指示具體執(zhí)行了何種操作,該框所指的操作可大可小。在概要設(shè)計(jì)階段執(zhí)行框所描述的是一個(gè)大的功能模塊。在詳細(xì)設(shè)計(jì)階段則是指在實(shí)現(xiàn)某一特定功能時(shí)需要執(zhí)行的具體指令或語句。
圖3.1流程圖中基本符號(hào)
繪制程序框圖的規(guī)則:使用標(biāo)準(zhǔn)的框圖符號(hào);框圖一般按從上到下、從左到右的方向畫;除判別框外,大多數(shù)程序框圖的符號(hào)只有一個(gè)進(jìn)入點(diǎn)和一個(gè)退出點(diǎn),而判別框是具有超過一個(gè)退出點(diǎn)的唯一符號(hào)。在繪制流程圖時(shí)要注意結(jié)構(gòu)化程序設(shè)計(jì)中三種基本結(jié)構(gòu)的流程圖標(biāo)準(zhǔn)畫法。盡量將復(fù)合條件轉(zhuǎn)為多個(gè)單一條件。流程線不要忘記畫箭頭,因?yàn)樗欠从沉鞒虉?zhí)行的先后順序。如果不畫箭頭,就難以判斷執(zhí)行次序。
3.1.2單片機(jī)程序設(shè)計(jì)語言
目前主要的單片機(jī)程序設(shè)計(jì)語言是匯編語言和C語言。匯編語言是面向CPU的程序設(shè)計(jì)語言。由于匯編語言程序直接利用單片機(jī)指令集中的指令實(shí)現(xiàn)具體的算法功能,因此匯編語言與機(jī)器語言具有較好的一致性,可以訪問所有能夠被訪問的軟、硬件資源。匯編語言程序的目標(biāo)代碼簡(jiǎn)短,占用內(nèi)存少,執(zhí)行速度快,是高效的程序設(shè)計(jì)語言。它經(jīng)常與高級(jí)語言配合使用,以改善程序的執(zhí)行速度和效率,彌補(bǔ)高級(jí)語言在硬件控制方面的不足。匯編語言的缺點(diǎn)是不同處理器具有不同的匯編語言語法和編譯器,編譯好的程序無法在不同的處理器上執(zhí)行,缺乏可移植性。匯編語言程序的可讀性差、不易維護(hù)?傊瑓R編語言程序編寫煩瑣、工作量大、開發(fā)效率很低,周期長(zhǎng)且單調(diào)。目前處理器性能不斷提升、存儲(chǔ)資源越來越豐富,使得匯編語言目標(biāo)代碼少、效率高的優(yōu)勢(shì)正在逐漸喪失。使用匯編語言從事嵌入式系統(tǒng)開發(fā)的人數(shù)總體呈下降趨勢(shì)。
C語言是一種既具有高級(jí)語言的特點(diǎn),又具有部分匯編語言特點(diǎn)的程序設(shè)計(jì)語言。C語言也是一種結(jié)構(gòu)化的程序設(shè)計(jì)語言,因?yàn)樗峁┝巳N基本結(jié)構(gòu)語句,而且提供了定義“函數(shù)”的功能。函數(shù)可以完成子程序的所有功能,是完成程序功能的基本構(gòu)件。由于函數(shù)允許將一個(gè)程序中的多個(gè)任務(wù)被分別定義、編碼和單獨(dú)編譯,所以函數(shù)可以使程序模塊化。作為一種高級(jí)語言,C語言功能齊全、應(yīng)用范圍大,已是目前最為流行的高級(jí)語言之一。但是C語言代碼的執(zhí)行效率比匯編語言要低。
在程序設(shè)計(jì)歷史上匯編語言曾是非常流行的語言之一。一方面,隨著硬件技術(shù)的進(jìn)步,CPU性能不斷提高、儲(chǔ)存資源日益增大、成本逐漸降低;另一方面,隨著軟件規(guī)模的增長(zhǎng)以及對(duì)開發(fā)進(jìn)度和效率的苛刻要求,高級(jí)語言逐漸取代了匯編語言。但即便如此,高級(jí)語言也不可能完全替代匯編語言的作用。以Linux內(nèi)核為例,盡管絕大部分內(nèi)核代碼是用C語言編寫的,但在某些關(guān)鍵地方仍然使用了匯編代碼。因?yàn)檫@部分代碼與硬件的關(guān)系非常密切,即使是C語言也會(huì)顯得力不從心,而匯編語言則能夠很好地?fù)P長(zhǎng)避短,最大限度地發(fā)揮硬件的性能。
一般對(duì)于小程序來說,若是對(duì)硬件進(jìn)行簡(jiǎn)單的控制可以用匯編語言,若更多涉及邏輯設(shè)計(jì)方面的內(nèi)容,則需要使用C語言。對(duì)于稍大一些的程序來說,C語言的優(yōu)勢(shì)就十分明顯了。就現(xiàn)代單片機(jī)程序設(shè)計(jì)來說,大多是以C語言為主,匯編語言為輔。即只有在那些對(duì)代碼大小和效率要求較高的場(chǎng)合才使用匯編語言。
3.1.3單片機(jī)程序設(shè)計(jì)的一般步驟
圖3.2單片機(jī)程序設(shè)計(jì)流程圖
人們?cè)谇度胧较到y(tǒng)產(chǎn)品開發(fā)過程中摸索出了程序設(shè)計(jì)的一般步驟,具體如圖3.2所示。該步驟對(duì)于基于單片機(jī)的產(chǎn)品設(shè)計(jì)與程序開發(fā)具有很好的借鑒作用。按此步驟進(jìn)行產(chǎn)品開發(fā)可使設(shè)計(jì)者少走彎路,縮短開發(fā)周期,提高產(chǎn)品可靠性。
1.需求分析、明確任務(wù)
該階段要盡可能搞清楚用戶的全部需求信息,即對(duì)要完成的任務(wù)進(jìn)行詳細(xì)的了解與分析。然后將具體的實(shí)際問題抽象轉(zhuǎn)化成計(jì)算機(jī)可以處理的問題。
2.算法設(shè)計(jì)
在明確任務(wù)之后,就需要將其轉(zhuǎn)化成計(jì)算機(jī)算法。算法就是在計(jì)算機(jī)上解決問題的方法與步驟。對(duì)于復(fù)雜的大型程序,算法設(shè)計(jì)又可分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)階段。對(duì)于比較小的軟件兩個(gè)可以同時(shí)做。詳細(xì)設(shè)計(jì)完成后算法設(shè)計(jì)也就基本完成了,接下來將設(shè)計(jì)好的算法轉(zhuǎn)化成使用具體程序設(shè)計(jì)語言編寫出的程序,進(jìn)而實(shí)現(xiàn)在計(jì)算機(jī)上的求解。在設(shè)計(jì)算法時(shí)一般會(huì)采用或借鑒現(xiàn)有的一些計(jì)算方法和日常生活中解決問題的邏輯思維推理方法等。
繪制程序流程圖是在算法設(shè)計(jì)之初就開始的工作,在算法設(shè)計(jì)好之后,程序流程圖也就確定了。所以說算法設(shè)計(jì)的過程,也是繪制程序流程的過程。通過畫流程圖可以首先從圖上檢驗(yàn)算法的正確性,減少出錯(cuò)的可能,使得動(dòng)手編寫程序時(shí)的思路更加清晰。
3.芯片選擇及合理分配單片機(jī)資源
等完成算法設(shè)計(jì)之后,就需要決定在何種硬件平臺(tái)上實(shí)現(xiàn)上述算法。在確定好主要芯片之后,就需要完成單片機(jī)系統(tǒng)的資源配置及分配,主要是單片機(jī)存儲(chǔ)空間和工作單元的合理分配和外圍設(shè)備的配置。在這個(gè)過程中,應(yīng)充分利用不同型號(hào)單片機(jī)的特殊優(yōu)點(diǎn)以方便資源配置和系統(tǒng)設(shè)計(jì)。例如,合理、正確地對(duì)存儲(chǔ)空間進(jìn)行分段和數(shù)據(jù)定義。由于MSP430單片機(jī)對(duì)16位數(shù)據(jù)處理效率最高,因此要充分利用這一特點(diǎn)。
4.代碼編寫
該步驟在單片機(jī)程序設(shè)計(jì)中是最為重要的一步。經(jīng)過1~3步的準(zhǔn)備,已完成了程序代碼編寫前的所有工作。編寫程序時(shí)要選擇好編寫語言,對(duì)于同一種算法,不同的程序設(shè)計(jì)語言會(huì)有不同的實(shí)現(xiàn)方法。編程能力的提高是一個(gè)循序漸進(jìn)的過程。對(duì)于初學(xué)者來說,一方面,要多讀現(xiàn)有的程序,以學(xué)習(xí)別人的編程經(jīng)驗(yàn);另一方面,還必須多動(dòng)手,親自編寫程序,不要怕失敗,只有通過無數(shù)次失敗,才能從中積累自己的編程經(jīng)驗(yàn)。
5.程序調(diào)試
在源代碼編寫完畢之后,就要進(jìn)行調(diào)試。通過調(diào)試的程序只能說明沒有語法錯(cuò)誤,但不能排除沒有邏輯錯(cuò)誤。所以能不能達(dá)到預(yù)期效果還必須用實(shí)際數(shù)據(jù)測(cè)試才可以。一般來說,這是一個(gè)反復(fù)測(cè)試的過程。對(duì)此,程序編寫人員,尤其是初學(xué)者一定要有充分的心理準(zhǔn)備。只要有足夠的耐心,加上認(rèn)真、細(xì)致的工作態(tài)度,就一定能找出其中的邏輯錯(cuò)誤。事實(shí)上,即使是一個(gè)非常有經(jīng)驗(yàn)的程序員,也沒有百分之百的把握一次就成功。
6.性能評(píng)估
在程序調(diào)試完后,就需要將程序應(yīng)用到產(chǎn)品上進(jìn)行實(shí)際環(huán)境檢驗(yàn),其中包括功能檢驗(yàn)、可靠性檢驗(yàn)、極端環(huán)境下檢驗(yàn)。凡經(jīng)過檢驗(yàn)符合要求了,整個(gè)程序設(shè)計(jì)工作就算結(jié)束了,接下來就是文檔整理與使用說明書的編寫工作了。若不符合要求,則需要重新開始,這是最壞的情況。一般而言,只要將任務(wù)需求分析做得足夠細(xì),一般不會(huì)出現(xiàn)這種極端情況。
7.文檔整理與編寫
程序運(yùn)行無誤,實(shí)際試運(yùn)行正常,且經(jīng)過了各種環(huán)境測(cè)試,但這并不意味著產(chǎn)品開發(fā)任務(wù)的結(jié)束。程序文檔的編寫也是程序設(shè)計(jì)的一個(gè)重要任務(wù)。其目的是為了便于修改和維護(hù)程序。程序文檔一般包括含有功能要求和指標(biāo)程序的設(shè)計(jì)任務(wù)書、程序流程圖、存儲(chǔ)單元分配清單、源程序清單、應(yīng)用系統(tǒng)資源分配、參量計(jì)算和設(shè)計(jì)、錯(cuò)誤信息的定義、實(shí)際功能及指標(biāo)測(cè)試結(jié)果說明、程序使用和維護(hù)說明書等。需要注意的是,部分程序文檔的編寫是與上述1~6步同時(shí)進(jìn)行的。
3.2MSP430單片機(jī)C語言程序設(shè)計(jì)
目前支持MSP430單片機(jī)的C語言編譯器很多,國內(nèi)主要使用的是IAR公司的IAREmbeddedWorkbenchforMSP430(EW430)和TI公司開發(fā)的CodeComposerStudio(CCS)。MSPGCC作為一種開源編譯器也具有一定的使用者。這些C編譯器功能比較強(qiáng)大,可以編譯出高效、緊湊的機(jī)器代碼。
MSP430單片機(jī)的C語言程序(以后簡(jiǎn)稱C430)設(shè)計(jì)方法與標(biāo)準(zhǔn)C語言的基本上相同。但單片機(jī)的資源與PC相比,十分匱乏。為了更好地適應(yīng)MSP430單片機(jī)的程序設(shè)計(jì),C430對(duì)標(biāo)準(zhǔn)C語言進(jìn)行了擴(kuò)展。主要表現(xiàn)在數(shù)據(jù)類型及數(shù)據(jù)長(zhǎng)度、關(guān)鍵字?jǐn)U展以及由此引起的函數(shù)擴(kuò)展等。需要說明的是,不同的C430編譯器對(duì)C語言的擴(kuò)展不完全相同,例如,IAR公司的C編譯器與TI公司的C編譯器都對(duì)C語言的支持程度略有不同,大多數(shù)情況下,MSP430單片機(jī)的源程序可以在各個(gè)版本的C430編譯器上使用。
3.2.1數(shù)據(jù)類型與運(yùn)算符
1.標(biāo)識(shí)符與關(guān)鍵字
標(biāo)識(shí)符是指常量、變量、語句標(biāo)號(hào)、數(shù)組、文件名以及用戶自定義函數(shù)的名稱。C語言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字、下畫線組成,并且只能由字母、下畫線開頭,所用字母區(qū)分大小寫。C語言中一些已被賦予特定含義的標(biāo)識(shí)符被稱為關(guān)鍵字或保留字,關(guān)鍵字不能用作標(biāo)識(shí)符,在C語言中的關(guān)鍵詞見表3.1。這些關(guān)鍵字將在后續(xù)章節(jié)中陸續(xù)介紹。
表3.1C語言中的32個(gè)關(guān)鍵詞
與數(shù)據(jù)類型相關(guān)的關(guān)鍵字(12個(gè))
short聲明短整型變量或函數(shù)struct聲明結(jié)構(gòu)體變量或函數(shù)
int聲明整型變量或函數(shù)union聲明共用數(shù)據(jù)類型
long聲明長(zhǎng)整型變量或函數(shù)enum聲明枚舉類型
float聲明浮點(diǎn)型變量或函數(shù)void聲明函數(shù)無返回值或無參數(shù),聲明無類型指針
double聲明雙精度變量或函數(shù)unsigned聲明無符號(hào)類型變量或函數(shù)
char聲明字符型變量或函數(shù)signed聲明有符號(hào)類型變量或函數(shù)
續(xù)表
與變量有關(guān)的關(guān)鍵字(6個(gè))
auto聲明自動(dòng)變量extern聲明變量是在其他文件正聲明
const聲明只讀變量register聲明寄存器變量
static聲明靜態(tài)變量volatile說明變量在程序執(zhí)行中可被隱含地改變
與程序控制有關(guān)的關(guān)鍵字(12個(gè))
if條件語句for一種循環(huán)語句
else條件語句否定分支(與if連用)do循環(huán)語句的循環(huán)體
switch用于開關(guān)語句while循環(huán)語句的循環(huán)條件
case開關(guān)語句分支continue結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán)
default開關(guān)語句中的“其他”分支break跳出當(dāng)前循環(huán)
goto無條件跳轉(zhuǎn)語句return子程序返回語句(可以帶參數(shù),也可不帶參數(shù))
其他關(guān)鍵字(2個(gè))
sizeof計(jì)算數(shù)據(jù)類型長(zhǎng)度typedef用以給數(shù)據(jù)類型取別名
你還可能感興趣
我要評(píng)論
|