官术网_书友最值得收藏!

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ā)語言。

主站蜘蛛池模板: 峨边| 祁连县| 九龙县| 徐水县| 马山县| 璧山县| 久治县| 衡东县| 仁化县| 罗田县| 乐安县| 神池县| 镇赉县| 界首市| 黑山县| 镇安县| 通城县| 呼玛县| 新和县| 松潘县| 巩义市| 清丰县| 平顺县| 颍上县| 亚东县| 崇义县| 鹤峰县| 武宣县| 嘉荫县| 河津市| 竹溪县| 东乌| 绥中县| 武义县| 越西县| 昌都县| 扶绥县| 潞西市| 深水埗区| 同德县| 白城市|