新闻中心

EEPW首页>嵌入式系统>设计应用> 一种实用的PIC编程器的设计

一种实用的PIC编程器的设计

作者: 时间:2010-01-15 来源:网络 收藏

3.2 PC指针的处理及寻址方法
在对其编程的过程中,需要知道当前的PC指针指向的Flash存储区单元地址,也就是当前的操作单元。由于无法直接读取其PC指针的值,故采用在 89C5l的RAM区定义一个变量用来记录的PC指针(12位,占用2字节)。该变量的值始终和的PC指针一致,读取该值便可取得当前所操作的PIC的Flash存储单元地址。

变量的操作应该遵循如下运算规则:
①只有“加1”这一种运算;
②03FF+1=0000(03FF为PIC10F202的存储器末地址)}
③当变量的值不等于03FF时,其“加l”运算与指针值“加1”同步;
④初始情况下,指针的值指向03FF。
PICl0F202的Flash单元地址为0000H~03FFH。在以上运算规则下,记录PC指针的变量值也只能是0000H~03FFH,通过“加1”运算即可寻址到每一个Flash存储单元。

3.3 数据的读取
从Flash存储单元中读取数据位的方法:先是6个时钟下降沿输入6位命令字,在接收到这个命令字后,PIC将当前PC指针所对应ROM存储单元的值按位由ISDAT输出。在第6个下降沿结束后,经延时,在时钟脉冲每个上升沿对ISDAT采样,一共16个上升沿,输出16位的数据。第2~13位是12位的数据;14、15位无效;首位和末位分别是起始位和结束位,如图5所示。

读取数据时有两点值得注意:
①命令字的输入和其他操作相同,但数据输出时是上升沿有效;
②由于01FFH和0204H是系统预定值单元,当寻址到这两个单元时,执行读取指令后必须保留其内容,以便编程时恢复。

3.4 写入Flash方法
数据写入Flash的过程如下:
每次导入一个字节的数据(12位),输入开始写入的指令码,经过一段时间参数的延时,再输人结束写入指令码,就完成一个字节的写入过程。但需要注意的是,无论是数据读取还是写入,都是对当前PC指针所指向的F1ash单元进行的;而且数据写入只有在当前存储单元已经被擦除的情况下才可以正确地实现。

指令输入形式(如芯片擦除、开始写入、结束写入和地址加1等)可以查得其命令宇,其输入方法与图4和图5类似,每个指令都需要时钟脉冲的6个下降沿输入。仅有“导入数据”和“读取数据”2条命令需要后跟数据字节,其他的指令在输入完成后,经延时,便可以进行下一条指令的输入。字节写入流程如图6所示。

3.5 配置字编程及代码保护的处理
配置字是关于PIC的设置,包括是否使能看门狗,是否采用I/O弱上拉,以及MCLR引脚的配置等。配置字在03FFH单元,PIC进入编程模式时,配置字单元就是Pc指针所指向的单元。配置字的写入方法与一般的代码写入方法一致。一旦设置了代码保护,用户代码空间的0040H以上的字节读出为“0”,其他的配置空间依旧可以正确读出,包括配置字单元和用户ID区。配置字可以被多次写入,但是在任何情况下擦除配置字单元,用户储存区的代码也同时被擦除。可以通过图7的方法解除代码保护,但是这样的处理会将整个Flastl存储空间全部清除,所以在代码保护使能的情况下,是不可能正确读取代码值的。即使可以重写配置字,但是重写过程中代码已经被清除。

3.6 预定值的处理
每个PIC芯片都没有厂家设定的预定值。这些值是不应该被更改的,否则PIC芯片就无法正常工作。ROM区的01FFH单元保存复位向量,系统复位后,PC 指针将指向该单元。0204H单元保存着OSSCAL的值。这两个单元的值应该先读出并且保存在一个临时单元(因为在芯片擦除的过程中会丢失),待到需要编程的代码执行完毕,再从临时单元读出并写入相应的位置。其实际过程就是一个“读取保存恢复”的过程。

要读取预定值,首先必须寻址到预定值所在的单元。其寻址的过程如图8所示:进入编程模式后,此时指向的存储单元是03FFH,89C51中记录PC指针的变量的值也应该设置成03FF。按照该变量的运算规则,执行地址加1指令,变量值也加1,并查询当前变量的值,直到所需的存储单元为止。恢复的过程是先寻址到01FF和0204单元,然后把保留的值写入,具体流程与图8类似。



评论


相关推荐

技术专区

关闭