文档库 最新最全的文档下载
当前位置:文档库 › MPLAB ICD2 使用说明

MPLAB ICD2 使用说明

MPLAB ICD2 使用说明

目 录

第一章 MPLAB ICD2 如何工作

1.1 介绍

1.2 要点

1.3 ICD vs. ICE

1.4 模块化接口链接

1.5 调试模式

1.6 针对调试模式的要求

1.7 调试保留资源

1.8 编程器模式

第二章 初步介绍

2.1 介绍

2.2 要点

2.3 MPLAB ICD2 系统组件

2.4 针对MPLAB ICD2 来安装和配置MPLAB IDE

2.5 应用电源

2.6 总览: 设置环境

2.7 总览: MPLAB ICD2 开发过程

第三章 MPLAB ICD2 指南

3.1 介绍

3.2 要点

3.3 设置环境

3.4 运行工程向导

3.5 查看工程

3.6 创建HEX 文件

3.7 设置调试选型

3.8 连接演示板

3.9 载入调试代码

3.10 运行TUT452

3.11 调试TUT452

3.12 编程

3.13 TUT452 主程序和源代码

第四章 USB 安装细节

4.1 介绍

4.2 Windows 98 和Windows ME 安装

4.3 Windows 2000 安装

4.4 Windows XP 安装

第五章 故障诊断

5.1 出现故障时该如何处理

第六章 常见问题

6.1 常见问题

第七单 仿真电缆

7.1 6芯仿真电缆B补充说明

第一章MPLAB ICD2 如何工作

1.1 介绍

这一章对MPLAB ICD2 如何工作提供了简单的描述. 它试图提供足够的信息, 以便设计一块与MPLAB ICD2 兼容的目标板, 并能让MPLAB ICD2 对目标板进行编程与调试. 之所以描述编程和在线调试的基本原理,是为了方便在遇到问题时能快速的解决.

1.2 要点

这章提供了对MPLAB ICD2 的总览, 接着描述了MPLAB ICD2 编程和调试模式. 这章对下列话题进行了讨论:

? ICD vs. ICE

? 模块接口连接

? 调试模式

? 针对调试模式的要求

? 调试保留资源

? 编程器模式

1.3 ICD vs. ICE

ICD 在线调试器对于ICE 在线仿真器是一个廉价的替代品. 它可以做很多以前需要在昂贵的硬件上才能实现的功能. 但这些好处是以在线仿真器的一些便利为代价的. 如果用户愿意将他们的应用设计成与ICD 兼容的, 那他们将能享受到一个低价硬件调试器的好处.与ICE 相比, 在线调试器要求:

? 在线调试器要求占用目标的一些硬件和软件资源.

? 目标PIC MCU必须有一个正常运行的时钟.

? ICD只能在系统中的所有连接都完全正常时才能调试.

一个仿真器提供存储器和时钟, 并能运行代码- 即使没有与目标应用板相连. 在开发和调试期间, ICE 提供了最强大的能力以获得系统所有的功能, 而ICD 如果在应用不能运行时将根本无法进行调试. 另一方面, 在系统量产之后, 仍然可以在应用板上放置一个在线调试连接座并与ICD 相连. 这样允许对应用方便的测试, 调试和再编程. 尽管ICD 与ICE 相比有一些不足,但它也有一些突出的优点:

? 在量产之后可直接与目标板相连, 而不需要先取下单片机再插上仿真头.

? ICD可以对目标应用进行再编程, 而不需要其它连接或设备.

注意: ICE 使用传统的硬件来仿真目标微控制器. ICD 使用目标微控制器上的硬件来做ICE 的一些工作. ICD 还通过在目标器件上运行软件来实现ICE 的部分功能. 这样, ICD依赖目标微控

制器的一些存储器空间, CPU 控制, 堆栈存储和I/O 脚用于通讯.

1.4 模块化接口连接

MPLAB ICD2 使用六芯的模块化接口电缆与目标PIC MCU 相连. MPLAB ICD2 连接器的引脚顺序按照目标PIC 板显示如图1-1.

图1-1

注意: ICD 电缆在各端是镜像连接的, 在MPLAB ICD2 模块上的连接与这里显示的连接是相反的.

图1-2

图1-2 显示了MPLAB ICD2 与目标板上的模块化连接头的互连状况. 在ICD 连接头上有六个引脚, 但只使用了五个. 这个框图还显示了从连接头上的线与目标PIC 板上的PICMCU的连接情况. 在VPP/MCLR 到VDD 之间建议接一个上拉电阻(大约10K 左右).尽管在某些条件下引脚2(VDD)能对目标应用供应有限的能量, 但在这里引脚2 和3(VSS)将被忽略掉. 在框图中它们被完整的显示出来, 但在下面的描述中将只谈到与MPLAB ICD2 运行相关的三根线: VPP/MCLR, PGC 和PGD.

