标题：MCD1
第一章MPLAB-ICD概述

1.1.什么是MPLAB-ICD
MPLAB-ICD是针对MICROCHIP公司的PIC16F87X系列MCU的廉价开发工具。MPLAB-ICD既是一个在线调试器，又是一个编程器。它工作于MPLAB-IDE集成开发环境下，利用了MICROCHIP公司的在线串行编程技术（In-CircuitSerialProgramming），在所仿真的MCU（PIC16F87X）中嵌入监控程序来实现实时仿真。将其仿真头直接连接到应用系统的MCU插座中，就如同一片PIC16F87X一样运行用户的应用程序。
MPLAB-ICD可以用于PIC16F87x或其他某些型号（PIC16C/Fxxx）MCU应用产品的电路与程序调试。
MPLAB-ICD有如下特性：
在线调试功能
源程序级的代码调试
实时、单步或断点运行程序
寄存器观察
可由目标系统提供工作电压
工作电压范围为3.0V到5.5V
工作频率范围为32KHZ到20MHZ
工作于MPLAB-IDE集成开发环境，该软件兼容MicrosoftWindows3.X、Windows95/98、WindowsNT和Windows2000等操作系统。
RS-232串行接口方式
1.2.MPLAB-ICD能帮你做什么？
MPLAB-ICD可以让你：
实时仿真调试源程序
调试目标板硬件系统
使用MICROCHIP的“在线串行编程技术（In-CircuitSerialProgramming）”对目标应用控制器进行编程。
1.3.MPLAB-ICD使用的资源

第二章MPLAB-ICD的安装和使用

2．1MPLAB-ICD对计算机主机的要求
为了更好地发挥调试系统的性能，必须把MPLAB-IDE软件包安装到符合以下要求的计算机里：
奔腾（PENTIUM）系列PC或兼容计算机
微软公司的操作系统：WINDOWS95/98，WINDOWS-NT，或者WINDOWS2000
至少16MB的系统内存，推荐使用32MB系统内存
45MB可使用的磁盘空间
一个空余的串行通讯口
2．2安装硬件

请按下列步骤安装MCD1硬件系统：
2.2.1安装仿真MCU
按三种不同情况安装仿真MCU。
1、目标板上没有安装RJ-6插座：将仿真MCU（PIC16F87X）插入到MPLAB-ICD仿真头上仿真MCU插座（40脚IC座）里面。(参见表2-1)
用户目标板上的MCU型号仿真头上相应的MCU型号
PIC16F870(A)PIC16F871(A)
PIC16F871(A)PIC16F871(A)
PIC16F872(A)PIC16F871(A)
PIC16F873(A)PIC16F874(A)
PIC16F874(A)PIC16F874(A)
PIC16F876(A)PIC16F877(A)
PIC16F877(A)PIC16F877(A)
表2-1
2、目标板上已安装RJ-6插座：将仿真MCU-PIC16F87X直接插入目标上的MCU插座里面。
3、目标板上没有安装RJ-6插座：将仿真MCU-PIC16F87X直接插入目标上的MCU插座里面,用配套6PIN连接线连接MCD1主机和用户板[各线功能如下:黑线:Vpp,红线:+VDD,绿线:GND,黄线RB7,白线RB6,棕线RB3(若仿真器使用自身电源则VCC不用接用户板)]。
2.2.2连接主机、仿真头和目标（教学实验）板
1、安装仿真头：把仿真头插入应用目标（教学演示）板的MCU插座里。如果调试的MCU是28引脚，则需将仿真头的引出脚调整成28脚，然后插到目标（教学实验）板上的28脚的锁紧座里。
如目标板上有安装RJ-6插座或用配套6芯排线连接，则不需此步骤。
RJ-6电缆内部各芯的分配如下表2-2：
J2各芯编号信号
6RB3
5RB6
4RB7
3接地
2+VDD
1Vpp
表2-2
2、用六芯扁平电缆连接MCD1主机和MCD1-DEMO教学实验板（或用户应用目标板）。
3、用RS-232串行口专用九芯电缆连接计算机的串行口和MCD1主机。
4、接上教学实验板（或用户应用目标板）的电源。使用的电源为9V、0.5A的电源适配器（插头中心为电源负极）。
5、打开计算机主机电源。
2.3安装软件

