天天看點

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

在mplab ide 軟體中,pic的開發是以項目為機關進行的。你選擇的晶片類型、程式源代碼、生成的檔案都包含在項目中。是以,我們要從建立一個新項目開始,直至完成所有的開發工作。

mplab ide軟體安裝完成後,桌面上會出現軟體的快捷方式圖示。由于picc18編譯器是挂接在mplab ide軟體内部的,是以picc18軟體安裝完成後其圖示不會出現在桌面上。mplab ide軟體快捷方式圖示如圖2-31所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

1)輕按兩下桌面上mplab ide軟體快捷方式圖示,打開mplab ide軟體。軟體運作後,會出現兩個視窗:一個是工作區視窗(untitled),另一個是輸出視窗(output),如圖2-32所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

2)點選菜單欄上的“project”選項,單擊“set language tool locations”選項,檢視picc18編譯器與malab ide軟體的挂接情況,如圖2-33所示。

3)在彈出的對話框中展開“hi-tech universal toolsuite”菜單,再展開“executables”菜單,單擊“hi-tech ansi c compiler”選項, 在下面的“location”一欄裡檢視語言工具的挂接情況,如圖2-34所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式
《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

從上面的步驟裡我們不難發現,picc18編譯器已經和mplab ide 軟體挂接在了一起,成為內建開發環境的一部分。接下來,我們要用它寫一個小程式,并将其下載下傳到最小系統闆中,進而點亮一個流水燈。使用mplab ide軟體裡的項目向導可以幫助我們快速友善地建立pic項目,具體方法如下:

1)在菜單欄的“project”選項裡,選擇項目向導“project wizard...”,如圖2-35所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

2)啟動建立項目向導,在出現的對話框裡點選“下一步”按鈕,如圖2-36所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

3)在“step one:select a device”對話框裡選擇單片機的型号。這裡我們選擇的是“pic18f4520”,如圖2-37所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

4)在“step two:select a language toolsuite”對話框裡選擇語言工具套件。首先在“active toolsuite” 下拉清單中選擇“hi-tech universal toolsuite”,在下面的“toolsuite contents”視窗中會出現“hi-tech ansi c compiler”,即hi-tech标準c編譯器,其下方的“location”欄裡會出現“c:program fileshi-tech softwarepicc-189.80binpicc18.exe”路徑。這說明我們前面安裝的picc18編譯器已經與mplab ide軟體挂接成功,如圖2-38所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

如果我們隻安裝了picc編譯器,這裡的路徑會顯示為c:program fileshi-tech softwarepicc9.80binpicc.exe。語言工具選好後,點選“下一步”按鈕。

5)在“step three:create a new project,or reconfigure the active project? ”對話框裡建立一個新的項目。首先在“create new project file ”文本框旁邊點選 “browse”按鈕,如圖2-39所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

6)在出現的視窗中定義存放項目的檔案夾和項目名稱。在“儲存在”下拉清單中選擇項目存放的路徑,在“檔案名”中輸入項目名稱:lesson2,并點選“儲存”按鈕,如圖2-40所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

7)項目路徑和名稱定義完成後,會再次回到“step three: create a new project,or reconfigure the active project?”視窗,點選“下一步”按鈕,如圖2-41所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

8)在“step four:add existing files to your project”對話框中,你可以添加已存在的檔案到你的項目中,這裡我們不做選擇,直接點選“下一步”按鈕,這樣我們就建好一個pic的項目了,如圖2-42所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

9)點選“完成”按鈕,結束項目向導,如圖2-43所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

建立好項目後,mplab ide軟體工作區如圖2-44所示。這時的項目還隻是一個大概的架構,我們還需要給項目添加一個c的源檔案。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

1)pic項目建立好後,依次單擊“file→new”選項建立一個新檔案,在源檔案的頭一行寫上如下代碼:

第一行代碼寫好後的狀态如圖2-45所示。這裡要注意的是,pic10/12/16系列的c語言程式包含的頭檔案是pic.h,而pic18系列的單片機包含的頭檔案則是pic18.h。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