注意: 在下面的讨论中, VDD 被忽略掉了. 但应注意到目标VDD 也被用来对MPLABICD2 中的输出驱动器供电. 如果MPLAB ICD2 在其VDD 上没有电压, 它将不能工作.不是所有的PIC CU 都有AVDD 和AVSS, 但如果它们出现在目标PIC MCU 上, 它们必须被连接上,以便MPLAB CD2 能够运行.这个互连是很简单的. 任何遇到的问题往往是由于在这几条线上其它的连接或器件对MPLAB ICD2 的运行造成干扰所造成的. 具体讨论见1.4.1 节.

1.4.1 将阻止MPLAB ICD2 工作的线路

图1.3 显示了有效的MPLAB ICD2 连接加上一些器件将会妨碍MPLAB ICD2 的正常运行:特别指出, 这些线必须遵守下面规则:

图1-3

? 在PGC/PGD上不要接上拉-它们将会分压, 因为在MPLAB ICD2中这些线有4.7K的下拉电

阻.

? 在PGC/PGD上不要接电容-在编程和调试通讯期间, 它们会阻止数据和时钟线上的快速转

换.

? 在MCLR上不要接电容-它们会阻止VPP的快速转换. 一个简单的上拉电阻通常就足够了.

? 在PGC/PGD上不要接二极管-它们会在MPLAB ICD2和目标PIC MCU之间阻止双向通讯.

1.5 调试模式

使用MPLAB ICD2 作为一个调试器有两步. 第一步要求将应用程序编程到目标PIC MCU中. 第二步使用目标FLASH PIC MCU 内部的在线调试硬件来运行和测试应用程序.这两步与MPLAB IDE 的操作直接相关联:

1. 编程代码到目标.

2. 使用调试器设置断点和运行.

如果目标PIC MCU 不能被正确的编程, MPLAB ICD2 将不能进行调试.

图1-4

图1-4 显示了要求编程的基本互联状况. 注意这个图和图1-2 是一样的. 但为了更简洁,来自MPLAB ICD2 的VDD 和VSS

没有显示.MPLAB ICD2 的部分内部接口电路的简化接线图如图所示. 对于编程时, 目标PIC MCU不需要时钟, 但必须要提供电源. 当编程时, MPLAB ICD2将编程电压加到VPP上, 在PGC 上发送时钟脉冲, 并通过PGD 发送串行数据. 要校验器件被正确的编程, 可以给PGC发送时钟,并通过PGD 读回数据. 这符合了开发模式下PIC MCU 的ICSP 协议.

1.6 针对调试模式的要求

要使用MPLAB ICD2 进行调试(设置断点, 观察寄存器,等), 有几个关键的因素必须工作正确:

? MPLAB ICD2必须与PC机相连. 它必须由一个外部电源,或通过PC机的USB来供电. 并且它必须通过RS-232或USB与MPLAB IDE软件建立通讯.

? MPLAB ICD2必须通过模块化接口电缆(或与之等效的)按照图示连接到目标PIC MCU的VPP,PGC和PGD引脚上. MPLAB ICD2和目标PIC MCU之间也需要连接VSS和VDD.

? 目标PIC MCU必须有电源和工作正常的振荡器. 如果目标PIC MCU不工作,无论是什么原因,MPLAB ICD2都不能调试. ? 目标PIC MCU必须将其配置字编程正确:

- 振荡器配置位应与RC, XT, HS等相对应, 依靠目标设计的不同.

- 目标PIC MCU的看门狗定时器一定不能使能.

- 目标器件的代码保护不能使能.

- 目标器件的表读保护不能使能.

1.6.1 进入调试模式的操作顺序

如果上面的条件都能满足, 那么当MPLAB ICD2被设置成当前调试器时,可以执行下面的操作:

? 当选择Debugger>Program时,应用代码就会通过ICSP协议被编程到PIC单片机的存储器中.

? 一小段”调试执行“程序被载入到目标PIC单片机的程序存储器高地址端. 由于这段调试代码必须占据在程序存储器中, 所以目标程序就不能使用这段保留的空间. 这段调试代码通常需要程序存储器约0x120字.

? 目标PIC单片机的特殊的”在线调试”寄存器被使能. 这允许调试代码通过MPLAB ICD2被激

活.

? 通过将VPP/MCLR保持低,将使目标PIC单片机复位.

1.6.2 调试模式细节

图1-5

图1-5显示了MPLAB ICD2准备进行调试.通常, 为了发现一个应用程序是否能正确的运行, 可以在程序代码中先设置一个断点.当断点从MPLAB IDE 的用户接口被设置时, 断点的地址被保存在目标PIC 单片机的特殊内部调试寄存器中.

下一步,按下MPLAB IDE 的Debugger>Run 功能或Run 图标. MPLAB ICD2 将抬升VPP/MCLR 以允许目标运行. 目标将从地址零开始运行, 直到程序计数器达到前存储在内部

