2023年11月26日发(作者:)

MCS51 单片机中的 Keil 编程开发软件一样,我们做项目开发,MPLAB IDE软件也是以工程为单位,即

我们得为咱们的源程序创建工程文件,再进行配置,载入相应的源程序文件。下面,我们来一起看一下,

PIC中,如何创建我们的第一个工程。

一、启动 MPLAB IDE

用以下任何一种方法启动该软件:

A.选择 (不同版本的MPLAB IDE软件可能

Start>Programs>Microchip>MPLAB IDE 7.41>MPLAB IDE

路径名称会略有不同。)

B.双击桌面上的MPLAB IDE 图标。

二、 创建源文件

1.选择(文件)(新建),出现一个文本编辑窗口,在该窗口中输入以下汇编语言源程序:

File>new

2.先创建文件夹D:myprj,然后将上面输入的源程序保存该文件夹,注意文件的扩展名为asm,这里我们

将它保存为

文件保存后,我们发现源程序编辑窗口中的程序被着上了各种颜色,这些颜色能帮助我们更好地阅读源程

序,快速发现输入有误的指令:

三、创建项目

项目是将文件组织起来以便进行编译和汇编的方式。 选择项目)(新建)出现New Project

Project>new

(新项目)对话框:

New Project(新项目)对话框中,我们将这个示例项目命名为MyPrj,使用Browse 按钮,将项目

放在名为D:myprj的文件夹中。单击OK按钮,MPLAB IDE 界面上我们会看到已创建项目的的项目窗口,

如下图:

如果项目窗口未打开,请选择

View>Project

四、给项目节点添加文件

源文件是必须添加的。其他文件,如头文件、库文件、链接描述文件,视项目的具体情况可加可不加。

在本实例中,只添加一个源文件,在左边的项目窗口中找到Source Files节点,在其上点鼠标

右键,在弹出的快捷菜单中选Add Files

双击要添加的文件,或单击要添加的文件,然后点“打开”按纽:

文件添加成功后的项目窗口如下,Source Files节点下已经添加了文件

五、 选择器件

1.选择

Configure>Select Device

2.在Select Device 对话框中,点device栏右边的下拉箭头,选择器件为16F877A 注意一定要后

面有A的!(提醒:16F877A16F877是两个内部结构和功能不同的芯片, 两个芯片不能直接相互替换,

所以千万不要误选成16F877!),在Microchip Programmer Tool Support 部分中, MPLAB ICD 2 旁边

的“灯”图标应为绿色。

说明:MPLAB ICD 2 支持的器件会在Microchip Programmer Tool Support MPLAB ICD 2 旁边有一

个“绿灯”图标。不支持的器件则有一个“红灯”图标。而“黄灯”图标 表明可以选择这个器件,但可能

有某些限制,可能不适于量产,但它可以让MPLAB ICD 2 做试用。

3.点击OK

六、设置配置位

设置要烧写到器件中的配置位,选择通过点击 Settings栏中的文本,

Configure>ConfigurationBits

可以更改这些配置位

对于本演示实例,应该在这个对话框中设置这些配置位如下:

Oscillatot 振荡方式选择,由于增强型PIC实验板使用的是4MHz晶振,因此选XT,也可以选HS

Watchdog Timer 看门狗使能位,本实例未使用看门狗,因此设置为off

Power Up Timer 上电廷时使能位,一般选择为 on 有利于芯片起振,也可以选off

Brown Out Detect 掉电检测使能位,ICD2作调试工具时一定要选择为 off

Low Voltage Program 低压编程使能,必须选择为 off

Flash Program Write FLASH 使能,选择为Write Protection off(写保护关闭) Data EE Read

Protect 读内部 EEPROM 保护位, ICD2 作调试工具时一定要选择为 off

Code Protect 加密位, ICD2 作调试工具时一定要选择为 off

七、 选择 ICD 2 作为调试器

1.选择Debugger 菜单会显示可用的其它调试选项。同时,Output

Debugger>Select Tool>MPLAB ICD 2

窗口会打开显示连接信息。

注意:ICD2 作为调试工具时所烧写的程序只能用于仿真调试,不能够脱机使用,若要烧写能脱机使用程序,