MPLAB-ICD是MPLAB-IDE集成开发环境的一个可插入（ADD-ON）工具。用户应按如下步骤安装MPLAB-IDE集成开发环境软件包：
1.进入WINDOWS环境里，把MCD1的CD-ROM插入光盘驱动器里。在光盘里找到MPLAB-IDE5.70.40的软件包.
2.执行安装程序：
在WINDOWS操作界面上找到安装文件后，直接点击运行即可。
3.按指导过程来安装MPLAB-IDE集成开发环境软件包。一定记住安装过程中当出现要求选择MPLAB-ICD部件的会话窗口时，要点击并选择该部件，以便系统安装。
2.4使用(MCD1)MPLAB-ICD

连接硬件并安装完软件之后，用户可以先在MPLAB-IDE的纯编辑模式下编写程序。在*.ASM程序编辑完成后就可以开始使用ICD。以下将以源程序tut877.asm为例说明使用过程。
2.4.1建立一个16进制调试文件
用户需要建立一个新“项目”(*.pjt)，以便将源文件*.asm和建立的十六进制文件*.hex包含在内进行调试。
2.4.1.1新“项目”目录
为这个新项目建立一个目录:\MPLAB\tut877。将tut877.asm文件从\MPLAB目录移动到该目录下面(注意:MPLAB5.XX要求项目*.pjt必须和载入源文件*.asm处于同一个文件夹)。
2.4.1.2新“项目”
选择Project>NewProject，选择新项目所在的路径，然后在文件名会话窗口里输入tut877.prj。
点击“OK”按钮（图2-1）之后编辑项目会话窗口（EditProjectdialog）将会打开(如图2-2所示)。
图2-1：建立新项目-tut877.prj
图2-2：设置开发模式前编辑项目会话窗口
2.4.1.3项目会话窗口
用户将会在如图2-2所示的编辑项目会话窗口看到开发模式设置（DevelopmentMode）。图中显示出当前工作于软件模拟（MPLAB-SIM）方式，MCU是PIC12C508处理器。这些状态都是用户以前使用MPLAB-IDE集成开发环境时的设置。而现在则需要改变这些设置。
点击“Change”按钮后将会出现开发模式设置（DevelopmentMode）对话框（如图2-3所示）。
图2-3：设置开发模式
在Tools菜单条里选择“MPLAB-ICDDebugger”。在处理器（processor）窗口选择PIC16F877，然后点击“OK”(注意:如果仿真或烧写PIC87XA芯片，则只需要选取对应的不带A型号。比如调试16F877A时，只需要将仿真头芯片替换为16F877A，并选取芯片型号为16F877)。
这时MPLAB-IDE将和MPLAB-ICD主机之间建立通讯。在这个过程中，MPLAB-ICD会话窗口将会同时出现。
假如你看到一条错误报告信息，请重新检查一下电源连线、插座是否牢固可靠、电缆是否连接正确。
注意在编辑项目会话窗口（EditProjectdialog）里是否正确选择了开发模式和处理器设置。
在编辑项目会话窗口里的项目文件（ProjectFile）区域里用鼠标选取tut877.hex文件，然后点击节点属性（NodeProperty）按钮（如图2-4）。执行这项操作后系统将会弹出一个节点属性（NodeProperty）窗口。
图2-4：编辑项目会话窗口
2.4.1.4设置节点属性
节点属性会话窗口显示出涉及到MPLAB-ICD的参数开关，这些参数都是MPASM汇编器的。当你首次打开该会话窗口时，所看到的设置均为该开发工具的默认设置。对于本范例中的应用，没有必要修改该默认设置。
点击“OK”按钮（如图2-5），返回到编辑项目会话窗口(EditProjectdialog)。
图2-5：节点属性会话窗口
图2-6:增加节点
2.4.1.5增加节点
在编辑项目会话窗口里点击增加节点(AddNode)，打开添加节点会话窗口。选择tut877.asm，然后点击OK即可(如图2-6)。
2.4.1.6完成对项目的设置
在这个简单的例子里，在路径选择框里没有指定目录。随着你的应用越来越复杂，用户将有可能需要在相应的选择框里指定包含相应文件的目录路径。
MPASM通常会把十六进制文件的文件名（a.hex）取得和源文件(a.asm)的文件名一样。当建立（BUILT）tut877.prj项目的时候，项目管理器将会生成一个十六进制文件tut877.hex。
图2-7：带节点的编辑项目会话窗口
点击“OK”按钮，关闭编辑项目会话窗口(EditProjectdialog)，然后从MPLAB-IDE菜单项里选择选择命令：Project>SaveProject保存新的项目。这样就完成了对项目的设置。
2.4.1.7建立项目（MakeProject）
现在您要从MPLAB-IDE的菜单项里选择Project>MakeProject，使用MPASM宏汇编来程序来汇编应用程序。创建（BUILDALL）以后的结果窗口中可以看到发送给汇编器的命令行和结果信息（如图2-8所示）。
图2-8：创建（BUILT）以后的结果窗口
其中主要有以下三种提示信息：
1、错误（error）：表示源文件在…有错误，用户应根据提示修改源程序；
2、警告（warring）；
3、信息（Message）：这并不一定是错误，用户的程序代码仍然会被正确地编译。例如：信息[302]是提示，在指示的行号（31，32和34）里用户指定了一个并不位于第0页面（BANK0）的通用寄存器。
点击创建结果（BUILTRESULTS）窗口右上角的图标X将关闭窗口。
2.4.2设置MPLAB-ICD和MPLAB
这时候，MPLAB-ICD会话窗口将会出现在计算机的桌面上。用户须选择适当的选择项来设置MPLAB-IDE，使之能和MPLAB-ICD的硬件一起工作(图2-9)
图2-9：MPLAB-ICD会话窗口
选项选项说明
状态(Status)菜单（不可选择项）状态栏显示被执行的MPLAB-ICD函数和状态。当编程时，可以从这里看到进程。当操作完成后，状态栏将显示信息“Waitingforusecommand”（等待用户命令）
串行口和波特率菜单要确信这些设置合乎你的系统要求
上载（Upload）选项菜单现在选择最小值，往后的范例中将会调试改变该数值
时钟选择范围菜单选择工作频率范围：2MHZ~10MHZ
表2-1：MPLAB-ICD会话窗口
2.4.2.1设置ICD的编程和调试选项
为了对PIC16F87X芯片进行编程,必须先对ICD选项会话窗口(ICDOptionsdialog)进行设置工作,为编程作好准备。在MPLAB-ICD的会话窗口里点击Options，打开ICD选项会话窗口（图2-10）。
图2-10：MPLAB-ICD选项会话窗口
注意:使用MCD1配套实验板时,该实验板默认是在晶体振荡方式,故要选择Oscillator为XT模式(因4M晶振刚处于XT与HS的临界状态,所以如果你用XT振荡调试不顺利可换成HS再重新PROGRAM试试).
2.4.2.2配置位和芯片类型选择
用户将要在这个ICD选项会话窗口中设置PIC16F87X处理器的各种配置位。
点击图中相应的箭头图标，将弹出一个对应的列表，用户应根据需要从该列表中选择相应的选择项。可选项及相应说明如表2-2所示。
其中，芯片（Device）栏在本例中显示的是PIC16F877，这是在开发模式设置（DevelopmentMode）中设定好的。要想改变这一设定，用户需退出当前设置，输入命令：Options>DevelopmentMode，然后正确选择芯片。
可选项选项说明
Oscillator
振荡器本范例里使用4.000Mhz的晶体振荡器,应选择为XT.
WatchdogTimer
看门狗定时器对于本范例里，看门狗定时器（WDT）应关闭
PowerUpTimer
上电延时定时器对于本范例里，上电延时定时器（PWRT）应关闭
BrownOutDetect
电源掉电监测对于本范例里，电源掉电监测（BOD）应关闭
LowVoltageProgram
低电压编程当使用MPLAB-ICD时，低电压烧写应禁止。可以用RB3作为数字I/O。
CodeProtectData
EEPROM数据保护本范例关闭了EEPROM数据保护
FlashMemoryWrite
闪速存储器写本范例没有使能通过EECON寄存器对FLASH存储空间进行擦写
CodeProtect
代码保护本范例关闭了代码保护
表2-2：配置位和芯片类型的选择
2.4.2.3芯片ID码和代码校验和
在图2-10所示的MPLAB-ICD选项会话窗口中，用户还会看到代码校验和（CHECHSUME）及ID代码（IDCode）这两个窗口。在本范例中，我们选择“UseChecksumasID”，使用代码校验和（CHECHSUME）作为ID代码。
2.4.2.4电压选择
用鼠标点击更新（Update）按钮即可检查目仿真器主机上电源Vdd（芯片供电）和Vpp（编程电源）的电压值。
MPLAB-ICD的编程电压大约为13伏特，该电压是将电源电压Vdd通过开关升压电路（BoostConverter）升压后得到的。
2.4.2.5编程选项
程序地址范围（起始地址和结束地址）是可以被读取、编程或校验的程序或数据存储器地址范围。默认的程序地址范围被设定为用户所选芯片的程序存储器的最大范围。本范例将使用默认的程序地址范围。
确信程序选择项（ProgramOptions）下的所有检查项都已经选中（有“√”符号为选中）。这意味着所有存储器、ID代码、配置位都将被编程。而且所有的存储器都将会在编程之前被全部清除；芯片被设置为调试（Debug）模式。
2.4.3对PIC16F877进行编程
点击Program按钮，这时候就会将tut877.hex这个十六进制文件和调试代码（DebugCode）写入MPLAB-ICD仿真头或用户目标板（教学实验板）中的PIC16F87X里。编程过程可能要用几分钟。在编程过程中，状态栏（Statusbox）里将会显示当前的操作顺序。当编程过程结束后状态栏里将会显示信息“Waitingforusercommand”（等待用户命令）。
注意：调试代码（DebugCode）是PIC16F87X微控制器里地址范围1F00h~1FFFh的一组特殊代码，这些区域用来存放MPLAB-ICD在线调试功能的监控程序。
用户可以最小化或移动MPLAB-ICD会话窗口而不能关闭它：关闭MPLAB-ICD会话窗口将退出MPLAB-ICD开发环境。假如想重新进入MPLAB-ICD，使用命令：Options>DevelopmentMode选择MPLAB-ICD并点击OK即可重新使用ICD环境。
2.4.4运行及调试
最后要做的就是运行程序，并对其进行调试。MPLAB为方便使用，把常用的一些运行、调试命令及窗口选项以小图标的形式置于工具栏中。当用户鼠标移至小图标上时，背景窗体的左下角将会显示相应的说明。
以下对常用运行、调试命令及窗口选项进行简要的介绍。
运行（Run）：点击此项后芯片将全速运行片内程序，直至遇到断点或是接到了停止命令。图标：
停止（HalttheProcessor）：点击此项后芯片将停止运行当前程序。图标：
单步（Step）：点击此项后芯片将执行当前行的指令。图标：
连续单步（StepOver）：点击此项后芯片将由当前行开始，连续执行单步操作，直至遇到断点或是接到停止命令。图标：
复位（ResetProcessor）：点击此项后芯片将被复位。图标：
程序存储器窗口（ProgramRegisterWindow）：点击此项后将打开程序存储器窗口。图标：
通用寄存器窗口（FileRegisterMemory）：点击此项后将打开通用寄存器窗口。图标：
特殊功能寄存器窗口（SpecialFunctionRegisterWindow）：点击此项后将打开特殊功能寄存器（SFR）窗口。图标：
增加新变量窗口（CreateNewWatchWindow）：点击此项后将打开观察变量窗口，并允许用户添加新的观察变量。图标：
合理运用运行调试手段将有助于更快更好的调试用户程序。例如：
使用变量观察窗可以集中观察用户关心的变量寄存器内的数据变化情况
特殊寄存器窗口集中显示了特殊功能寄存器内的数据，用户根据其变化可以判断出各功能模块的运行状况
使用单步可以观察到执行该行指令后的效果
使用连续单步可以较为直观的观察到程序的运行路径，子程序的跳转情况
设置断点可以让程序在某一句上停下，因此可以用来判断某一子程序的入口条件是否准确，可以让程序迅速的停在要分析的程序段上
各个运行调试手段的作用远不止上述的几点，这需要用户在实际运行调试中自己体会。
注意:使用MCD1配套DEMO板实验此程序时,须将实验板S13的第2位置ON,在运行过程中调整实验板上VR1的值会将A/D转换后取得的不同值在实验板上RC口的LED上显示.
MCD1-DEMO教学实验板

