微型机与应用
WEIXINGJI YU YINGYONG
2000　Vol.19　No.5　P.18-19




用PC机直接开发单片机系统
马正红　岳兴良　董小虎　郝宝钟
摘 要：一种不依赖于仿真器、通过PC机串行口直接调试目标系统的单片机自开发方法。
关键词：直接调试 自编程 自举 可重定位 PC机
　　贵刊1999年第8期登载的一篇“用PC机直接调试单片机系统的实现”的文章很有新意，拓宽了单片机开发的思路，但仍存在少许不足之处，其不足之处有：
　　（1）要求目标系统既要有外部ROM又要有外部RAM，不适合仅有外部ROM或仅有外部RAM的系统；
　　（2）要求使用地址浮动技术进行目标机程序设计，若不小心，则易出错；
　　（3）不适合ROM大、RAM小的目标系统，因为在这种情况下，系统RAM装不下被调试的代码；
　　（4）系统不具有自编程功能，仍依赖专用开发装置，限制了其应用范围。
　　本文介绍一种新的方法可克服以上不足，特别是无须编程器，目标系统自己将调试成功后的代码固化到EPROM中，真正摆脱了对专用开发设备的依赖，更加具有实用价值。
1 设计思路
　　本方法不采用EPROM存放监控程序，而是将监控程序放在CPU内，即采用内含ROM的8751、8752、89C51、89C52等作调试用CPU。这样在调试期间，系统就摆脱了对外部ROM的依赖性，目标机的ROM在调试期间就可以用相应的RAM来替代，也就允许目标系统是一个仅有外部RAM或仅有外部ROM的系统。
　　8751的特点是：当EA脚接高电平时，若指令指针IP未超过内含ROM容量，指令将从片内取得；当EA脚接低电平或IP值已超过内含ROM容量时，指令将从外部ROM中取得。
　　假若开机时，使系统工作于EA为高电平的状态，并将内含的监控程序搬移至外部RAM的高端，然后转高端的监控程序执行，待其已转入高端监控程序后，再将EA脚置低电平，则此时的系统与8031系统没有什么差别。由于监控程序在高端地址，故被调试的程序可从0000H开始放置，但这要求目标系统采用合并代码、数据空间模式。
　　另外，当8751工作在内部取指状态时，其P0、P2口是标准的并行端口，因而可利用这二个端口向与之相连的EPROM发出固化时序，并通过对硬件电路作少量的修改，以实现目标系统的自我固化。
2 硬件和软件
2．1 制作开发专用CPU
　　选一块质量较好的89C52，将设计好的监控程序固化在内部（此后开发类似系统不再依赖固化设备），并将CPU的EA脚扳起来。找1个小巧的单刀双掷开关，开关的中间脚用短导线焊接至CPU的EA脚，开关的另二脚分别用短导线焊接至CPU的电源脚及接地脚，用环氧树脂将开关及导线浇铸在CPU的背部，使之成为坚固的一体，制备好的CPU就是一个功能强大的开发工具。
2．2 目标系统的线路设计
　　目标系统应采用合并代码、数据空间模式。设计时，将EPROM当作相同容量的RAM看待，即把整个系统的存储器都设计成既可存取数据又可存取指令的形式。因程序固化时，EPROM的VPP脚应接固化电压，而正常工作时VPP与电源相连，设计时，可在VPP与VCC间加一跳线开关JP1。考虑到在正常工作时，锁存器的G脚（或CLK）应由CPU的ALE控制，而在对EPROM编程时，G脚就不能由ALE控制，因为ALE上电平的每个指令周期都在跳变，因而无法将锁得的编程地址长时间保持不变。设计时，可将G与ALE通过跳线开关JP2连接起来，G与P1．7（或其它端口）通过跳线开关JP3连接起来，如图1所示。

图1 硬件电路的存储线路示例
　　以上做法的目的是：在调试期间，开发者可在ROM座上插入相同容量的RAM，将JP2短接，JP3断开，就可将代码装载到它自身的地址空间被调试；在固化阶段将JP1、JP2断开，JP3短接，RAM换成EPROM，在JP1的靠VPP一侧的桩上加上固化电压，让CPU中的监控程序模拟EPROM的固化时序即可实现对目标系统的自编程。当目标系统研制成功后，将JP3断开，JP1、JP2短接即可投入实际运行。
　　对目标系统的串行通信口的处理与本刊1999年第8期介绍的方法相似，但可把电平转换电路做在通信电缆上，转换电路需要的＋5V电压，可从接插口取得，即通信接插口应多加1针，并使之与＋5V电源相连。这样，目标系统就不必增加多余电路。
2．3 监控程序
　　单片机监控程序如图2所示，包括自举程序及监控程序主体。监控程序主体中的调试控制部分可烧录在CPU片内，也可在调试时动态地从微机中装入，动态装载有利于监控程序的随时改进与升级。监控程序中的EPROM固化程序必须在CPU片内取指执行，以保证P0、P2口输出数据的稳定性。因线路及整个系统存储结构的变更，固化程序不宜使用外部RAM，而应使用内部RAM用作数据缓冲区，但内部RAM容量较小，容不下所有应被固化的代码，故应分段固化，即：PC将欲固化的代码分成包，每次向单片机传送1个固化数据包。包结构为：固化起址、代码长度、代码数据块。

图2 单片机部分监控程序流程图
3 开发过程
　　（1）设计制作目标系统的软硬件。
　　（2）将制备好的专用CPU插入CPU座，将CPU背部开关扳至电源端，在ROM座上插入相同容量RAM，JP2短接，JP3断开。
　　（3）开机复位，此时CPU片内程序开始进行系统自举，待自举完成后（时间一般很短），将CPU背部开关扳至接地端，这样，当CPU执行低地址指令时，执行的将是目标系统的程序而不是监控程序。
　　（4）利用微机与单片机通信实现目标机代码装载及调试，在调试过程中若出现死机，重新复位时按步骤3进行。
　　（5）代码调试成功后，将系统断电，在ROM座上插上EPROM，将JP1、JP2断开，JP3短接，找一电源，将其调至EPROM所需的编程电压，关掉该电源，将正极接至JP1的靠VPP一端的桩上，负极接系统地。
　　（6）将CPU背部开关扳至电源侧，开机复位，与步骤3不同，此时不要将CPU背部开关扳至接地侧，因为固化程序要执行CPU片内代码。
　　（7）打开固化电源，从微机向系统发固化命令。此时，系统将从微机中逐段取得代码并将其固化在EPROM中。
　　（8）将系统断电，拔出开发专用CPU，插入普通CPU，将JP1、JP2短接，JP3断开，目标机即研制成功。
　　用本方法开发应用系统，允许目标系统只有外部RAM或只有外部ROM，调试期间代码的执行环境与开发成功后的实际运行环境是一样的，由于代码在其自身的空间存放，因而不会出现因RAM装不下代码而无法调试的情况。同时，由于系统具有自我固化的能力，使其真正摆脱了对专用开发工具的依赖，不但能被专业开发者使用，也为业余开发者提供了一个方便途径。
马正红（总装备部四川绵阳中专校第一教研室621006）
岳兴良（总装备部四川绵阳中专校第一教研室621006）
董小虎（总装备部四川绵阳中专校第一教研室621006）
郝宝钟（总装备部四川绵阳中专校第一教研室621006）
参考文献
［1］王爱民，潘建寿，康雪艳，李晓群．用PC机直接调试单片 机系统的实现．微型机与应用，1999；(8)
收稿日期：1999－12－29