就要选择Programmerr>Select Programmer>MPLAB ICD2 MPLABICD2作为编程工具。

八、通过向导完成调试器的设置

1.选择 ,启动 ICD2 调试器设置向导:

Debugger>MPLAB ICD2 Setup Wizard

2.选择 USB COM 端口/波特率。因为我们使用的“ICD2 PIC仿真烧写器”为USB接口,COM串口

数据传输太慢,难以忍受。因此,通信端口选 USB 即可:

3.确定是否由 ICD2 PIC仿真烧写器” 对实验板供电。本演示实例由 ICD2 PIC仿真烧写器”

实验板供电,因此选中“Power target from the MPLAB ICD2”:

4.自动连接前面最好打上钩,这样不用手动连接,比较方便:

5.自动下载 OS(操作系统)前面最好打上钩,这样不用手动下载 OS(操作系统), 比较方便:

6.完成:

九、 建立 PC 与“ICD2 PIC仿真烧写器” 之间的通讯连接

手动连接:选择连接到MPLAB ICD 2

Debugger>Connect

自动连接:如果ICD 2设置中选择了选择“Automatically connect at startup”,那么系统会自动

连接,输出窗口提示“„Connected,并且没有出现红色的警告或错误信息,表示已经正常连接:

十、 更新 ICD 2 固件(操作系统)

由于不同型号的单片机使用不同的ICD2 固件,当切换到一个不同型号的单片机时,会出现一条消息

提示固件需要更新。MPLAB IDE 会自动安装新固件。

更新对话框如下图所示:

特殊情况下,固件也可以按照以下步骤手动更新:

1.选择Select ICD 2 Firmware File 对话框会打开。

Debugger>Download ICD2 Operating System

2.从列表中选择或者浏览需要下载的固件。文件名形式为,其中 xxxxxx 为版本号。

3.点击OpenMPLAB IDE 会把新的操作系统下载到MPLAB ICD 2中。 注意:如果您始终用同一种型

号的芯片,除第一次外不会弹出更新固件对话框,如果没有弹出更新固件对话框,通常无需手动更新,可

以跳过这一步骤。

十一、 为调试生成目标文件(也就是我们通常说的“编译”)

注意:为调试生成目标文件(.HEX 文件)之前,必须已经选择ICD 2 作为调试器!!!

选择或在项目窗口中的项目名称上点击右键,并从弹出菜单中 选择Build All

Project>Build All

MPASM 汇编器总会生成文件名与源文件(.asm 文件)名相同的目标文件(.hex 文件)。编译时会打开

一个状态窗口,显示编译的进度和最后的结果。编译完成后自动关 闭该窗口。 同时还将打开Output

口,Output 窗口没有出现红色警告或错误信息, 而且最后一句显示“BUILD SUCCEEDED”,就表示编译成

功了:

如果编译失败,请检查以下各项,然后重新编译项目:

1.检查在编辑器窗口中输入的所有代码的拼写和格式。如果在Output 窗口中报告有错,双击该错误

就会在源代码窗口左侧的灰色区域中以绿色箭头指出源代码中出错的行。

2.检查用于该项目及其项目文件的语言工具是否正确。

为初学者解释几个概念:.

.asm 文件是我们用汇编语言(一种类似英语缩写的语言)写的源程序,但单片 机无法识别和运行源

程序,单片机只能看懂由01组成的机器码,因此这里需要一个 “翻译”的过程,称为“编译”或“汇

编”,编译的作用就是把单片机无法识别的汇编源程序翻译成单片机能识别的机器码,由于机器码是最终

在单片机上运行的代码,因此也称为目标代码,其后缀是.hex

另外,整个“翻译”的过程是由一个小小的工具软件完成的,它就是MPLAB IDE 自带的MPASM汇编器。

当您选择Project>Build All的时候,系统会自动调用MPASM汇编器,自动完成整个编译过程。

十二、 为调试烧写目标代码

在调试之前,必须把目标代码烧写到目标单片机中。选择,把目标文件

Debugger>Program

(目标文件中包括的就是目标代码)烧写到实验板上的PIC16F877A中。烧写可能需要几分钟时间。在烧写