调试寄存器中的断点地址.在位于断点地址的那条指令被执行后, 目标PIC 单片机的在线调试机构启动,并将PIC单片机的程序计数器传送给调试执行代码(很像一个中断), 用户的应用程序被有效的中止了.MPLABICD2 通过PGC 和PGD 与调试代码进行通讯, 获得断点状态信息, 并将这些信息送回到MPLAB IDE. 然后MPLAB IDE 发送一系列的请求给MPLAB ICD2

以获得关于目标PIC 单片机的信息, 如文件寄存器内容和CPU 的状态. 这些请求最终通过调试代码来执行.

另一种获得断点的方式是按下MPLAB IDE 的”Halt”按钮(在运行箭头右边的暂停标志).这种方式将控制PGC 和PGD 线.这样目标PIC 单片机的在线调试机构将程序计数器从程序存储器中的用户代码切换到调试代码. 再一次, 目标应用程序被有效的中止了. MPLAB IDE使用MPLAB ICD2 和调试代码进行通讯以获得目标PIC 单片机的状态.

1.7 调试保留资源

在使用MPLAB ICD2 进行开发时, 用户必须知道被保留用于调试的器件资源. 检查MPLAB IDE 在线帮助或当前软件的README 文件, 以找出处理器被使用的细节. 通常, 在线调试器使用了下面的片内资源:

? MCLR/VPP被共用作编程.

? 低电压编程(LVP)被关闭

? PGC和PGD被保留用作编程和在线调试.

? 一或二层堆栈被MPLAB ICD2调试器使用

? 一些通用目标文件寄存器被保留.

? 程序存储器的高地址部分被保留用于调试执行代码.

? 在调试时PIC18FXXXX的影子堆栈不可用. 应用程序可以使用影子堆栈, 但不能从快速中断或快速CALL子程序返回, 因为ICD在获得断点时将覆盖影子堆栈.

1.8 编程器模式

当使用Programmer>Program 选项来编程器件时, 在MPLAB IDE 中在线调试寄存器应被关闭, 这样MPLAB ICD2 将只编程目标应用代码和配置位(和EEPROM 数据, 如果有提供并选择). 调试执行代码将不被载入. 在这种模式下, MPLAB ICD2 只能控制MCLR线来复位和启动目标器件. 断点不能被设置, 寄存器的内容也不能被查看.

MPLAB ICD2 使用ICSP 对目标进行编程. 编程时不需要时钟, 并且处理器的所有模式都能被编程, 包括代码保护, 看门狗定时器使能和表读保护.

注意: 在使用MPLAB ICD2 调试极少引脚数的器件时会需要一个仿真头. 这些器件按照前面描述的将VPP,PGC 和PGD 进行连接, 不需要仿真头也能被编程.

第二章初步介绍

2.1 介绍

这一章将描述MPLAB IDE 软件和MPLAB ICD2 的使用, 并将解释电源选型和推荐的上电顺序. 第三章是使用MPLAB ICD2 一步一步的指南. 在继续该指南之前, 确信软件和硬件按照本章第2.3 节和2.5 节进行了配置.

2.2 要点

本章涵盖的话题包括:

? MPLAB ICD2系统组成

? 针对MPLAB ICD2来安装和配置MPLAB IDE

? 应用电源

? 总览: 设置环境

? 总览: MPLAB ICD2开发过程

2.3 MPLAB ICD2 系统组成

除了MPLAB ICD2 模块, 还需要下面部件:

? MPLAB IDE软件(版本6.20或更高) - 安装在PC机上, 用来控制MPLAB ICD2.

? USB电缆 连接MPLAB ICD2到PC的USB口.

注意: 不要连接USB 电缆, 直到安装了MPLAB IDE 软件并将设备的USB 驱动配置完成.

? 模块化接口电缆- 连接MPLAB ICD2到演示板或用户应用板.

? 演示板或目标应用板- 用来连接带片内调试能力的PIC单片机到模块化接口(和MPLABICD2). 尽管从MPLAB IDE到MPLAB ICD2的串行或USB通讯不需要目标连接也能建立, 但MPLAB ICD2不连接到目标板将不能作为一个调试器工作. ? 电源适配器- 对MPLAB ICD2和目标板供电.

2.4 针对MPLAB ICD2来安装和配置MPLAB IDE

注意: 在使用USB 电缆时, 在安装MPLAB IDE 软件前不要和它连接.

要安装MPLAB IDE 软件, 首先要获得最新的MPLAB IDE 安装程序(MP6xxxx.exe, 其中6xxxx 表示MPLAB IDE 的版本). MPLAB IDE 可以从Microchip 网站或MPLAB IDE CD-ROM获得.

2.4.1 建立通讯

先安装好MPLAB IDE, 然后从MPLAB IDE 下的DriversXX 文件夹安装USB 驱动. 查看第四章”USB 安装细节”. 如果使用RS-232 电缆, 将它连接到MPLAB ICD2 和PC 机.

