《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > PIC單片機(jī)入門_C語言編程技術(shù)

PIC單片機(jī)入門_C語言編程技術(shù)

2018-07-31
來源:互聯(lián)網(wǎng)
關(guān)鍵詞: C語言 PIC單片機(jī) 編程

1.為什么也是C語言


用C 語言來開發(fā)單片機(jī)系統(tǒng)軟件最大的好處是編寫代碼效率高、軟件調(diào)試直觀、維護(hù)升級(jí)方便、代碼的重復(fù)利用率高等,因此C 語言編程在單片機(jī)系統(tǒng)設(shè)計(jì)中越來越廣泛的運(yùn)用。PIC 單片機(jī)的軟件開發(fā),同樣可以用C 語言實(shí)現(xiàn)。

Microchip 公司沒有自行開發(fā)PIC單片機(jī)的C 語言編譯器,但其他公司有開發(fā)眾多支持PIC 單片機(jī)的C 語言編譯器,常見的有Hitech、CCS、IAR、Bytecraft 等公司。其中最常用的是Hitech 公司的PICC 編譯器,它穩(wěn)定可靠,編譯生成的代碼效率高,在用PIC 單片機(jī)開發(fā)者中得到廣泛認(rèn)可。

Hitech-PICC 編譯器基本上符合ANSI C標(biāo)準(zhǔn),但是不支持函數(shù)的遞歸調(diào)用。其主要原因是因?yàn)镻IC 單片機(jī)特殊的堆棧結(jié)構(gòu)。PIC 單片機(jī)的堆棧是硬件實(shí)現(xiàn)的,其深度已隨芯片固定,無法實(shí)現(xiàn)需要大量堆棧操作的遞歸算法。  成的代碼效率高,在用PIC 單片機(jī)開發(fā)者中得到廣泛認(rèn)可。

2.MpLab中配置PIC C編譯環(huán)境,并進(jìn)行項(xiàng)目開發(fā)


為便于PICC編譯器的編譯環(huán)境設(shè)置,應(yīng)先在MPLAB IDE集成開發(fā)環(huán)境下創(chuàng)建一個(gè)PICC  C編譯器的項(xiàng)目。

1.啟動(dòng)MPLAB IDE7.00集成開發(fā)環(huán)境窗口。選擇集成開發(fā)環(huán)境中的Project->New菜單項(xiàng),打開如下所示的新項(xiàng)目對(duì)話框,在此對(duì)話框中設(shè)置項(xiàng)目名和項(xiàng)目路徑。


在項(xiàng)目名文本框中輸入項(xiàng)目名led,在項(xiàng)目路徑文本框中輸入項(xiàng)目路徑D:\led,也可以通過單擊Browse按鈕選擇項(xiàng)目名的保存路徑。

2.器件選擇,其操作過程如下所示。首先在MPLAB集成開發(fā)環(huán)境中打開Configure菜單,然后單擊Select Device菜單項(xiàng),彈出如下所示的器件選擇對(duì)話框。此處可以選擇PICl6F877A作為開發(fā)芯片。


3.設(shè)置項(xiàng)目

在創(chuàng)建項(xiàng)目和選定器件后,接下來就可以設(shè)置工程的編譯環(huán)境。首先進(jìn)行語言組件的設(shè)置。

在Active Toolsuite下拉列表框中選擇HI-TECH PICC Toolsuite作為開發(fā)工具組件,然后在Toolsuite Contents列表框中選擇PICCCompiler項(xiàng),如下圖所示。  


3.PICC基本編程


3.1 PICC 中的基本變量類型


PICC 支持的基本變量類型見下表:


3.2 PICC 中的高級(jí)變量


基于上表的基本變量,除了bit 型位變量外,PICC 完全支持?jǐn)?shù)組、結(jié)構(gòu)和聯(lián)合等復(fù)合型高級(jí)變量,這和標(biāo)準(zhǔn)的C 語言所支持的高級(jí)變量類型沒有什么區(qū)別。例如:

數(shù)組:

unsigned int data[10];

結(jié)構(gòu)體:

struct commInData {

unsigned char inBuff[8];

unsigned char getPtr, putPtr;

};

聯(lián)合體:

union int_Byte {

unsigned char c[2];

unsigned int i;

};

3.3 PICC 對(duì)數(shù)據(jù)寄存器bank 的管理


在PIC單片機(jī)編程時(shí),單片機(jī)數(shù)據(jù)寄存器的bank是由編程員管理的,因此在定義變量時(shí)必須決定這些變量具體放在哪一個(gè)bank 中,缺省時(shí),所定義的變量將被定位在bank0中,例如下面所定義的這些變量:

unsigned char buffer[32];

bit flag1,flag2;

float val[8];

以上變量都是分布在bank0 中。定義在其它bank 內(nèi)的變量前面必須加上相應(yīng)的bank 序號(hào),例如:

bank1 unsigned char buffer[32];  //變量定位在bank1 中

