《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > PIC單片機入門_C語言編程技術

PIC單片機入門_C語言編程技術

2018-07-31
來源:互聯網
關鍵詞: C語言 PIC單片機 編程

1.為什么也是C語言


用C 語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高等,因此C 語言編程在單片機系統設計中越來越廣泛的運用。PIC 單片機的軟件開發,同樣可以用C 語言實現。

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

Hitech-PICC 編譯器基本上符合ANSI C標準,但是不支持函數的遞歸調用。其主要原因是因為PIC 單片機特殊的堆棧結構。PIC 單片機的堆棧是硬件實現的,其深度已隨芯片固定,無法實現需要大量堆棧操作的遞歸算法。  成的代碼效率高,在用PIC 單片機開發者中得到廣泛認可。

2.MpLab中配置PIC C編譯環境,并進行項目開發


為便于PICC編譯器的編譯環境設置,應先在MPLAB IDE集成開發環境下創建一個PICC  C編譯器的項目。

1.啟動MPLAB IDE7.00集成開發環境窗口。選擇集成開發環境中的Project->New菜單項,打開如下所示的新項目對話框,在此對話框中設置項目名和項目路徑。


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

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


3.設置項目

在創建項目和選定器件后,接下來就可以設置工程的編譯環境。首先進行語言組件的設置。

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


3.PICC基本編程


3.1 PICC 中的基本變量類型


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


3.2 PICC 中的高級變量


基于上表的基本變量,除了bit 型位變量外,PICC 完全支持數組、結構和聯合等復合型高級變量,這和標準的C 語言所支持的高級變量類型沒有什么區別。例如:

數組:

unsigned int data[10];

結構體:

struct commInData {

unsigned char inBuff[8];

unsigned char getPtr, putPtr;

};

聯合體:

union int_Byte {

unsigned char c[2];

unsigned int i;

};

3.3 PICC 對數據寄存器bank 的管理


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

unsigned char buffer[32];

bit flag1,flag2;

float val[8];

以上變量都是分布在bank0 中。定義在其它bank 內的變量前面必須加上相應的bank 序號,例如:

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

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

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

3.4 volatile 修飾詞 


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

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

volatile unsigned char STATUS @ 0x03;

volatile bit commFlag;

3.5 標準庫函數


PICC 提供了較完整的C 標準庫函數支持,其中包括數學運算函數和字符串操作函數。在程序中使用這些現成的庫函數時需要注意的是入口參數必須在bank0 中。

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

C 語言中的格式化輸出函數“printf/sprintf”用在單片機的程序中時要特別謹慎。printf/sprintf 是一個非常大的函數,一旦使用,你的程序代碼長度就會增加很多。 

4.C和匯編混合編程


用C 語言進行單片機應用程序開發時經常要使用匯編語句。比如,單片機的一些特殊指令操作在標準的C 語言語法中沒有直接對應的描述,例如PIC 單片機的清看門狗指令“clrwdt”和休眠指令“sleep”。這樣,一個項目中就會出現C 和匯編混合編程的情形,我們在此討論一些混合編程的基本方法和技巧。

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

asm(“clrwdt”)  ;

雙引號中可以編寫任何一條PIC 的標準匯編指令。例如:

for (;;) {

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

asm("sleep"); //休眠

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

 }

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

例如下面的一段嵌入匯編指令實現了將0x20~0x7F 間的RAM 全部清零:

#asm

      movlw 0x20

      movwf  _FSR

      clrf  _INDF

      incf _FSR, f

      btfss _FSR,7

      goto  $-3