注意: 不要将USB 和RS-232 都连接到MPLAB ICD2 上.

2.4.2 开始MPLAB IDE

在安装完MPLAB IDE 软件后, 使用下面任何一种方法来启动它:

? 选择开始> 程序>Microchip MPLAB IDE>MPLAB IDE.

? 双击MPLAB IDE图标

? 执行MPLAB IDE安装路径下\dlls子目录下的mplab.exe.

注意: 关于使用MPLAB IDE软件的更多信息,可以查看:

- “MPLAB v6.xx快速指南”,DS51281

- 针对MPLAB IDE的在线帮助

- 包含在MPLAB IDE安装路径下的针对MPLAB IDE.txt的Readme文件.

- 也可以查看关于MPLAB ICD2最新的Readme文件.

在启动MPLAB IDE后, 它需要为MPLAB ICD2进行配置:

1. 选择MPLAB ICD2所支持的PIC器件.

2. 设置MPLAB ICD2作为当前调试器.

3. 配置MPLAB ICD2的RS-232或USB接口.

2.4.3 选择器件

使用器件选择对话框Configure>Select Device 来选择MPLAB ICD2 要调试的器件.MPLAB ICD2 所支持的器件会在Microchip 工具支持下面紧挨着MPLAB ICD2 旁边有一个绿灯图标.不支持的器件会有一个红灯图标. 黄灯图标表示那个器件可以选择, 但它会有某些限制, 可能不适合于量产工作.但它可以让MPLAB ICD2 做初步的使用.

2.4.4 设置MPLAB ICD2 作为调试工具

选择Debugger>Select Tool>MPLAB ICD2 将MPLAB ICD2 作为调试工具. 一旦这个工具被选择后, 调试菜单和MPLAB IDE 工具条会显示调试选型. 同时, 输出窗口会打开,关于ICD状态和通讯的信息会显示在MPLAB ICD2 标签栏内.

注意: MPLAB ICD2 既可以作为调试工具, 也可以作为编程器. 但不要同时选择.

2.4.5 配置接口

跳到Debugger>Settings 的通讯标签, 选择USB 接口或针对RS-232 通讯正确的COM口.

2.5 应用电源

针对MPLAB ICD2 和目标板有许多的配置, 下面是这些配置的关键:

? 当使用USB连接时, MPLAB ICD2可以从PC机来供电. 但必须要给目标板提供一个电源.

? 当使用RS-232连接到PC机时, MPLAB ICD2必须接一个外部电源.

? 当MPLAB ICD2有一个自己的电源时, 它可以对较小的目标板在5V电压下提供一定量的电流,

最高可达200mA.

? MPLAB ICD2不能通过目标板供电.

? 在给目标板加电之前,应先给MPLAB ICD2加电.

2.5.1 当MPLAB ICD2给目标板供电时的上电顺序

使用下面的顺序来让MPLAB ICD2给目标板供电. 这个配置只允许在5V, 最高200mA电流下使用.

1. 给MPLAB ICD2加电. 不要给目标板供电.

2. 启动MPLAB IDE6.xx.

3. 在MPLAB IDE的调试菜单下,选择Connect.

4. 在与MPLAB ICD2建立通讯后, 选择Debugger>Settings.

5. 在设置对话框中, 点击Power标签, 确认”Power target circuit from MPLAB ICD2”被选中.

点击OK.

注意: 如果Settings对话框Status标签栏的任何自测选型没通过, 它将可能不能擦除和编程芯片. 这将需要更多的故障检查. 查看第五章和第六章或在线帮助以获得更多信息.

2.5.2 当目标板有一个独立电源时的上电顺序

使用这个顺序来给目标板通过它自己的电源来上电. 对于这个配置, 目标电源可以是2-5V,电流可以比MPLAB ICD2 提供的电流高. 查看PIC 单片机数据手册以确认这个器件所使用的操作电压范围.

1. 给MPLAB ICD2加电. 不要给目标板供电.

2. 启动MPLAB IDE6.xx.

3. 在MPLAB IDE的调试菜单下,选择Connect.

4. 在与MPLAB ICD2建立通讯后, 选择Debugger>Settings.

5. 在设置对话框中, 点击Power标签, 确认”Power target circuit from MPLAB ICD2”没有被

选中. 点击OK.

6. 给目标系统上电, 然后选择Debugger>Connect.

注意: 如果Settings 对话框Status 标签栏的任何自测选型没通过, 它将可能不能擦除和编程芯片. 这将需要更多的故障检查. 查看第五章和第六章或在线帮助以获得更多信息.

2.6 总览: 设置环境

这一章剩下的部分提供了对MPLAB ICD2 使用的总览, 对一些功能和菜单进行了通用的描述. 这一节提供了对MPLAB ICD2 操作的快速总结.

2.6.1 设置调试和编程选项

各种对话框允许用户来设置调制和编程选项:

