- 零基礎(chǔ)學(xué)單片機(jī)C語言程序設(shè)計(jì)
- 趙建領(lǐng) 薛園園等編著
- 1817字
- 2018-12-31 21:41:25
1.3 單片機(jī)開發(fā)語言概述
進(jìn)行單片機(jī)程序開發(fā)時(shí),首先需要選擇合適的開發(fā)語言。在單片機(jī)設(shè)計(jì)中,一般可以選擇單片機(jī)匯編語言和單片機(jī)C51語言兩種。這兩種語言各有優(yōu)勢(shì),目前以單片機(jī)C51語言使用的最多。
1.3.1 單片機(jī)匯編語言
單片機(jī)匯編語言是采用助記符標(biāo)識(shí)的指令的程序設(shè)計(jì)語言,其中助記符標(biāo)識(shí)是二進(jìn)制指令的形象標(biāo)記。單片機(jī)匯編語言程序是單片機(jī)匯編指令的集合。匯編語言程序設(shè)計(jì)與51系列單片機(jī)的匯編指令集和硬件結(jié)構(gòu)等有密切聯(lián)系,在單片機(jī)上可以用來實(shí)現(xiàn)特定的功能和任務(wù)。匯編語言以其簡(jiǎn)練的代碼、快速的操作硬件能力而最先獲得了廣泛使用。一個(gè)典型的匯編語言程序示例如下。
ORG 0200H ;匯編程序起始命令 MOV A,R4 ;低字節(jié)送入累加器A CPL A ;取反 ADD A,#01H ;加1 MOV 21H,A ;將結(jié)果送入地址21H MOV A,R3 ;高字節(jié)送入累加器A CPL A ;取反 ADDC A,#00H ;加進(jìn)位位 MOV 20H,A ;將結(jié)果送入地址20H END ;程序結(jié)束
該程序?qū)崿F(xiàn)了一個(gè)16位二進(jìn)制數(shù)的求補(bǔ)。程序中,假定帶操作的這個(gè)雙字節(jié)數(shù)存放在R3R4中,程序?qū)⑶笱a(bǔ)以后的結(jié)果存放于地址20H、21H中。首先低字節(jié)求補(bǔ),即“求反加一”,然后進(jìn)行高字節(jié)的求補(bǔ)。
從上面的程序可以看出,采用匯編語言編寫的程序,每條指令的含義一目了然,而且用匯編語言編寫的程序代碼少,執(zhí)行速度快,每條指令的執(zhí)行時(shí)間完全確定。因此,在最初的單片機(jī)應(yīng)用系統(tǒng)中,主要是用匯編語言來編寫程序。總結(jié)起來,匯編語言與高級(jí)語言相比具有以下優(yōu)點(diǎn)。
?匯編程序代碼簡(jiǎn)短,執(zhí)行速度快。
?占用比較少的內(nèi)存單元和CPU資源。
?和硬件結(jié)構(gòu)密切相關(guān),可直接調(diào)用單片機(jī)的全部資源,從而有效地利用單片機(jī)的專有特性。
?指令的執(zhí)行時(shí)間十分明確,適用于實(shí)時(shí)控制系統(tǒng)或者對(duì)時(shí)間有嚴(yán)格要求的場(chǎng)合。
單片機(jī)匯編語言仍然是一種面向機(jī)器的低級(jí)語言。使用匯編語言編寫程序時(shí),必須熟悉單片機(jī)的指令系統(tǒng)、尋址方式、寄存器的設(shè)置和使用方法以及系統(tǒng)的硬件資源等。每個(gè)計(jì)算機(jī)系統(tǒng)都有它自己的匯編語言指令集,不同計(jì)算機(jī)或者單片機(jī)的匯編語言之間一般不能通用。因此,單片機(jī)匯編語言也有其明顯的缺點(diǎn),羅列如下。
?一般只針對(duì)某種單片機(jī),缺乏通用性,程序不易移植。
?匯編語言格式比較晦澀,代碼難懂,不便于閱讀和后期修改。
?匯編程序結(jié)構(gòu)不清晰,給代碼閱讀和交流帶來很大的麻煩。
由于單片機(jī)匯編語言的諸多不方便,現(xiàn)在使用的已經(jīng)比較少。程序開發(fā)者大都轉(zhuǎn)向單片機(jī)C51語言進(jìn)行設(shè)計(jì),只有在對(duì)執(zhí)行速度有嚴(yán)格要求的場(chǎng)合,才在單片機(jī)C51語言中嵌入?yún)R編代碼來實(shí)現(xiàn)。
1.3.2 單片機(jī)C51語言
對(duì)比現(xiàn)有的種種程序設(shè)計(jì)語言,C語言以其功能強(qiáng)大、結(jié)構(gòu)清晰等優(yōu)點(diǎn)得到廣泛應(yīng)用。而在單片機(jī)程序設(shè)計(jì)中,同樣有應(yīng)用于單片機(jī)的C語言,一般簡(jiǎn)稱為C51語言。C51語言繼承了C語言的結(jié)構(gòu)上的優(yōu)點(diǎn),便于用戶學(xué)習(xí)和使用,同時(shí)又具有匯編語言操作硬件的能力。因此,目前單片機(jī)C51被廣泛使用于單片機(jī)程序設(shè)計(jì)中,大有取代單片機(jī)匯編語言的趨勢(shì)。一個(gè)典型的單片機(jī)C51語言的程序示例如下。
#include <stdio.h> //頭文件 void main( ) //主函數(shù) { floata; //定義a為單精度浮點(diǎn)型變量 double b; //定義b為雙精度浮點(diǎn)型變量 a=1134.5678; //賦值 b=5890.1; printf("a=%f\nb=%f\n",a,b); //打印輸出結(jié)果 }
本例中,首先初始化兩個(gè)變量,然后打印輸出變量的值。從中可以看出,單片機(jī)C51語言和C語言非常類似,這給用戶學(xué)習(xí)和使用帶來了方便。
與匯編語言相比,單片機(jī)C語言在結(jié)構(gòu)上更易理解,可讀性強(qiáng),且開發(fā)速度快,可靠性好,便于移植。因此,使用單片機(jī)C語言進(jìn)行單片機(jī)系統(tǒng)的開發(fā),可以縮短開發(fā)周期,降低開發(fā)成本。單片機(jī)的C51語言特點(diǎn)很多,總結(jié)起來主要有以下幾點(diǎn)。
?單片機(jī)C51語言兼?zhèn)涓呒?jí)語言與低級(jí)語言的優(yōu)點(diǎn),語法結(jié)構(gòu)和標(biāo)準(zhǔn)C語言基本一致。其規(guī)模適中,語言簡(jiǎn)潔,便于學(xué)習(xí)。
?單片機(jī)C51語言提供了完備的數(shù)據(jù)類型、運(yùn)算符以及函數(shù)供使用。
?C51語言是一種結(jié)構(gòu)化程序設(shè)計(jì)語言,程序結(jié)構(gòu)簡(jiǎn)單明了。
?C51語言的可移植性好。對(duì)于兼容的8051系列單片機(jī),只要將一個(gè)硬件型號(hào)下的程序稍加修改,甚至不加改變就可移植到另一個(gè)不同的硬件型號(hào)開發(fā)環(huán)境中使用。
?C51語言生成的代碼執(zhí)行效率高,且比匯編語言的程序便于理解和代碼交流。
?單片機(jī)C51語言開發(fā)速度快,可以明顯縮短開發(fā)周期。
和單片機(jī)匯編語言相比,單片機(jī)C51語言的代碼體積要大,執(zhí)行效率不夠高。但是隨著技術(shù)的發(fā)展,C51語言在代碼執(zhí)行的效率方面越來越接近匯編語言。另外,單片機(jī)的程序存儲(chǔ)器容量越來越大,硬件的工作頻率也越來越快,這些都使得單片機(jī)C51語言的應(yīng)用越來越廣泛。隨著單片機(jī)硬件系統(tǒng)的發(fā)展和產(chǎn)品更新速度的提升,單片機(jī)的開發(fā)越來越著重于程序本身的開發(fā)效率,以便快速占領(lǐng)市場(chǎng)。因此,單片機(jī)C51語言已成為目前最流行的單片機(jī)開發(fā)語言。
- C++ Builder 6.0下OpenGL編程技術(shù)
- Three.js開發(fā)指南:基于WebGL和HTML5在網(wǎng)頁上渲染3D圖形和動(dòng)畫(原書第3版)
- BeagleBone Media Center
- Java面向?qū)ο蟪绦蜷_發(fā)及實(shí)戰(zhàn)
- Python機(jī)器學(xué)習(xí)經(jīng)典實(shí)例
- Apex Design Patterns
- JavaCAPS基礎(chǔ)、應(yīng)用與案例
- Python Data Science Cookbook
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)教程(Windows 7+Office 2010)
- Building Serverless Web Applications
- 從零開始學(xué)Android開發(fā)
- Hacking Android
- Android嵌入式系統(tǒng)程序開發(fā)(基于Cortex-A8)
- 編程的原則:改善代碼質(zhì)量的101個(gè)方法
- Python3從入門到實(shí)戰(zhàn)