2)點選工具欄上的“儲存”按鈕,儲存這個源檔案。源檔案儲存的路徑要和我們前面建立的項目檔案儲存的路徑一緻。前面我們已經為建立的項目命名,接下來将這個源檔案命名為lesson2.c。注意源檔案名稱要寫成檔案名加擴充名的形式,擴充名一定是“.c”。另外,要在對話框中勾選“add file to project”選項,将源檔案添加到項目中,點選“儲存”按鈕,源檔案即可儲存并自動添加到項目中,如圖2-46所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

這時我們會發現源檔案裡面的#include 會顯示為藍色,說明其已經加入到項目中,而且c語言的關鍵詞#include已經被識别了。

3)如果需要,你還可以設定文本的字型和大小,右擊我們輸入的文本,在彈出的菜單中選擇 “properties”選項,如圖2-47所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

4)在出現的對話框中選擇“text”頁籤,點選“select font”按鈕,如圖2-48所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

5)在出現的字型對話框中選擇字型、字形和大小,點選“确定”儲存設定,如圖2-49所示。

6)完成字型設定後,源檔案内的文字已經按我們的要求重新設定并顯示了,如圖2-50所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

我們還注意到,在工作區的左側,有視窗如圖2-51所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

在工作區“lesson2.mcw”視窗中,有以下幾項内容:

1)source files:源程式清單,列出了本項目用到的所有源程式檔案。

2)header files:頭檔案清單,可以在此添加源程式中用到的頭檔案。

3)object files:目标檔案清單,可以在此添加已經編譯成目标代碼的檔案。

4)library files:庫檔案清單,可以在此添加已有的庫檔案。

5)other files:其他檔案清單。

pic驅動流水燈的電路如圖2-52所示,如果覺得連接配接8個發光二極管有些複雜的話,你也可以對電路進行稍許簡化,像本書附錄c所示最小系統闆電路那樣,隻連接配接rd0和rd1端口的兩個流水燈即可。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

有了以上的準備,接下來我們就可以專心編寫c程式了。程式要實作的目的就是點亮由portd端口最低位(rd0)驅動的一個流水燈。打開mplab ide軟體,使用建立項目向導,建立一個項目命名為lesson2,并為這個項目添加名為lesson2.c的源檔案,詳細代碼見代碼清單2-1。

代碼清單2-1 點亮一個流水燈

接下來,我們要對代碼進行分析。程式的第1行是一條預處理指令,作用是把另外一個檔案的内容包含複制到本包含指令所在的位置。在程式的第一行寫入“#include”目的就是将“pic18.h”這個頭檔案引入到本程式中來。

頭檔案的作用是對單片機的各個寄存器進行規範化的定義,進而友善大家使用。“pic18.h”是專門針對pic18系列單片機而設計的,位于picc18編譯器的安裝目錄下,其預設的位置為 c:program fileshi-tech softwarepicc-189.80includepic18.h關于頭檔案,在此先不作過多的叙述,後面會用專門的章節來進行解讀。

程式的第2行至第8行是pic18單片機的配置字。pic單片機在應用時要對晶片的功能進行基本的設定,這種設定方式是可以通過配置字來完成的。為了不讓你在剛接觸到pic時被搞得一頭霧水,我們對配置字的解讀也放到後面的章節來進行,你現在要做的就是按照代碼清單的内容把程式行寫到你的源檔案中。書寫配置字文本時需要注意的是,每個配置字的最前面是由兩個連續的下杠“_ _”組成的,而且中間不能有空格。

“……main(?)”是主函數。我們知道,c語言是一個子產品化的語言,程式的内容是由若幹個具有特定功能的函數構成的。主函數和其他函數在結構上是一樣的,隻不過它的函數名稱是“main”,意為主函數。在一個源程式中有且僅有一個主函數,而且無論主函數位于源程式的什麼位置,程式都是從這裡開始執行。