? 配置位对话框(Configure>Configuration Bits)-在PIC处理器上选择配置位. 对于这些选项

完整的细节, 可以查看这个器件数据手册特殊特性-配置位章节.

注意: 配置位可以在源代码中被指定, 以替代在这个对话框中设置. 当这样做时, 每次重建工程, 配置位都将设置成源代码中所指定的值.

? 编程标签, ICD设置对话框(Debugger>Settings或Programmer>Settings)-设置编程选项(选择存储器, 程序和外部存储器范围, ID, 和编程选项, 全部擦除). 如果期望编程ID位,可以在Configure>ID Memory对话框中设置要编程的值.

? 电源标签,ICD设置对话框(Debugger>Settings或Programmer>Settings)-检查MPLAB CD2和目标电压值, 如果MPLAB ICD2连接了一个电源(5V,最高200mA),选择”Power the arget from the MPLAB ICD2”.

? 状态标签, ICD 设置对话框(Debugger>Settings 或Programmer>Settings)-除了在上电可以自动连接外, 还可以在这个对话框中设置输出信息到一个文件. 这些信息可以协助用户或者如果可能,协助Microchip 技术支持发现问题.

2.6.2 创建一个工程

最简单的创建一个新工程的方法是选Project>Project Wizard.在工程向导的帮助下,一个新的工程和用于建立工程的语言工具将被创建. 向导将指导用户添加源程序, 库文件,链接文件等到工程窗口的各个节点. 第三章的指南会给出使用这个向导更

多的细节.

2.6.3 建立工程

在创建工程之后, 选择Project>Build All 来建立应用. 这将创建这个应用的目标代码,用于MPLAB ICD2 给目标板编程. 2.7 总览: MPLAB ICD2 开发过程

使用MPLAB ICD2 的开发过程包括四个步骤:

1. 使用MPLAB ICD2 作为当前调试工具, 将应用代码编程到目标应用中去.

2. 调试应用程序.

3. 修改源程序, 重建工程. 然后重复上述工作, 直到应用按照设计正常运行.

4. 选择MPLAB ICD2 作为当前编程器, 然后对目标器件编程.

2.7.1 作为调试器对目标处理器编程

作为调试器时, 将应用代码编程到MPLAB ICD2,可以按照下面步骤进行:

1. 选择Debugger>Settings, 然后点击程序标签, 为这个应用设置程序存储器的起始和结束地

址.

2. 选择Configure>Configuration Bits, 设置相应的配置位.

3. 选择Debugger>Program.

2.7.2 调试应用

要实时执行代码, 可按照下面步骤:

1. 打开源程序( 双击工程窗口的文件名或使用File>Open) 或程序存储器窗口(View>ProgramMemory)用于观察.

2. 选择Debugger>Run(或点击工具栏RUN 图标).处理器将一直运行直到碰到一个断点,或处理器通过选择

Debugger>Halt(或点击工具栏Halt 按钮)被中止.选择Debugger>Breakpoints为断点指定位置. 或在源程序的行或希望设置断点的程序存储器处点击右键, 选择Set Break Point. MPLAB ICD2 一次只能设置一个断点.处理器被中止之后, 代码可以以单步模式执行. 要执行单步, 选择Debugger>Step Into(或点击工具栏Step Into 按钮). 在每次单步之后处理器被中止. 注意: 当执行单步时, 中断被关闭.所以中断程序将无法进入. 可以在中断程序中设置断点, 然后运行到那, 再单步执行中断代码.

2.7.3 修改目标应用代码并重建HEX 文件

要修改目标代码并重建HEX 文件, 可以按照下面步骤进行:

1. 打开源程序(双击工程窗口的文件名或使用File>Open).

2. 对调试代码做适当的修改.

3. 使用Project>Build All 重建HEX 文件.

4. 选择Debugger>Program 将更新的HEX 文件编程到目标器件.

2.7.4 完成应用: 使用MPLAB ICD2 作为编程器

一旦用户完成了代码调试,并且应用按照期望值运行了, 那么器件就可以不需要调试使能进行编程了. 这时用于ICD 操作的器件保留资源就可以使用了.

注意: MPLAB ICD2 既可以作为调试工具,又可以作为编程器. 但不要同时选择两者.

首先, 从Debugger>Select Tool 菜单设置调试器到”None”.

然后, 选择Programmer>Select Programmer>MPLAB ICD2 将MPLAB ICD2 设置为编程器.一旦这个工具被选择, 编程器菜单和MPLAB IDE 工具栏将会变更为显示编程器选项. 同时, 输出窗口会被打开, 在MPLAB ICD2 栏上会显示与ICD 状态和通讯相关的信息.现在应重建工程, 以便所有的调试模式被关闭, 并且在源程序中被定义的配置位将被编程到目标器件.编程选项(即存储器区域和范围)可以在Programmer>Settings 对话框的编程标签进行设置.配置位将按照源文件的定义进行设置.它们可以通过使用Configuration>Configuration Bit 框手动选择.如果希望的话, 可以选择Configure>ID Memory 来设置ID 位.

