介绍一种简便实用的PIC编程器实现方案。设计思想是:以单片机作为主控机,欲写入的PIC程序代码存放在主控机中,由主控机提供PIC芯片编程所需信号,并监测整个编程流程。在时钟脉冲信号作用下,把代码写入PIC的Flash中以达到对芯片编程的目的。该方案可以在脱离PC的环境下运行,适用于对批量的PIC芯片进行编程。 关键词 PIClOF202 串行编程 89C51 随着工业生产的扩大,存在着对同一型号芯片进行相同代码编程的需要。目前采用的编程方式是通过专用的编程器来执行,其编程过程离不开PC机。在对一定批量的芯片编程时,操作比较烦琐,保密性能差,且难以在工业现场进行。 本编程器设计简单,操作方便,保密性好,易携带,需要的外部设备少。编程器以PIClOF202为例进行设计。PIClOF2xx系列是Microchip公司生产的低功耗,高性能Flash单片机。其封装小,易于使用,成本低。性能稳定,在通用电子设计中被广泛使用。本设计的基本思想适用于其他类型的单片机。 1 PICl0F2xx的存储结构及编程方法 1.1 存储空间映射 以PICl0F202为例,其内部程序存储空间映射如下: 0000H~0lFFH是用户可以使用的代码存储空间,0200H~03FFH是系统的配置空间。其中01FFH单元是复位向量,系统复位后程序指针PC将指向此地址单元。0200H~0203H是用户ID信息存储区间。0204H地址单元存放的是备份的OSCCAL值,被预留用来测试内部晶振,因此该值在任何情况下都不应该被更改。一旦被擦除,必须恢复该值,否则芯片不能正常工作。03FF地址单元存放系统的配置字,其他地址单元系统保留。 1.2 芯片编程方法 采用串行在线编程的方式,串行时钟信号由主控单元的I/O口发出,从PIC的时钟引脚ISCLK输入。在串行时钟信号作用下,串行数据从数据引脚ISDAT输入/输出,完成对芯片的Flash的代码写入。 只有在进入编程模式后,PIClOF202才能允许对其存储空间的操作,如图l所示。当保持ISDAT(串行数据输入端)和ISCLK(串行时钟输入端)为低电平时,VCC(芯片电源)上升到高电平。经tl延时,MCLR(编程模式选择端)上升到高电平,再经t2延时,开始时钟脉冲和数据的输入/输出。此时PIClOF202进入编程模式。 2 系统硬件结构 2.1 控制模块的实现 2.2 监控显示模块
由命令字表中可知,若导人数据的命令字是xx0010B,低位在前由ISDAT输入,每次ISCLK的下降沿对ISDAT采样。以上代码实现了“0”、“1”的输入,其他命令的输入类似。数据输入和命令输入都是下降沿有效。每次导入1字节的数据为12位,但是必须在16个时钟脉冲中完成。前6个时钟脉冲的下降沿输入命令字,且前4位有效。一段时间参数的延迟后,数据开始输入,第1个时钟下降沿输入起始位,后第2~13个时钟的下降沿输入1字节的数据,共12位。第14、15个时钟下降沿输入数据无效,最后一个下降沿输入停止位(起始位和停止位固定为O)。 读取数据时有两点值得注意: 3.5 配置字编程及代码保护的处理 | |||||||||
|
3.6 预定值的处理 每个PIC芯片都没有厂家设定的预定值。这些值是不应该被更改的,否则PIC芯片就无法正常工作。ROM区的01FFH单元保存复位向量,系统复位后,PC指针将指向该单元。0204H单元保存着OSSCAL的值。这两个单元的值应该先读出并且保存在一个临时单元(因为在芯片擦除的过程中会丢失),待到需要编程的代码执行完毕,再从临时单元读出并写入相应的位置。其实际过程就是一个“读取保存恢复”的过程。 要读取预定值,首先必须寻址到预定值所在的单元。其寻址的过程如图8所示:进入编程模式后,此时指向的存储单元是03FFH,89C51中记录PC指针的变量的值也应该设置成03FF。按照该变量的运算规则,执行地址加1指令,变量值也加1,并查询当前变量的值,直到所需的存储单元为止。恢复的过程是先寻址到01FF和0204单元,然后把保留的值写入,具体流程与图8类似。 3.7 软件流程 寻址到配置字单元后进行配置字写入,在先前的擦除工作中,配置字单元已经擦除。写入的过程也与代码写入一致。 |