在 MPLAB IDE 软件中,PIC 开发是以项目为基础进行的。 您选择的芯片类型、程序源代码以及生成的文件都包含在项目中。 因此,我们将从建立一个新项目开始,直到所有开发工作完成。
2.4.1 建立开发项目
MPLAB IDE 软件安装完成后,桌面上会出现软件快捷方式图标。 由于PICC18编译器是挂接到MPLAB IDE软件中的,所以安装完PICC18软件后,其图标不会出现在桌面上。 MPLAB IDE 软件快捷方式图标如图 2-31 所示。
1) 双击桌面上的MPLAB IDE 软件快捷方式图标,打开MPLAB IDE 软件。 软件运行后,会出现两个窗口:一是工作区窗口(Untitled),二是输出窗口(Output),如图2-32所示。
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所示。
从以上步骤我们不难发现PICC18编译器已经链接到MPLAB IDE软件中,成为集成开发环境的一部分。 接下来我们就用它来写一个小程序,下载到最小系统板来点亮流水灯。 使用MPLAB IDE软件中的项目向导可以帮助我们快速、轻松地创建PIC项目。 具体方法如下:
1)在菜单栏的“Project”选项中,选择工程向导“Project Wizard…”,如图2-35所示。
2) 启动新建项目向导,在出现的对话框中单击“下一步”按钮,如图2-36所示。
3) 在“第一步:选择设备”对话框中选择微控制器型号。 这里我们选择“PIC18F4520”,如图2-37所示。
4) 在“第二步:选择语言工具套件”对话框中选择语言工具套件。 首先,在“活动工具套件”下拉列表中选择“HI-TECH 通用工具套件”。 在下面的“ToolSuite Contents”窗口中,会出现“HI-TECH ANSI C Compiler”,即HI-TECH标准C编译器。 其下方的“位置”栏中会出现路径“C:Program FilesHI-TECH SoftwarePICC-189.80binpicc18.exe”。 这说明我们之前安装的PICC18编译器已经成功连接到MPLAB IDE软件上,如图2-38所示。
如果我们只安装PICC编译器,这里的路径将显示为C:Program FilesHI-TECH SoftwarePICC9.80binpicc.exe。 选择语言工具后,单击“下一步”按钮。
5) 在“第三步:创建新项目,还是重新配置活动项目?”中创建新项目。 对话框。 首先,单击“创建新项目文件”文本框旁边的“浏览”按钮,如图2-39所示。
6) 在出现的窗口中定义存储项目的文件夹和项目名称。 在“保存于”下拉列表中选择工程存放的路径,在“文件名”中输入工程名称:LESSON2,单击“保存”按钮,如图2-40所示。
7) 定义完项目路径和名称后,您将返回到“第三步:创建新项目,还是重新配置活动项目?” 再次弹出窗口,单击“下一步”按钮,如图2-41所示。
8) 在“第四步:将现有文件添加到您的项目”对话框中,您可以将现有文件添加到您的项目中。 我们在这里不进行选择,只需单击“下一步”按钮即可构建它。 PIC工程已创建,如图2-42所示。
9) 单击“完成”按钮结束工程向导,如图2-43所示。
项目建立后,MPLAB IDE 软件工作区如图 2-44 所示。 此时的项目还只是一个粗略的框架,我们还需要在项目中添加C源文件。
2.4.2 新建源文件并添加到工程中
1)PIC工程创建完成后,点击“File→New”选项新建一个文件,在源文件第一行写入以下代码:
#include
第一行代码写入后的状态如图2-45所示。 这里需要注意的是,PIC10/12/16系列单片机的C语言程序包含的头文件是PIC.H,而PIC18系列单片机包含的头文件是PIC18.H。
2) 单击工具栏上的“保存”按钮保存该源文件。 源文件的保存路径必须与我们之前创建的工程文件的保存路径一致。 我们之前已经给新项目命名了。 接下来,我们将源文件命名为Lesson2.c。 注意,源文件名必须写成文件名加扩展名的形式,且扩展名必须是“.c”。 另外,需要勾选对话框中的“Add File To Project”选项,将源文件添加到项目中,点击“Save”按钮,源文件即可保存并自动添加到项目中,如图如图2-46所示。
这时我们会发现源文件中的#include会显示为蓝色,说明已经添加到工程中,并且C语言关键字#include已经被识别。
3) 如果需要,还可以设置文本的字体和大小。 右键单击我们输入的文本,在弹出的菜单中选择“属性”选项,如图2-47所示。
4) 在出现的对话框中选择“文本”选项卡,单击“选择字体”按钮,如图2-48所示。
5) 在出现的字体对话框中选择字体、字体样式和大小,单击“确定”保存设置,如图2-49所示。
6)完成字体设置后,源文件中的文字已经按照我们的要求重新设置并显示出来,如图2-50所示。
我们还注意到,在工作区的左侧,有一个如图2-51所示的窗口。
在工作区“LESSON2.mcw”窗口中,有以下项目:
1)Source Files:源程序列表,列出了本工程中用到的所有源程序文件。
2) 头文件:头文件列表,可以在其中添加源程序中使用的头文件。
3)Object Files:目标文件列表,可以在这里添加已经编译成目标代码的文件。
4)Library Files:库文件列表,可以在这里添加已有的库文件。
5) 其他文件:其他文件列表。
2.4.3 编写源代码
PIC驱动水灯电路如图2-52所示。 如果你觉得连接8个发光二极管有点复杂,也可以稍微简化一下电路。 像本书附录C所示的最小系统板电路,只需要连接RD0和RD1端口上的两个流水灯就足够了。
有了上面的准备,我们就可以专心编写C程序了。 该程序的目的是点亮由 PORTD 端口(RD0)最低位驱动的运行灯。 打开MPLAB IDE软件,使用New Project Wizard,创建一个名为LESSON2的新项目,并将名为lesson2.c的源文件添加到该项目中。 详细代码请参见代码清单2-1。
代码清单2-1 点亮流水灯
#include
__PROG_CONFIG(1,0xC100); //PIC的配置字1
__PROG_CONFIG(2,0x0A16); //PIC的配置字2
__PROG_CONFIG(3,0x8100); //PIC的配置字3
__PROG_CONFIG(4,0x0081); //PIC的配置字4
__PROG_CONFIG(5,0xC00F); //PIC的配置字5
__PROG_CONFIG(6,0xE00F); //PIC的配置字6
__PROG_CONFIG(7,0x400F); //PIC的配置字7
void main(void) //主函数
{
TRISD=0x00; //0000 0000, 将PORTD端口设为输出
TRISE=0xfe; //1111 1110, 将PORTE最低位设为输出
PORTD=0x01; //0000 0001, PORTD最低位输出1,点亮最低位流水灯
PORTE=0x01; //0000 0001, PORTE最低位输出1,驱动流水灯公共端
while(1); //主循环,让程序在此等候
}
接下来我们需要分析一下代码。 程序第一行是预处理命令,用于将另一个文件的内容复制到include命令的位置。 在程序第一行写入“#include”的目的是将头文件“PIC18.H”引入到该程序中。
头文件的作用是规范单片机各个寄存器的定义,方便大家使用。 “PIC18.H”是专为PIC18系列单片机设计的。 它位于PICC18编译器的安装目录中。 其默认位置为 C:Program FilesHI-TECH SoftwarePICC-189.80includePIC18.H。 关于头文件,这里就不讨论了。 许多叙述将在后面的专门章节中解释。
程序的第2行至第8行是PIC18单片机的配置字。 在应用PIC单片机时,需要对芯片的功能进行基本设置。 这种设置方法可以通过配置字来完成。 为了避免大家第一次接触PIC时感到困惑,我们也将配置字的解释留到后面的章节中。 现在你要做的就是根据代码表的内容将程序行写入你的程序中。 在源文件中。 编写配置字文本时需要注意的是,每个配置字的前面由两个连续的下划线“_ _”组成,中间不能有空格。
“…main(?)”是主函数。 我们知道C语言是模块化语言,程序的内容是由若干个具有特定功能的函数组成的。 main函数在结构上与其他函数相同,只不过它的函数名称为“main”,即主函数的意思。 源程序中只有一个主函数,无论主函数位于源程序中的哪个位置,程序都从这里开始执行。
“void”表示空,即函数的返回值为空,也就是说函数执行后不输出结果。 函数名“main”后面有一对括号“(?)”,括号内写有函数的输入(入口)参数。 如果括号为空或者写“void”,则表示该函数没有输入参数。
“main”函数的第二行以大括号“{?}”开头。 两个大括号括起来的部分是函数体,它是函数的主要部分,由多条C语句组成。 程序的每一行都以分号“;”结束。
代码写完后,就迫不及待地想看看执行后的效果。 好的,接下来要做的就是编译和烧写。
2.4.4 代码编译与编程
我们将鼠标悬停在工具栏中唯一的红色按钮上,下面会出现该按钮功能的提示:“Rebuild with Compiler for PIC18 MCUs (Lite Mode) V9.80”,意思是:用PICC18编译器重新编译(编译器工作在Lite Mode,版本9.80),点击这个红色按钮开始编译代码,如图2-53所示。
几秒钟后,代码编译将完成。 Output窗口中的Build选项卡会有单片机的内存占用情况以及编译成功的提示,如图2-54所示。
如果出现如下提示“构建失败!” 编译后出现如图2-55所示,则表示编译失败。 需要重新检查程序行的内容并再次编译,直到通过。
接下来我们将编译成功的文件烧录到单片机中,看看程序运行的效果。 首先将PICkit2编程器连接到电脑USB接口,并使用ICSP数据线连接PICkit 2编程器和最小系统板。 编程器与PC机和目标板的连接方法如图2-56所示。
依次点击菜单栏上的“Programmer→ Select Programmer→PICkit 2”,将编程器设置为PICkit 2,如图2-57所示。
设置编程器后,Output 窗口的 PICkit 2 选项卡中将出现 PICkit 2 编程器就绪提示,如图 2-58 所示。 此时,如果编程器没有连接到计算机,则该窗口中会出现错误信息。
PICkit 2 连接成功后,您会在工具栏上发现一组有趣的按钮,如图 2-59 所示。
下面介绍这些按钮的功能。
单击“Program the target device”按钮,将编译好的HEX文件烧写到我们的最小系统板中,如图2-60所示。
输出窗口中的 PICkit 2 选项卡将有一系列操作提示,供 PICkit 2 编程器擦除、编程和重新准备,如图 2-61 所示。
我们需要手动干预MCLR引脚并将其设置为高电平以将微控制器从复位状态释放。 这可以通过将目标器件的MCLR引脚电平设置为高电平(Bring target MCLR to Vdd)按钮来完成,即图2-62中箭头所指的按钮。
单击该按钮可释放目标单片机的复位状态。 该操作也会在输出窗口中提示,如图2-63所示。
激动人心的时刻终于到来了。 这时我们会发现最小的系统板上连接到RD0的LED灯已经点亮。 具体状态如图2-64所示。 当看到这盏自己亲手点亮的流水灯时,你是否有一种成就感呢? 是的,控制PIC就像控制家里的灯一样简单,从你点亮这盏流水灯的那一刻起,你就已经开始了。 继续努力,你就会成为一名优秀的单片机工程师。 快点!
2.4.5 PIC 入门编程示例
接下来,我们需要让RD0和RD1端口驱动的跑灯交替闪烁,间隔约为1秒。 为了方便,我们直接修改了lesson2.c的源文件内容,在程序中添加了延时功能。 具体代码参见代码清单2-2。
代码清单 2-2 交替闪烁水灯
#include
__PROG_CONFIG(1,0xC100); //PIC的配置字1
__PROG_CONFIG(2,0x0A16); //PIC的配置字2
__PROG_CONFIG(3,0x8100); //PIC的配置字3
__PROG_CONFIG(4,0x0081); //PIC的配置字4
__PROG_CONFIG(5,0xC00F); //PIC的配置字5
__PROG_CONFIG(6,0xE00F); //PIC的配置字6
__PROG_CONFIG(7,0x400F); //PIC的配置字7
void delay(unsigned int t); //延时函数声明
void main(void) //主函数
{
TRISD=0x00; //0000 0000, 将PORTD端口设为输出
TRISE=0xfe; //1111 1110, 将PORTE最低位设为输出
PORTE=0x01; //0000 0001, PORTE最低位输出1,驱动流水灯公共端
while(1) //主循环
{
PORTD=0x01; //0000 0001, PORTD最低位输出1,点亮最低位流水灯
delay(500);
PORTD=0x02; //0000 0010, PORTD次低位输出1,点亮次低位流水灯
delay(500);
}
}
void delay(unsigned int t) //延时函数
{
unsigned int x,y;
for(x=t;x>0;x--)
{
for(y=100;y>0;y--)
{
}
}
}
程序再次编译并编程到微控制器中。 运行后可以发现两个LED灯交替闪烁。 通过编写上面的两个小程序,你对学习PIC已经有了信心。 是的,单片机并不难学。 关键在于方法。 现在你有了一个很好的开始,接下来的学习也会同样容易。