第三章MPLAB ICD2 指南

3.1 介绍

这则指南将会使用例程TUT452.asm 来介绍开发一个简单工程的过程. 这个例程在MPLAB IDE 安装路径下的文件夹中可以找到. 这个程序使用PICDEMO 2 Plus 演示板来实现PIC18F452 A/D 转换的功能. 程序配置A/D 模块, 从A/D 通道0 转换输入(与演示板的电位器连接), 并将结果显示在四个PORTB LED 上(RB3:RB0).

3.2 要点

这章覆盖的话题包括:

? 设置环境

? 运行工程向导

? 查看工程

? 创建HEX文件

? 设置调试选型

? 设置演示板

? 载入调试代码

? 运行TUT452

? 调试TUT452

? 编程

? TUT452主程序和源代码

3.3 设置环境

在开始这章指南之前, 按照第二章第2.3 节至2.5 节的步骤设置硬件和MPLAB IDE 软件.在这章指南中的一些初始设置可能在第二章中已经设置好.一旦启动, MPLAB IDE 桌面应该显示如图3-1.

图3-1

3.3.1 选择器件和开发模式

选择器件:

1. 选择Configure>Select Device.

2. 在器件选择对话框, 从器件列表框选择PIC18F452. 在Microchip 工具支持部分挨着MPLAB ICD2 的灯图标应该为绿色.

3. 点击OK.

选择MPLAB ICD2 作为调试器:

1. 选择Debugger>Select Tool>MPLAB ICD

2. 调试器菜单将会显示可供使用的其它调试选项. 同时, 输出窗口会打开显示连接信息.

注意: 如果MPLAB IDE 在启动时试图连接到MPLAB ICD2,但因为USB 口或一个非COM1的COM 口被使用而失败, 那么允许失败,继续第二步的通讯端口设置.

2. 选择Debugger>Settings, 通讯标签. 选择USB 或COM 端口/波特率.

3. 如果希望MPLAB ICD2 自动连接, 点击状态标签, 选择”Automatically connect at startup”.检查信息级别设置为最小模式.

4. 点击OK.

5. 选择Debugger>Connect 连接到MPLAB ICD2.

3.3.2 更新MPLAB ICD2 固件(操作系统)

根据MPLAB IDE 的版本或器件的选择, 会提示一条信息显示固件需要更新. MPLAB IDE将自动安装新的固件. 更新对话框如图所示:

同时, 由于不同的MPLAB ICD2 估计用于不同系列的PIC 单片机, 当切换不同的PIC 单片机时也可能出现这个对话框.固件可以按照下面的步骤手动更改:

1. 选择Debugger>Download ICD2 Operating System. 选择ICD2固件文件对话框会打开.

2. 从列表中或浏览器中选择要下载的固件文件. 文件名的组成为icdxxxxxx.hex,其中xxxxxx 为版本号. 关于MPLAB IDE 提供最新版本的信息可以查看README 文件或MPLAB ICD2.txt.根据选择的PIC 器件版本可能会变动.

3. 点击Open. MPLAB IDE 将下载新的操作系统到MPLAB ICD2.

3.4 运行工程向导

在这个工程中, MPASM 汇编器会被使用.

1. 选择Project>Project Wizard 来建立第一个工程.

2. 进行到第二个向导对话框, PIC18F452 应该被选中.

3. 继续进行到向导的下一个对话框, 设置MPASM 作为语言工具. 在”Active Toolsuite”下拉列表中选择”Microchip MPASM Toolsuite”.确认MPASM和MPLINK 设置在MPLAB IDE\MCHIP_Tools 文件夹的相应可执行文件上. MPASM 应指定到mpasmwin.exe,MPLINK应指定到mplink.exe.

接着工程文件被添加到向导.文件也可以在以后添加. 对于这个例子, 选择Browse, 进入MPLABIDE按照文件夹(默认文件夹是C:\Program Files\Microchip\MPLAB IDE),然后进入MCHIP_Tools\Example文件夹,选择TUT452.ASM.点击TUT452.ASM来选中它, 然后点击ADD>>将它添加到右边的面板.

这个工程需要的第二个文件是链接描述文件.点击\LKR文件夹将其展开,然后向下滚动选择18F452i.lkr,确认文件名有一个”i”.

完成之后, 点击Next. 当完成向导时, 将会出现如图3.6 总结的对话框.

图3-6

3.5 查看工程

退出向导后, MPLAB IDE 桌面又会出现. 关闭桌面其它的窗口以查看工程窗口.工程窗口应该如图3-7 所示.

图3-7

如果有错误, 文件可以手动的添加到工程窗口. 将光标移动到”Source Files”或”Linker Scripts”来添加文件. 要删除一个文件, 可以先选中它, 然后点击鼠标右键, 从菜单中删除文件.