前言
MCD1-DEMO教学实验板是PIC单片机学习网为PIC16F87X系列芯片专门设计的一款多功能的、适于教学及自学用的实验仪器。
MCD1-DEMO教学实验板为16F87X系列芯片的各个功能模块提供了相应的实验电路，以便用户调试及验证。在此基础上，PIC单片机学习网还为初、中级使用者设计了一些对应于实验板功能的实验，并为其编写了教学实验程序。
实验板包括以下电路：
8个LED显示
1602LCD显示
6位数码管电路
6个独立键盘
外部中断键盘输入
红外线遥控接收输入
RS232通信接口电路
SPIEEPROM通信电路
I2CEEPROM通信电路
DS18B20数字测温电路（DS18B20芯片为选购器件，不在MCD1整套范围内）
一路电位器模拟AD输入.
一路直流蜂鸣器可做各种发音实验.
所有IO口通过拔码开关可独立从DEMO板引出，方便用户扩充其它资源
第三章用实验板作一个开发实验

在本节中，我们将利用MCD1-DEMO教学实验板做一个简单的开发实验。
在本次实验中，我们以非常简单的LED流水灯为例,介绍使用MCD1仿真调试套件开发调试一个项目的全过程.
3.1开发前准备工作
开发前先看看你是否已经准备好了：
1、开发工具：
MCD1（MPLAB-ICD）硬件仿真器及配合硬件使用的MPLAB-IDE软件
2、实验板：
MCD1-DEMO教学实验板.
3.2实验开始
针对演示板上的硬件资源，我们先用一个小程序作为学习和应用MCD1在线调试工具套件，进行项目的软件和硬件联合调试的范例程序，也就是当做一个用户程序实例，而演示板暂时充当用户电路的角色。这样就构成了一个软件、硬件齐全的自制项目模拟环境。
本程序实现的功能是，把端口RC的8条引脚全部设置为输出模式，依次从引脚RC0到RC7送出高电平，然后再依次从引脚RC7到RC0送出高电平，并且周而复始，从而使得与该端口C相连的8只发光二极管LED循环依次点亮，其效果类似于一个简单的霹雳灯。
程序实例

