.
和 MCS51 单片机中的 Keil 编程开发软件一样,我们做项目开发,MPLAB IDE软件也是以工程为单位,即我们得为咱们的源程序创立工程文件,再进展配置,载入相应的源程序文件。下面,我们来一起看一下,在PIC中,如何创立我们的第一个工程。
一、启动 MPLAB IDE
用以下任何一种方法启动该软件:
A.选择Start>Programs>Microchip>MPLAB IDE 7.41>MPLAB IDE。 (不同版本的MPLAB IDE软件可能路径名称会略有不同。)
B.双击桌面上的MPLAB IDE 图标。
二、 创立源文件
1 / 25
.
1.选择File〔文件〕>new…〔新建〕,出现一个文本编辑窗口,在该窗口中输入以下汇编语言源程序:
2.先创立文件夹D:\\myprj,然后将上面输入的源程序保存该文件夹,注意文件的扩展名为asm,这里我们将它保存为exam1.asm:
2 / 25
.
文件保存后,我们发现源程序编辑窗口中的程序被着上了各种颜色,这些颜色能帮助我们更好地阅读源程序,快速发现输入有误的指令:
3 / 25
.
三、创立项目
项目是将文件组织起来以便进展编译和汇编的方式。 选择Project〔项目〕>new…〔新建〕,出现New Project〔新项目〕对话框:
在
New Project〔新项目〕对话框中,我们将这个示例项目命名为MyPrj,使用Browse 按钮,将项目放在名为D:\\myprj的文件夹中。单击OK按钮,在MPLAB IDE 界面上我们会看到已创立项目的的项目窗口,如下列图:
如果项目窗口未翻开,请选择View>Project。
4 / 25
.
四、给项目节点添加文件
源文件是必须添加的。其他文件,如头文件、库文件、描述文件,视项目的具体情况可加可不加。在本实例中,只添加一个源文件exam1.asm,在左边的项目窗口中找到Source Files节点,在其上点鼠标右键,在弹出的快捷菜单中选Add Files。
双击要添加的文件exam1.asm,或单击要添加的文件exam1.asm,然后点“翻开〞按纽:
5 / 25
.
文件添加成功后的项目窗口如下,Source Files节点下已经添加了文件 exam1.asm
五、 选择器件
6 / 25
.
1.选择Configure>Select Device。
2.在Select Device 对话框中,点device栏右边的下拉箭头,选择器件为16F877A, 注意一定要后面有A的!〔提醒:16F877A与16F877是两个部结构和功能不同的芯片, 两个芯片不能直接相互替换,所以千万不要误选成16F877!〕,在Microchip Programmer Tool Support 局部中, MPLAB ICD 2 旁边的“灯〞图标应为绿色。
说明:MPLAB ICD 2 支持的器件会在Microchip Programmer Tool Support 下MPLAB ICD 2 旁边有一个“绿灯〞图标。不支持的器件那么有一个“红灯〞图标。而“黄灯〞图标 说明可以选择这个器件,但可能有某些,可能不适于量产,但它可以让MPLAB ICD 2 做试用。
3.点击OK。
六、设置配置位
7 / 25
.
设置要烧写到器件中的配置位,选择Configure>ConfigurationBits。通过点击 “Settings〞栏中的文本,可以更改这些配置位
对于本演示实例,应该在这个对话框中设置这些配置位如下:
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!
8 / 25
.
Code Protect 加密位, 用 ICD2 作调试工具时一定要选择为 off!
七、 选择 ICD 2 作为调试器
1.选择Debugger>Select Tool>MPLAB ICD 2。Debugger 菜单会显示可用的其它调试选项。同时,Output 窗口会翻开显示连接信息。
注意:ICD2 作为调试工具时所烧写的程序只能用于仿真调试,不能够脱机使用,假设要烧写能脱机使用程序,就要选择Programmerr>Select Programmer>MPLAB ICD2将 MPLABICD2作为编程工具。
八、通过向导完成调试器的设置
1.选择 Debugger>MPLAB ICD2 Setup Wizard…,启动 ICD2 调试器设置向导:
9 / 25
.
2.选择 USB 或 COM 端口/波特率。因为我们使用的“ICD2 PIC仿真烧写器〞为USB接口,COM串口数据传输太慢,难以忍受。因此,通信端口选 USB 即可:
10 / 25
.
3.确定是否由 “ICD2 PIC仿真烧写器〞 对实验板供电。本演示实例由 “ICD2 PIC仿真烧写器〞 向实验板供电,因此选中“Power target from the MPLAB ICD2〞:
4.自动连接前面最好打上钩,这样不用手动连接,比拟方便:
11 / 25
.
5.自动下载 OS〔操作系统〕前面最好打上钩,这样不用手动下载 OS〔操作系统〕, 比拟方便:
6.完成:
12 / 25
.
九、 建立 PC 与“ICD2 PIC仿真烧写器〞 之间的通讯连接
手动连接:选择Debugger>Connect 连接到MPLAB ICD 2。
自动连接:如果ICD 2设置中选择了选择“Automatically connect at startup〞,那么系统会自动连接,输出窗口提示“…Connected〞,并且没有出现红色的警告或错误信息,表示已经正常连接:
13 / 25
.
十、 更新 ICD 2 固件〔操作系统〕
由于不同型号的单片机使用不同的ICD2 固件,当切换到一个不同型号的单片机时,会出现一条消息提示固件需要更新。MPLAB IDE 会自动安装新固件。
更新对话框如下列图所示:
14 / 25
.
特殊情况下,固件也可以按照以下步骤手动更新:
1.选择Debugger>Download ICD2 Operating System。Select ICD 2 Firmware File 对话框会翻开。
2.从列表中选择或者浏览需要下载的固件。文件名形式为icdxxxxxx.hex,其中 xxxxxx 为版本号。
3.点击Open。MPLAB IDE 会把新的操作系统下载到MPLAB ICD 2中。 注意:如果您始终用同一种型号的芯片,除第一次外不会弹出更新固件对话框,如果没有弹出更新固件对话框,通常无需手动更新,可以跳过这一步骤。
十一、 为调试生成目标文件〔也就是我们通常说的“编译〞〕
注意:为调试生成目标文件〔.HEX 文件〕之前,必须已经选择ICD 2 作为调试器!!!
选择Project>Build All 或在项目窗口中的项目名称上点击右键,并从弹出菜单中 选择“Build
15 / 25
.
All〞。
MPASM 汇编器总会生成文件名与源文件〔.asm 文件〕名一样的目标文件〔.hex 文件)。编译时会翻开一个状态窗口,显示编译的进度和最后的结果。编译完成后自动关 闭该窗口。 同时还将翻开Output 窗口,Output 窗口没有出现红色警告或错误信息, 而且最后一句显示“BUILD SUCCEEDED〞,就表示编译成功了:
如果编译失败,请检查以下各项,然后重新编译项目:
1.检查在编辑器窗口中输入的所有代码的拼写和格式。如果在Output 窗口中报告有错,双击该错误就会在源代码窗口左侧的灰色区域中以绿色箭头指出源代码中出错的行。
2.检查用于该项目与其项目文件的语言工具是否正确。
为初学者解释几个概念:.
16 / 25
.
.asm 文件是我们用汇编语言〔一种类似英语缩写的语言〕写的源程序,但单片 机无法识别和运行源程序,单片机只能看懂由0和1组成的机器码,因此这里需要一个 “翻译〞的过程,称为“编译〞或“汇编〞,编译的作用就是把单片机无法识别的汇编源程序翻译成单片机能识别的机器码,由于机器码是最终在单片机上运行的代码,因此也称为目标代码,其后缀是.hex。
另外,整个“翻译〞的过程是由一个小小的工具软件完成的,它就是MPLAB IDE 自带的MPASM汇编器。当您选择Project>Build All的时候,系统会自动调用MPASM汇编器,自动完成整个编译过程。
十二、 为调试烧写目标代码
在调试之前,必须把目标代码烧写到目标单片机中。选择Debugger>Program,把目标文件exam1.hex〔目标文件中包括的就是目标代码〕烧写到实验板上的PIC16F877A中。烧写可能需要几分钟时间。在烧写过程中, Output 对话框的MPLAB ICD 2 选项卡下会显示目前的操作阶段。Output 窗口没有出现红色的警告或错误信息,而且 倒数第3句显示“…Programming succeeded〞,就表示烧写成功了:
提醒:进入调试模式的一个必要条件是,开发板或您的应用系统已经加了晶振。如编程器模式下烧写没问题,但调试器模式下烧写不成功,通常是开发板或您的应用系统忘了装上晶振! 注意:初学者容
17 / 25
.
易将Debugger(调试器)下拉菜单下的Program〔编程〕命令和 Programmer〔编程器〕下拉菜单下的Program〔编程〕命令混为一谈,其实这是两个作用完全不同的命令,切记:在调试器模式下,必须使用调试器下拉菜单下的Program 命令,同样,在编程器模式下,必须使用编程器下拉菜单下的Program命令!!!同 时也不要以为:在编程器模式下已经执行“Program〞命令了,因此切换到调试器模 式时,就可以不用执行了调试器模式下的“Program〞命令了,这是大错特错的,反 之也是一样。
Debugger(调试器)下拉菜单下和Programmer〔编程器〕下拉菜单下还有许多命令字面上一样,但实际功能是不一样的,注意不要混淆! 进一步的解释,初学者可以跳过不读:
执行Debugger(调试器)下拉菜单下的Program〔编程〕命令时,系统会自动在用户编写程序的目标代码中参加调试执行代码,调试执行代码会自动烧写到程序存储器的高端地址,以便用“ICD2 PIC仿真烧写器〞来进展调试。执行Programmer〔编程器〕下拉菜单下的Program〔编程〕命令时,只将用户编写程序的目标代码烧写到程序存储器中,和一般单片机的编程性质完全一致,由此可见,这两个编程命令的作用是完全不同的。
十三、在调试器模式下运行 exam1 进入调试模式后,工具栏会多出调试器快捷工具条,见下列图:
从左到右分别是
1.run –全速运行
2.halt –暂停
3.animate –自动单步〔或称为慢速运行〕
4.step into –单步运行〔子程序部也单步运行〕
5.step over --单步运行〔子程序部代码被全速执行,整个子程序被作为单步运 行中的一步来执行的〕
6.step out --跳出子循环〔当程序运行在子程序中时,可以使用它直接运行完该子程序〕
18 / 25
.
7.reset –复位
MPLAB ICD 2 在调试器模式下可以实时或单步执行代码,实时执行代码又称“全速运行〞,当然调试器模式下的“全速运行〞与单片机脱离开发系立运行时 的“全速运行〞还是有区别的,单步执行代码又称“单步运行〞。
我们首先执行调试器模式下的“全速运行〞。 选择Debugger>Run 〔或点击Run 工具栏按钮〕。
如果我们编写的程序没有错误,我们将在开发板上看到8个LED显示8位二进制递增数。但遗憾的是,8个LED上面什么也没有显示,程序没有按我们的要求运行,说明 程序有错误,不必担忧,利用调试器模式下的单步运行、变量观察窗口、断点等调试手段可以查找出任何错误。
先选择Debugger>Halt〔或点击Halt 工具栏按钮〕来中止程序执行。
十四、 调试 exam1
1.我们首先在把累加值输出到LED的那一行设置断点。在需要设置断点的语句上双击, 这一行的行首就出现如下列图所示的断点标记了〔红色的B 停止标记〕
19 / 25
.
2.翻开一个新的Watch 窗口,来观察随着程序的执行输出端口〔PORTD〕存放器值的变化。选择
View>Watch。从Add SFR 按钮旁边的列表中选择“PORTD〞,再点击这个按钮,PORTD加到了Watch窗口中,
如下列图所示:
20 / 25
.
3.现在我们调整源程序窗口和观察窗口的大小,使它们同时可见,这样便于观察源程序的执行和被观察存放器数据的变化:
21 / 25
.
4.选择Debugger>Run〔或者点击Run 工具栏按钮〕,再次全速运行程序。当程序执行到被标记断点的行时,程序会中止执行,绿色箭头停在源代码窗口第24行“GOTO LOOP〞,表示下一条将被执行的指令是“GOTO LOOP〞:
22 / 25
.
5.此时我们观察观察窗口,PORTD的容是0X00〔就是16进制00〕。
6.再选择Debugger>Run〔或者点击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,重新烧写修改正的程序。
提醒:源程序每次修改后都必须执行“保存〞、“编译〞、“烧写〞这三个步骤!
23 / 25
.
11.选择Debugger>Run〔或者点击Run 工具栏按钮〕,全速运行程序。此时8个LED 已经显示正常了。 本演示实例中的源代码只包含一个非常简单的错误,调试时没有使用“单步执行〞。单步执行是一种很常用的调试手段,适合于排除流程故障〔程序未按照预设的流程运行〕。选择Debugger>Step 〔或者点击Step 工具栏按钮〕来单步执行程序。 建议使用工具栏按钮,当您不断点击Step 工具栏按钮时,语句就会随着您的点击一 条一条地运行,绿色箭头不断地移动,时时指向下一条将被执行的指令。
许多时候,程序的调试会比编写花费更多的时间和精力。一段实际的代码可能包 含有很多的错误,排除这些错误,不仅需要必要的调试技巧,同时也要求程序员有良好的心理素质,尤其是初学者,遇到错误不要惊慌,编程出现错误实在是一件很正常的事,要坚信任何错误都是可以排除的,充分利用“ICD2 PIC仿真烧写器〞和MPLAB IDE 的调试功能, 您完全可以成功地定位和修复其代码中存在的错误。如果错误很多,宜采用“缩小包 围圈〞的排错策略,逐步排除错误。
十五、 在编程器模式下烧写目标代码
当程序成功调试并运行后,下一步是在编程器模式下烧写PIC单片机,以便它能脱离开发系立工作。进展这一步时,为ICD 保存的资源被释放。〔这句话,初学者可以不用去管它〕
按照以下步骤进展烧写:
1.选择Debugger>Select Tool>none,禁止MPLAB ICD 2 作为调试器。
2.在Programmer>Select Tool菜单中,选择MPLAB ICD 2作为编程器。
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仿真烧写器〞供电,改由自己的外接电源供电。
24 / 25
.
十六、文件保存
开发工作中途与完成后,要与时进展文件的保存,可以选择File>Save Workspace,保存为工作空间文件或选择Project>Save Project,保存项目文件。
下面对这两种文件类型与其区别进展说明:
Project(项目文件) 包括了编译所需的源文件、连接文件、头文件…… 与这些文件间的组织结构,同时还包括了芯片设置、配置位设置等。
Workspace〔工作空间文件〕 在项目文件包含的容根底上,还进一步 包含了调试器或编程器的选择,已翻开的窗口等。
简单地说:项目文件就是程序员辛辛苦苦做出来的“产品〞,工作空间 文件比项目文件多包括了一些容,多包括的容其实就是做“产品〞 过程中用到的各种工具,例如当前您正在调试程序,为此选择了“ICD2 PIC仿真烧写器〞,还翻开了变量观察窗口,这些在工作空间文件中也会被保存。
如果您的项目还没有最终完成,那么在保存时应该保存为工作空间文件类型,下一次翻开时,应该翻开这个项目文件,这样出现在您面前的一 切和您上次看到的一模一样,您可以方便地继续您未完成的工作
25 / 25