3.6 创建HEX 文件

要为调试创建一个HEX 文件, 选择Project>Build All 或在工程窗口里的工程名字上点击右键并从弹出的菜单上选择”Build All”. MPASM 汇编器总会以.asm 文件相同的名字生成一个.hex 文件.输出窗口应该如图所示.

3.7 设置调试选项

3.7.1 配置位

要设置配置位, 选择Configure>Configuration Bits. 通过点击”Settings”列里的文本可以对它们进行修改. 在这个对话框中, 针对这章指南,下面的配置位应该被设置:? Oscillator –EC-OS2 as RA6(这是针对PICDEMO 2 Plus. 如果使用其它的目标板, 应进行相应的变更)

? OSC Switch Enable - Disabled

? Power Up Timer - Enabled

? Brown Out Detect - Disabled

? Watchdog Timer - Disabled

? CCP2 Mux – RC1

? Low Voltage Programming - Disabled

? Background Debug – Enabled(这将使能在线调试特性. 通常在选择MPLAB ICD2作为当前调试器时, 这项会自动使能.) ? Stack Overflow Reset - Disabled

? 其它所有配置位应被关闭.

3.7.2 编程选项

要设置编程选项, 选择Debugger>Settings 然后点击Program 标签.

? 对于PIC18FXX2器件, 在每次芯片被编程时,所有存储器会被擦除. 因此, “Erase all before Program”将无效.

? 选择存储器部分应该是”Program”选中, “EEPROM”和”ID”不选. 当使用MPLAB ICD2作为调试器时, 配置位将一直被编程, 配置选择框将被选中并为灰色.

? 程序存储器地址(起始地址和结束地址)用来设置程序存储器的范围, 它将被读, 编程或校验.点击Full Range设置基于选中器件可供使用最大程序存储器的地址范围. 注意程序存储器的结束地址做了调整, 以保留空间给MPLAB ICD2调试程序. 当使用MPLAB ICD2作为调试器时,程序不能超过上面的上限.

3.8 设置演示板

在开始调试前, 确认PICDEM 2 Plus 演示板按如下进行设置:

? 使用跳线J7选择EC OSC选项

? 使用跳线J6使能LEDs.

? 电源被提供.

3.9 载入调试代码

选择Debugger>Program 将TUT452.hex 编程到PICDEM 2 Plus 演示板上的PIC18F452.注意: 调试代码会自动编程到程序存储器的顶层空间用于MPLAB ICD2 的调试. 调试代码必须被编程到目标PIC 单片机, 以使用MPLAB ICD2 的在线调试能力.编程可能需要几分钟. 在编程过程中, 输出对话框的MPLAB ICD2 栏会显示操作的当前阶段. 当编程完成时, 对话框应该如图3-10 所示.

图3-10

3.10 运行TUT452

MPLAB ICD2 可以以实时或单步模式执行.

? 在MPLAB IDE的运行模式中, PICDEM 2 Plus演示板上的PIC18F452将运行在实时模式.

? 在处理器被中止后,单步执行就能被访问.

工具栏按钮可以用于常用调试操作的快速访问.开始实时模式:

1. 打开TUT45

2.asm 文件(在工程窗口上双击文件名或使用File>Open).

2. 选择Debugger>Run(或点击工具栏RUN 按钮)

3. 在演示板上, 转动电位器上的箭头(RA0). 观察LEDs. 如果程序正确的工作, 用户将看到发光管按照二进制的形式随着电位器来变化. 然而在TUT452 中有一个小毛病. 3.11节将详细调试代码并将其更正.

图3-11

4. 选择Debugger>Halt(或点击工具栏HALT 按钮)中止程序运行.

5. 选择Debugger>Reset 复位程序.

3.11 调试TUT452

下面的任何一项都能阻止TUT452 程序的工作.

? A/D转换值没有被正确的写入PORTB(LEDs).

? A/D转换器没有打开或没有被设置转换.

? 源程序中书写错误会导致程序工作不正常.

要浏览第一种可能性, 可以在将A/D 结果写入到PORTB 的那行设置断点.

1. 从TUT45

2.asm 中选中或将光标放置在下面一行:movwf PORTB ;Write A/D result to PORTB

2. 点击右键, 显示弹出菜单.

3. 从弹出菜单选择Set Break Point. 这一行现在被标记为断点(红色的B 停止标记). 如图所示.

4. 选择Debugger>Run(或点击工具栏RUN 按钮)以实时模式再次运行程序.当程序执行到断点设置行时, 断点会中止程序的运行. 然而, 例程不会被中止.

5. 选择Debugger>Halt(或点击工具栏上HALT 按钮)来中止程序.

在源代码窗口中, 例程会在延时子程序两行中的一行中止. 如图所示.

基于中止的位置和程序一直没有执行到断点的事实, 可以得出结论, 问题出在A/D 转换上.针对A/D 转换完成的标志没有被置位. A/D 转换初始化和设置发生在程序的开始处.