过程中, Output 对话框的MPLAB ICD 2 选项卡下会显示目前的操作阶段。Output 窗口没有出现红色的

警告或错误信息,而且 倒数第3句显示“„Programming succeeded”,就表示烧写成功了:

提醒:进入调试模式的一个必要条件是,开发板或您的应用系统已经加了晶振。如编程器模式下烧写

没问题,但调试器模式下烧写不成功,通常是开发板或您的应用系统忘了装上晶振! 注意:初学者容易将

Debugger(调试器)下拉菜单下的Program(编程)命令和 Programmer(编程器)下拉菜单下的Program(编

程)命令混为一谈,其实这是两个作用完全不同的命令,切记:在调试器模式下,必须使用调试器下拉菜

单下的Program 命令,同样,在编程器模式下,必须使用编程器下拉菜单下的Program命令!!!同

也不要以为:在编程器模式下已经执行“Program”命令了,因此切换到调试器模 式时,就可以不用执行

了调试器模式下的“Program”命令了,这是大错特错的,反 之也是一样。

Debugger(调试器)下拉菜单下和Programmer(编程器)下拉菜单下还有许多命令字面上一样,但实际

功能是不一样的,注意不要混淆! 进一步的解释,初学者可以跳过不读:

执行Debugger(调试器)下拉菜单下的Program(编程)命令时,系统会自动在用户编写程序的目标代

码中加入调试执行代码,调试执行代码会自动烧写到程序存储器的高端地址,以便用“ICD2 PIC仿真烧写

器”来进行调试。执行Programmer(编程器)下拉菜单下的Program(编程)命令时,只将用户编写程序

的目标代码烧写到程序存储器中,和一般单片机的编程性质完全一致,由此可见,这两个编程命令的作用

是完全不同的。

十三、在调试器模式下运行 exam1 进入调试模式后,工具栏会多出调试器快捷工具条,见下图:

从左到右分别是

1run –全速运行

2halt –暂停

3animate –自动单步(或称为慢速运行)

4step into –单步运行(子程序内部也单步运行)

5step over --单步运行(子程序内部代码被全速执行,整个子程序被作为单步运 行中的一步来执

行的)

6step out --跳出子循环(当程序运行在子程序中时,可以使用它直接运行完该子程序)

7reset –复位

MPLAB ICD 2 在调试器模式下可以实时或单步执行代码,实时执行代码又称“全速运行”,当然调试

器模式下的“全速运行”与单片机脱离开发系统独立运行时 的“全速运行”还是有区别的,单步执行代码

又称“单步运行”。

我们首先执行调试器模式下的“全速运行”。 选择(或点击Run 工具栏按钮)。

Debugger>Run

如果我们编写的程序没有错误,我们将在开发板上看到8LED显示8位二进制递增数。但遗憾的是,

8LED上面什么也没有显示,程序没有按我们的要求运行,说明 程序有错误,不必担心,利用调试器模

式下的单步运行、变量观察窗口、断点等调试手段可以查找出任何错误。

先选择(或点击Halt 工具栏按钮)来中止程序执行。

Debugger>Halt

十四、 调试 exam1

1.我们首先在把累加值输出到LED的那一行设置断点。在需要设置断点的语句上双击, 这一行的行

首就出现如下图所示的断点标记了(红色的B 停止标记)

2.打开一个新的Watch 窗口,来观察随着程序的执行输出端口(PORTD)寄存器值的变化。选择

View>Watch

Add SFR 按钮旁边的列表中选择PORTD”,再点击这个按钮,PORTD加到了Watch窗口中,

如下图所示:

3现在我们调整源程序窗口和观察窗口的大小,使它们同时可见,这样便于观察源程序的执行和被观

察寄存器数据的变化:

4.选择(或者点击Run 工具栏按钮),再次全速运行程序。当程序执行到被标记断点

Debugger>Run

的行时,程序会中止执行,绿色箭头停在源代码窗口第24行“GOTO LOOP”,表示下一条将被执行的指令

是“GOTO LOOP”:

5.此时我们观察观察窗口,PORTD的内容是0X00(就是16进制00)。

6.再选择(或者点击Run 工具栏按钮),再次全速运行程序。当程序执行到被标记断

Debugger>Run

