使用MCC進(jìn)行程序開發(fā)
前面介紹了在MPLAB X IDE中可以使用MCC(MPLAB Code ConConfigurator)進(jìn)行軟件快速開發(fā),下面我們就重點(diǎn)來(lái)試試這個(gè)功能,并用MCC快速實(shí)現(xiàn)一個(gè)呼吸燈程序。
要使用MCC(MPLAB Code ConConfigurator),首先需要安裝這個(gè)它。MCC不是一個(gè)獨(dú)立的軟件,它是做為MPLAB X IDE的插件使用的。在安裝MPLAB X IDE時(shí),是沒(méi)有附帶這個(gè)插件的,它需要我們自己安裝它。
安裝時(shí),先從MPLAB X IDE的Tool菜單下,找到Plugins(插件)子菜單,進(jìn)去后選擇Available Plugins(可用插件),就可以看到MPLAB Code Configurator了。選中它前面的選擇框,然后點(diǎn)擊左下角的Install,就可以自動(dòng)下載并安裝MCC了。

安裝后,需要重新啟動(dòng)一次MPLAB X IDE,才能正常使用MCC。在Tools菜單下的Embedded菜單下,我們就能夠看到MPLAB Code Configurator。

下面我們就用MCC創(chuàng)建一個(gè)呼吸燈程序(LED逐漸變亮,在逐漸變暗),體驗(yàn)一下MCC的強(qiáng)大功能。首先需要?jiǎng)?chuàng)建一個(gè)MPLAB X IDE項(xiàng)目,創(chuàng)建過(guò)程和其他項(xiàng)目沒(méi)有什么區(qū)別。

只是在仿真器這里,我們需要選擇開發(fā)板帶有的Starter Kits(PR08)。
創(chuàng)建后,先從Tools菜單下運(yùn)行MCC(MPLAB Code Configurator)。進(jìn)入MCC后,我們首先就要選擇需要用到的硬件模塊(Modules)。它在MPLAB X IDE軟件的左邊中間位置,鼠標(biāo)雙擊就可以將需要使用的模塊加入到項(xiàng)目。

為了實(shí)現(xiàn)呼吸燈功能,我們需要使用到PWM功能,改變PWM的占空比來(lái)調(diào)整LED的亮度。PIC16F1619有兩個(gè)PWM模塊:PWM3和PWM4,我們先添加PWM3模塊到項(xiàng)目中(如果添加PWM4就可以實(shí)現(xiàn)兩個(gè)呼吸燈)。

添加PWM3時(shí),會(huì)自動(dòng)添加TMR2模塊,因?yàn)镻WM功能需要使用到定時(shí)器,PIC16F1619有六個(gè)定時(shí)器,但是只有TMR2/TMR4/TMR6支持PWM功能,默認(rèn)是TMR2,也可以改用其他兩個(gè)定時(shí)器。
然后是分配PWM3使用的單片機(jī)GPIO。在MPLAB X IDE軟件的右上角,我們可以看到引腳管理功能。每個(gè)單片機(jī)功能模塊是一行,而每個(gè)GPIO是一列。如果一個(gè)GPIO支持某個(gè)單片機(jī)的功能,就會(huì)在對(duì)應(yīng)的交叉位置顯示一個(gè)鎖的圖標(biāo),沒(méi)有上鎖代表引腳可以分配,鎖住就代表已經(jīng)分配了。

在開發(fā)板的原理圖上,我們可以看到LED使用了RA1、RA2、RA5、RC5這4個(gè)引腳。在引腳管理功能中,可以看到PWM3支持這幾個(gè)GPIO,我們先選擇RA1,用鼠標(biāo)點(diǎn)擊PWM3和RA1交叉對(duì)應(yīng)的分配引腳后,就變?yōu)橄聢D所示,這就代表將RA1分配給了PWM3。

在MPLAB X IDE軟件的中間,按下Grenrate Code按鈕,自動(dòng)產(chǎn)生代碼。因?yàn)榍懊嫖覀冞沒(méi)有創(chuàng)建主程序,所以MCC還會(huì)提示是否需要?jiǎng)?chuàng)建main.c。

使用了PWM3,所以MCC會(huì)自動(dòng)創(chuàng)建PWM3.c和PWM3.h文件。PWM3.h中包含了PWM3模塊相關(guān)的接口函數(shù),我們可以看到有兩個(gè):
void PWM3_Initialize(void);
void PWM3_LoadDutyValue(uint16_t dutyValue);
一個(gè)是PWM3初始化,它會(huì)在MCC初始化函數(shù)中自動(dòng)調(diào)用。另外一個(gè)函數(shù)是PWM3_LoadDutyValue,它就是用來(lái)控制PWM3占空比的。

然后在main.c的主程序中,添加下面的代碼,實(shí)現(xiàn)呼吸燈的功能。
while (1) {
// Add your application code
duty = 0;
while(duty <= ( 1024-16))
{
__delay_ms(20);
duty += 16;
PWM3_LoadDutyValue(duty);
}
duty = 1024;
while(duty >= 16)