bank2 bit flag1,flag2;  //變量定位在bank2 中

bank3 float val[8];  //變量定位在bank3 中

3.4 volatile 修飾詞 


PICC 中還有一個(gè)特殊的變量修飾詞“volatile”,用來說明一個(gè)變量的值是會(huì)隨機(jī)變化的,即使程序沒有刻意對(duì)它進(jìn)行任何賦值操作。

在單片機(jī)中,作為輸入的IO 端口其內(nèi)容將是隨意變化的;很多特殊功能寄存器的值也將隨著指令的運(yùn)行而動(dòng)態(tài)改變。所有這種類型的變量必須將它們明確定義成“volatile”類型,例如:

volatile unsigned char STATUS @ 0x03;

volatile bit commFlag;

3.5 標(biāo)準(zhǔn)庫(kù)函數(shù)


PICC 提供了較完整的C 標(biāo)準(zhǔn)庫(kù)函數(shù)支持,其中包括數(shù)學(xué)運(yùn)算函數(shù)和字符串操作函數(shù)。在程序中使用這些現(xiàn)成的庫(kù)函數(shù)時(shí)需要注意的是入口參數(shù)必須在bank0 中。

如果需要用到數(shù)學(xué)函數(shù),則用 “#include ” 包含頭文件;如果要使用字符串操作函數(shù),就需要包含“#include ”頭文件。在這些頭文件中提供了函數(shù)類型的聲明。直接查看這些頭文件就可以知道PICC 提供了哪些標(biāo)準(zhǔn)庫(kù)函數(shù)。

C 語言中的格式化輸出函數(shù)“printf/sprintf”用在單片機(jī)的程序中時(shí)要特別謹(jǐn)慎。printf/sprintf 是一個(gè)非常大的函數(shù),一旦使用,你的程序代碼長(zhǎng)度就會(huì)增加很多。 

4.C和匯編混合編程


用C 語言進(jìn)行單片機(jī)應(yīng)用程序開發(fā)時(shí)經(jīng)常要使用匯編語句。比如,單片機(jī)的一些特殊指令操作在標(biāo)準(zhǔn)的C 語言語法中沒有直接對(duì)應(yīng)的描述,例如PIC 單片機(jī)的清看門狗指令“clrwdt”和休眠指令“sleep”。這樣,一個(gè)項(xiàng)目中就會(huì)出現(xiàn)C 和匯編混合編程的情形,我們?cè)诖擞懻撘恍┗旌暇幊痰幕痉椒ê图记伞?/p>

在C 原程序中直接嵌入?yún)R編指令是最直接最容易的方法。如果只需要嵌入少量幾條的匯編指令,PICC 提供了一個(gè)類似于函數(shù)的語句:

asm(“clrwdt”)  ;

雙引號(hào)中可以編寫任何一條PIC 的標(biāo)準(zhǔn)匯編指令。例如:

for (;;) {

asm("clrwdt"); //清看門狗

asm("sleep"); //休眠

asm(“nop”); //空操作延時(shí) 

 }

如果需要編寫一段連續(xù)的匯編指令,PICC 支持另一種語法描述:用“#asm”開始指令段,用“#endasm”結(jié)束。

例如下面的一段嵌入?yún)R編指令實(shí)現(xiàn)了將0x20~0x7F 間的RAM 全部清零:

#asm

      movlw 0x20

      movwf  _FSR

      clrf  _INDF

      incf _FSR, f

      btfss _FSR,7

      goto  $-3

#endasm


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 在线中文字幕网站 | 黄色片在线观看免费 | 自拍偷拍 欧美日韩 | 久久国产精品高清一区二区三区 | 久久精品国产2020 | 欧美成a人片免费看久久 | 五月天婷婷免费视频 | 亚洲天堂色 | 性生大片免费观看无遮挡 | 日日干狠狠操 | 国产玖玖 | 亚洲成人影院在线 | 成人欧美一区二区三区在线观看 | 三级伦理片高清在线观看播放 | 又粗又长又黄又爽视频 | 欧洲亚洲一区 | 欧美色碰碰碰免费观看长视频 | 日韩免费高清一级毛片在线 | 国产91在线chines看 | 亚洲一区二区成人 | 久久精品国产91久久麻豆自制 | 日日摸日日碰夜夜爽视频网站 | 天天操天天操天天干 | 欧美一区二区三区免费观看视频 | 亚洲另类老妇videos | 人成精品 | 国产日本在线播放 | 国产在线视频网 | 高清午夜看片a福利在线观看琪琪 | 蜜桃社尤物馆美女图片 | 一级视频免费观看 | 亚洲日本中文 | 黄色一级在线观看 | 91视频麻豆视频 | 欧美色第一页 | 日本波多野结衣字幕久久 | 欧美日韩天堂 | 日韩在线视频免费看 | 911精品国产亚洲日本美国韩国 | 色视频网站在线 | 色网综合 |