点的行时,程序同样又中止执行。我们再观察观察窗口,PORTD 的内容怎么还是0X00,应该是0X01才对

呀,显然PORTD端口没有执行加1操作,仔细观察第23行语句INCF PORTE原来在输入的时候将PORTD

错输成了PORTE

7.将第23行语句修改为“INCF PORTD”,同时在该语句上双击左键,去消该 语句上设置的断点。

8.选择,保存修改。

File>Save

9.选择,重新编译项目。

Project>Build All

10.选择,重新烧写修改过的程序。

Debugger>Program

提醒:源程序每次修改后都必须执行“保存”、“编译”、“烧写”这三个步骤!

11.选择(或者点击Run 工具栏按钮),全速运行程序。此时8LED 已经显示正常

Debugger>Run

了。 本演示实例中的源代码只包含一个非常简单的错误,调试时没有使用“单步执行”。单步执行是一种

很常用的调试手段,适合于排除流程故障(程序未按照预设的流程运行)。选择(或者点

Debugger>Step

Step 工具栏按钮)来单步执行程序。 建议使用工具栏按钮,当您不断点击Step 工具栏按钮时,语句

就会随着您的点击一 条一条地运行,绿色箭头不断地移动,时时指向下一条将被执行的指令。

许多时候,程序的调试会比编写花费更多的时间和精力。一段实际的代码可能包 含有很多的错误,

除这些错误,不仅需要必要的调试技巧,同时也要求程序员有良好的心理素质,尤其是初学者,遇到错误

不要惊慌,编程出现错误实在是一件很正常的事,要坚信任何错误都是可以排除的,充分利用“ICD2 PIC

仿真烧写器”和MPLAB IDE 的调试功能, 您完全可以成功地定位和修复其代码中存在的错误。如果错误

很多,宜采用“缩小包 围圈”的排错策略,逐步排除错误。

十五、 在编程器模式下烧写目标代码

当程序成功调试并运行后,下一步是在编程器模式下烧写PIC单片机,以便它能脱离开发系统独立工

作。进行这一步时,为ICD 保留的资源被释放。(这句话,初学者可以不用去管它)

按照以下步骤进行烧写:

1.选择,禁止MPLAB ICD 2 作为调试器。

Debugger>Select Tool>none

2.在菜单中,选择MPLAB ICD 2作为编程器。

Programmer>Select Tool

3.选择,通过向导完成编程器的设置。

Programmer>MPLAB ICD2 Setup Wizard

4.选择

Programmer>Program

当用户使用MPLAB IDE中的编程器模式时,编程(也称烧写)完成后,实验板处于停止运行状态,点

programmer菜单下的Release from reset命令增强型PIC实验板才会进入运行状态。用户要想让增强型

PIC实验板复位,采取的操作是先点programmer菜单下的hold in reset 命令,后点Release from reset

即完成一次复位。 注意:现在增强型PIC实验板是独立运行的,“ICD2 PIC仿真烧写器”只是为实验板

供电。当然增强型PIC实验板也可以不由“ICD2 PIC仿真烧写器”供电,改由自己的外接电源供电。

十六、文件保存

开发工作中途及完成后,要及时进行文件的保存,可以选择File>Save Workspace,保存为工作空间

文件或选择Project>Save Project,保存项目文件。

下面对这两种文件类型及其区别进行说明:

Project(项目文件) 包括了编译所需的源文件、连接文件、头文件„„ 及这些文件间的组织结构,同时还

包括了芯片设置、配置位设置等。

Workspace(工作空间文件) 在项目文件包含的内容基础上,还进一步 包含了调试器或编程器的选择,

打开的窗口等。

简单地说:项目文件就是程序员辛辛苦苦做出来的“产品”,工作空间 文件比项目文件多包括了一些

内容,多包括的内容其实就是做“产品” 过程中用到的各种工具,例如当前您正在调试程序,为此选择了

ICD2 PIC仿真烧写器”,还打开了变量观察窗口,这些在工作空间文件中也会被保存。

如果您的项目还没有最终完成,那么在保存时应该保存为工作空间文件类型,下一次打开时,应该打

开这个项目文件,这样出现在您面前的一 切和您上次看到的一模一样,您可以方便地继续您未完成的工作