;************************************************
;《霹雳灯》程序。文件名为“LED1.ASM”
;**************************************************
statusequ3h;定义状态寄存器地址
portcequ7h;定义端口C的数据寄存器地址
triscequ87h;定义端口C的方向控制寄存器地址
flagequ25h;定义一个控制左移/右移的标志寄存器
org000h;定义程序存放区域的起始地址
nop;放置一条ICD必须的空操用指令
bsfstatus,5;设置文件寄存器的体1
movlw00h;对端口C的方向控制码00H先送W
movwftrisc;再由W转移到方向控制寄存器
bcfstatus,5;恢复到文件寄存器体0
movlw01h;将00000001B先送W
movwfportc;再由W转移到数据寄存器
bsfflag,0;将左右移标志位置1,首先进行左移LED
bcfstatus,0;将标志位C先清0
loopbtfssstatus,0;测试进位/借位位,是1则修改标志
gotoloop1;是0则不修改标志
comfflag,1;FLAG的BIT0作为标志位,把它取反
loop1btfssflag,0;判断标志位，是1则跳到循环左移
gotoloop2;是0则跳到循环右移
rlfportc,0;循环左移端口C数据寄存器，结果送W
movwfportc;将结果再送回端口C的数据寄存器
gotoloop3;跳过下面两条指令
loop2rrfportc,0;循环右移端口C数据寄存器，结果送回W
movwfportc;将结果再送回端口C的数据寄存器;
loop3calldelay;调用廷时子程序
gotoloop;返回
;-------------------------廷时子程序----------------------------
delay;子程序名，也是子程序入口地址
movlw0ffh;将外层循环参数值FFH经过W
movwf20h;送入用作外循环变量的20H单元
lp0movlw0ffh;将内层循环参数值FFH经过W
movwf21h;送入用作内循环变量的21H单元
lp1decfsz21h,1;变量21H内容递减，若为0跳跃
gotolp1;跳转到LP1处
decfsz20h,1;变量20H内容递减，若为0跳跃
gotolp0;跳跃到LP0处
return;返回主程序
end;源程序结束
进入该实战演练的工序流程如下:
1.软硬件的安装:按照本说明书前面讲的”MPLAB-ICD的安装和使用”一节内介绍的方法操作即可.
2.创建源文件和编辑源文件;在此介绍一种不同于前面讲的创建源文件的方法,用Windows附件中的”记事本”这个为大家所熟知和好用的文件编辑器,并且可以方便的加入中文注释.不过有两点需要注意,一是注释前面的分号”;”必须用西文半角输入;二是必须用”.asm”扩展名存储到事先建立的一个专用子目录下.
3.打开MPLAB集成开发环境:首先在WINDOWS环境下,选用开始>程序>MicrochipMPLAB>MPLAB命令,启动MPLAB并进入MPLAB的桌面.
4.创建项目:选用菜单File>New或Project>NewProject,在事先建立的一个专用子目录下创建一个新项目,将用记事本创建的源文件加入到该项目中(注意:加入的.ASM源文件必须和建立的项目在同一个文件夹,否则项目将建立不成功).
5.建立项目中的目标文件:选择菜单Project>BuildAll(项目>建立所有文件),MPLAB将自动调用MPASM将项目文件管理下的源文件(.asm)汇编成十六进制的目标文件(.hex).
6.ICD参数设置:通过菜单命令Project>EditProject或者Option>DevelopmentMode,将开发模式设置为”MPLABICDDebugger”,点击OK按钮,打开ICD的工作窗口,在调试阶段,可以按照图2-10设置各项,但需注意Oscillator应设置为XT方式,尤其需要说明的是，选中“EnableDebugMode”（使能调试模式）选项，在向目标单片机烧写机器码程序时，会将调试临控程序同时写入单片机的指定程序存储器区域，然后才允许用ICD方式调试。
7.电路设置:将演示板的S1全部拔到ON，S4全部拔到OFF，S13的第5、第6、第7全部拔到OFF，LCD不要插在演示板上，以使端口C只与8只发光二极管接通;将用于选择频率的插针跳线插到“XTOSC”位置上.
8.向目标单片机烧写目标程序:用户在点击功能按钮“Program”向目标单片机烧写机器码程序时,会等待一段时间，并且在条状的状态信息栏中，出现提示信息。有一点需要引起注意，就是PIC16F87X单片机的FLASH程序存储器的擦写周期是有限的，大约为1000次，应尽量节省它的使用寿命。
9.运行和调试用户程序和用户电路:在各项参数设置好后,将ICD的工作窗口最小化,利用前面讲的”运行及调试”中介绍的几种方法进行调试.当用自动单步方式调试时,建议临时禁止廷时子程序发挥作用,具体的方法是,可在CALLDELAY指令前添加一个分号,并且重新汇编一次.为了学习目的,在调试过程中可以人为地加入一些软件漏洞(BUG)或硬件故障,来模仿单片机端口引脚的片内或片外故障.
10.定型烧写目标单片机;经过多次重复上述步骤的反复修改和调试,使得程序和电路在联机状态完全正常,这时可以进行定型烧写,即将ICD窗口中的”EnableDebugMode”(使能调试模式)选项消除,不再将调试临控程序写入单片机中.
11.独立运行验收:上一步中的烧写过程完成后,即可将ICD模块和ICD仿真头(或演示板)之间的6芯电缆断开,让单片机在演示板独立运行,观察实际效果.
好的这个实验到此就结束了，更多实验请关注我们的网站。