#endasm


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲精选成人| 国产欧美亚洲日本| 亚洲精品小视频| 一区二区三区欧美| 欧美精品久久99| 日韩天堂在线视频| 一区二区三区国产精品| 国产精品每日更新| 久久成人资源| 欧美激情a∨在线视频播放| 亚洲美女性视频| 久久精品亚洲乱码伦伦中文| 国产在线乱码一区二区三区| 亚洲日本中文字幕免费在线不卡| 美女视频黄免费的久久| 日韩视频免费| 欧美一区二区在线视频| 黄色亚洲大片免费在线观看| 日韩性生活视频| 国产一区二区丝袜高跟鞋图片| 亚洲福利视频网站| 欧美视频专区一二在线观看| 久久国产主播| 国产精品少妇自拍| 欧美综合国产| 国产精品大全| 亚洲人成在线影院| 国内在线观看一区二区三区| 一区二区三区四区蜜桃| 黄网动漫久久久| 欧美一级在线视频| 亚洲色无码播放| 欧美成人免费小视频| 亚洲无限av看| 国产精品porn| 亚洲天堂男人| 在线不卡中文字幕播放| 欧美在线视频日韩| 亚洲国产一区二区三区青草影视| 欧美与黑人午夜性猛交久久久| 亚洲精品视频免费观看| 欧美人与禽猛交乱配视频| 亚洲欧美视频一区| 一区二区三区成人| 欧美视频一区在线| 一个色综合av| 亚洲日本免费电影| 欧美成人午夜免费视在线看片| 性欧美办公室18xxxxhd| 国产精品日韩在线| 欧美日本国产一区| 欧美一区二区三区免费看| 亚洲一区二区毛片| 国产精品亚洲一区| 一级日韩一区在线观看| 在线午夜精品自拍| 欧美丝袜一区二区三区| 一本大道久久a久久综合婷婷| 一区二区成人精品| 国产欧美一区二区精品忘忧草 | 欧美激情免费在线| 制服丝袜激情欧洲亚洲| 亚洲欧美成人在线| 激情六月综合| 欧美不卡福利| 久久久噜噜噜久久久| 午夜一级久久| 狠狠色丁香久久婷婷综合丁香| 免播放器亚洲一区| 亚洲永久网站| 亚洲国产aⅴ天堂久久| 9久re热视频在线精品| 在线观看精品| 国产精品毛片va一区二区三区| 久久精品国产综合| 欧美中文字幕视频在线观看| 久久精品视频播放| 日韩一级精品视频在线观看| 国产一区二区av| 欧美日韩精品免费观看视频完整| 亚洲网站在线播放| 亚洲国产成人高清精品| 最新日韩中文字幕| 国产亚洲欧美一级| 欧美三区视频| 久久综合狠狠综合久久激情| 一区二区三区四区精品| 欧美有码在线视频| 99精品黄色片免费大全| 国产一区自拍视频| 国产精品入口福利| 久久国产黑丝| 一本色道久久综合一区| 一本久久综合| 亚洲一卡久久| 欧美呦呦网站| 久久综合一区二区| 欧美激情偷拍| 国产精品99免费看| 国产女精品视频网站免费| 国产一区视频网站| 久久久久久久综合狠狠综合| 久久亚洲私人国产精品va| 欧美.www| 国产精品视频999| 在线观看中文字幕不卡| 亚洲性图久久| 亚洲视屏在线播放| 国产情侣一区| 欧美日韩美女| 欧美一区二区三区久久精品| 欧美一区二区三区在线观看视频| 亚洲美女精品成人在线视频| 国产欧美日韩视频在线观看| 国内自拍视频一区二区三区| 欧美日韩一区二区精品| 午夜精品在线| 亚洲欧美三级在线| 午夜宅男久久久| 美国成人直播| 欧美视频免费| 欧美视频中文字幕在线| 国产精品久久久久久模特| 国产欧美视频在线观看| 在线欧美亚洲| 亚洲欧美在线另类| 亚洲欧美一区二区三区在线| 久久精品在线观看| 美女精品在线观看| 国产日韩精品一区二区| 亚洲国产另类久久精品| 最新国产拍偷乱拍精品| 午夜影院日韩| 欧美另类高清视频在线| 国产日韩1区| 亚洲视频中文| 亚洲欧洲精品天堂一级| 午夜精品久久久久久久久| 欧美福利视频| 亚洲电影在线| 亚洲免费观看在线观看| 久久精品国产视频| 国产精品色在线| 亚洲一区国产视频| 亚洲欧美一区二区视频| 欧美极品在线视频| 国产综合精品| 欧美一级夜夜爽| 久久久久免费| 在线观看一区二区视频| 亚洲一区久久| 亚洲性感美女99在线| 欧美日韩一区二区三区免费看| 日韩视频精品在线观看| 亚洲日本国产| 你懂的成人av| 亚洲精品视频在线观看网站| 99精品福利视频| 国产精品拍天天在线| 亚洲香蕉在线观看| 欧美在线网址| 在线日韩av永久免费观看| 亚洲美女视频在线观看| 欧美不卡视频| 亚洲国产欧美精品| 中文亚洲免费| 国产一区二区成人| 亚洲图片欧美日产| 国产精品你懂的在线| 亚洲欧美日韩久久精品| 久久综合久久88| 午夜精品影院| 久久久久青草大香线综合精品| 亚洲二区在线视频| 亚洲欧美中文字幕| 亚洲欧洲另类| 亚洲桃色在线一区| 国产女优一区| 亚洲精品在线观看免费| 国产精品日韩高清| 久久激情五月激情| 欧美日本高清视频| 欧美一级在线视频| 欧美日韩和欧美的一区二区| 欧美影院成年免费版| 欧美黑人多人双交| 午夜视频久久久| 欧美精品一区二区三区视频 | 老司机午夜精品| 亚洲国产精品999| 欧美一区二区| 99国产精品久久久久久久| 欧美成人性生活| 欧美一区二区三区播放老司机| 欧美韩日视频| 亚洲欧洲三级电影| 狠狠干综合网| 欧美一区1区三区3区公司| 日韩网站在线| 欧美激情精品久久久久|