“void”的意思是空,在這裡表示該函數的傳回值為空,也就是說,函數執行後是不輸出結果的。函數名“main”後面有一對圓括号“(?)”,括号裡面是書寫函數的輸入(入口)參數的。圓括号内是空的或寫着“void”,表示該函數無輸入參數。

“main”函數的第2行由花括号“{?}”開始,兩個花括号括起來的部分是函數體,它是函數的主體部分,由若幹個c語句構成。程式的每一行都以分号“;”結束。

代碼寫完後,你是不是迫不及待地想看看它執行後的效果。好,接下來要做的就是編譯和燒寫。

我們将滑鼠懸停在工具欄中唯一一個紅色的按鈕上,下面會有該按鈕功能的提示:“rebuild with compiler for pic18 mcus(lite mode)v9.80”,意思是:重新用picc18編譯器編譯(編譯器工作在lite mode,版本為9.80),點選這個紅色的按鈕,開始編譯代碼,如圖2-53所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

經過幾秒鐘的時間,代碼編譯即可完成,output視窗中build頁籤裡面會有單片機存儲器的占用情況以及編譯成功的提示,如圖2-54所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

如果在編譯後出現以下提示資訊“build failed!”如圖2-55所示,即表示編譯失敗,你需要重新檢查程式行的内容并再次進行編譯,直到通過為止。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

接下來,我們要把編譯成功的檔案燒寫到單片機中看一下程式運作的效果。首先将pickit2程式設計器連接配接至電腦usb接口,用icsp資料線連接配接pickit 2程式設計器和最小系統闆,程式設計器與pc及目标闆的連接配接方法如圖2-56所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

依次點選菜單欄上的“programmer→ select programmer→pickit 2”,将程式設計器設定為pickit 2,如圖2-57所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

程式設計器設定好後,output視窗中的pickit 2頁籤裡會出現pickit 2程式設計器準備好的提示,如圖2-58所示。此時,如果程式設計器沒有連接配接到電腦,則會有錯誤資訊在這個視窗中出現。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

pickit 2成功連接配接後,你會發現在工具欄上,多了一組有趣的按鈕,如圖2-59所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

下面分别介紹這些按鈕的功能。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

點選程式設計目标器件(program the target device)按鈕,即可将編譯生成的hex檔案燒寫到我們的最小系統闆中,如圖2-60所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

output視窗中的pickit 2頁籤裡會有pickit 2程式設計器的擦除、燒寫、重新準備好等一系列的動作提示,如圖2-61所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式
《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

我們需要人為幹預mclr引腳,将其置為高電平,使單片機解除複位狀态,這可以通過将目标器件的mclr引腳電平置高(bring target mclr to vdd)按鈕來完成,即圖2-62中箭頭所指按鈕。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

點選按鈕,解除目标單片機的複位狀态,這個動作在output視窗中同樣會有提示,如圖2-63所示。

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

激動人心的時刻終于到了,這時我們會發現最小系統闆上與rd0相連接配接的led燈已經點亮了,具體狀态如圖2-64所示。看到你親手點亮的這個流水燈,你是不是很有成就感呢?對,控制pic就像控制家裡的電燈一樣簡單,而且從你點亮這個流水燈開始,你已經入門了,繼續努力,你會成為一個優秀的單片機工程師,加油!

《我和PIC單片機:基于PIC18》——2.4 我的第一個PIC程式

接下來我們要讓rd0和rd1端口驅動的流水燈交替閃爍,間隔大約1秒鐘的時間。為了友善起見,我們直接對lesson2.c的源檔案内容進行修改,在程式中加入了延時函數,具體代碼見代碼清單2-2。

代碼清單2-2 交替閃爍的流水燈

程式經再次編譯後燒寫到單片機中,運作後即可發現兩個led燈交替閃爍。通過寫上面的兩個小程式,你是不是對學習pic已經有信心了。是的,單片機并不難學,關鍵在于方法,現在你已經有了非常好的開始,後面的學習也會同樣輕松。

繼續閱讀