6. 要复位程序, 选择Debugger>Reset. 第一条指令应该显示带一个绿色的箭头.

7. 打开一个新的观察窗口来观察程序执行时A/D 寄存器值的变化. 选择View>Watch. 观察对

话框将Watch_1 选中打开. 从添加SFR 旁边的列表中选择”ADCON0”, 然后点击按钮.ADCON0 被添加到观察窗口中. 重复添加ADCON1. 选中的变量现在将出现在观察窗口中.

如图所示.

8. 在TUT452.asm 源程序中, 在Start 后的第一条指令设置一个断点. 选中或将光标放置在下

面代码行:

clrf PORTB ;Clear PORTB

点击右键,显示一个快捷菜单. 从快捷菜单中选择Set Break Point. 这一行将被标记为断点.

9. 选择Debugger>Run 让程序运行在实时模式.

这次, 当程序执行完断点行后程序会停止. 如图所示.

10. 单步执行五次, 选择Debugger>Step(或点击工具栏STEP 按钮)来单步执行程序. 当完成时会显示下面的代码行: movlw B'11000111' ;TMR0 prescaler, 1:256

11. 在观察窗口中检查寄存器ADCON0 和ADCON1 的值. 注意ADCON0 的值为0x40. 它是与程序中指定的二进制值相对应的. 但这个值正确吗?回顾一下PIC18F452 数据手册关于A/D 的章节, 显示要打开A/D 模块, 最后一位应该是1,而不是0.要修复这个错误, 可以将:

movlw B'01000000' ;Fosc/8, A/D enabled

更正为:

movlw B'01000001' ;Fosc/8, A/D enabled

12. 选择File>Save保存文件.

13. 选择Project>Build All重建工程. 一条信息会提示程序被重新建立. 要使改变生效,MPLAB ICD2必须被重新编程.

14. 选择Debugger>Program重新编程. 当MPLAB ICD2对话框显示’…Programming succeeded’,程序就可以再次进入运行模式.

15. 在之前设置断点的行点击右键, 选择Remove Break Point.

16. 选择Debugger>Run使程序运行在实时模式. 旋转电位器来改变在LED上显示的值.这则指南中的源程序只包含一个错误. 然而, 实际的代码可能会有更多问题. 使用MPLAB ICD2和MPLAB IDE调试功能, 用户能成功的发现并修复这些问题.

3.12 编程

当程序成功的调试并运行时, 通常下一步就是对PIC 单片机编程. 当进行这一步时, 被ICD 保留的资源将释放给用户.

对应用进行编程, 可以按照下面步骤:

1. 选择Debugger>Select Tool>none 关闭MPLAB ICD2 作为调试工具.

2. 在Programmer>Select 菜单中选择MPLAB ICD2 作为编程器.

3. 可选项: 在Configure>ID Memory 中设置ID.

4. 在Programming>Settings 程序标签上设置用于编程的参数.

5. 选择Programmer>Program.

现在MPLAB ICD2 就能复位并运行目标(MPLAB ICD2 也可以从目标断开, 在选择复位按钮之后, 应用会运行).

3.13 TUT452 主程序和源代码

TUT452.asm 主程序开始时对PORTB,A/D 模块和Timer0 进行配置. 然后等待Timer0的一次溢出. 接着启动A/D 转换器. 当转换完成时, 转换结果显示在LED 上. 然后程序返回再次等待Timer0 溢出以启动下一个A/D 转换.关于A/D 模块操作和相关应用笔记的更多信息, 请参考PIC 18C MCU 系列参考手册(DS39500).

;****************************************

;* TUT452.ASM *

;****************************************

list p=18f452

include "p18f452.inc"

Reset_Vector code 0x0 ; Put a GOTO at reset address

goto Start

code 0x0002A ; Start app beyond vector area

Start

clrf PORTB ;Clear PORTB

clrf TRISB ;PORTB all outputs,

;display 4 MSB's of A/D result on LEDs

movlw B'01000000' ;Fosc/8,A/D enabled

movwf ADCON0

movlw B'00001110' ;Left justify,1 analog channel

movwf ADCON1 ;VDD and VSS ref’s

movlw B'11000111' ;TMR0 prescaler,1:256

movwf T0CON

Main

btfss INTCON,TMR0IF ;Wait for Timer0 to timeout

goto Main

bcf INTCON,TMR0IF

bsf ADCON0,GO ;Start A/D

;conversion

Wait

btfss PIR1,ADIF ;Wait for conversion to complete

goto Wait

swapf ADRESH,W ;Swap A/D result nibbles

andlw 0x0f ;Mask off lower 4 bits

movwf PORTB ;Write A/D result to PORTB

clrf PORTB

WaitPush ;Pause while switch is pressed

btfss PORTA,4

goto WaitPush

movwf PORTB

goto Main ;Do it again

end

相关文档