摘要 介绍一种简洁有用的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所示,由主控机、操控模块、监控显现模块和方针芯片组成。主控机选用89C51单片机,用单片机的2个I/O口别离供给ISDAT和 ISCLK信号;方针芯片即PIC。PIC的MCLR端为编程方式挑选端。为了让PIC10F202能够进入编程情况,需求由操控模块完结对MCLR端的电平操控。监控显现模块用于指示现在体系的作业情况和监控体系运转。
2.1 操控模块的完结
为了完结操控模块对MCLR端的电平操控,运用2个晶体管T1、T2,如图3所示。当单片机I/O口为高电位时,T1导通,其发射级为低电位,T2导通,所以电源VPP与PIC的MCLR端接通;当I/O口为低电位时,T1截止,其发射级为高电位,T2截止,VPP和MCLR端之间断开。
2.2 监控显现模块
选用一组发光二极管来显现体系情况和编程成果。体系的作业情况包含:方针芯片检测、安排妥当等候、编程进行中、代码校验等。体系在安排妥当等候情况下,安排妥当情况灯亮,主控机监控按键指令;接到指令后即进入编程情况,一起编程灯亮,编程后履行校验,校验完结后完毕灯亮,阐明完结整个缩程作业。整个编程进程中,若遇到毛病,相应毛病灯显现。
3 体系软件规划
3.1 数据(指令)输入办法
无论是指令仍是需求写入的代码数据,都在相应的时钟节拍下由串行数据端输入。串行时钟一直与串行数据的要求共同。关于不同的指令,时钟脉冲间的时刻参数 t1~t6的要求是不同的。在相应时钟脉冲下降沿,PIC对数据端采样,指令代码在前,一段时刻延时后,输入代码数据。数据低位在前,高位在后,如图4所示。时刻参数的详细要求见参考文献。
下面以数据导入为例扼要阐明。
代码举例如下:
由指令字表中可知,若导人数据的指令字是xx0010B,低位在前由ISDAT输入,每次ISCLK的下降沿对ISDAT采样。以上代码完结了“0”、 “1”的输入,其他指令的输入相似。数据输入和指令输入都是下降沿有用。每次导入1字节的数据为12位,可是有必要在16个时钟脉冲中完结。前6个时钟脉冲的下降沿输入指令字,且前4位有用。一段时刻参数的推迟后,数据开端输入,第1个时钟下降沿输入开端位,后第2~13个时钟的下降沿输入1字节的数据,共 12位。第14、15个时钟下降沿输入数据无效,最终一个下降沿输入中止位(开端位和中止位固定为O)。
3.2 PC指针的处理及寻址办法
在对其编程的进程中,需求知道当时PIC的PC指针指向的Flash存储区单元地址,也便是当时的操作单元。由于无法直接读取其PC指针的值,故选用在 89C5l的RAM区界说一个变量用来记载PIC的PC指针(12位,占用2字节)。该变量的值一直和PIC的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相似。
3.7 软件流程
体系在初始化中,假如检测到方针芯片现已装置安排妥当,监控显现模块便会显现体系处于安排妥当情况,然后监控按键。一旦按键按下。编程开端,如图9所示。先读取体系预订值并保存在主控机的RAM中,然后PIC芯片擦除,包含用户运用的代码区和PIC体系装备区。擦除完结后,将PC指向首地址0000H,开端代码写入,每次写入l个字节的代码,写完后校验。一切代码写完后,康复已保存的预订值,康复的进程与代码写入共同。
寻址到装备字单元后进行装备字写入,在从前的擦除作业中,装备字单元现已擦除。写入的进程也与代码写入共同。
整个编程进程中,监控显现模块会显现现在的体系情况。写入进程中(包含代码、预订值和装备字等)呈现的任何过错,编程会报错中止,并回到安排妥当等候情况,等候下次编程的开端。
若无任何过错的情况产生,体系显现编程成功,整个芯片编程进程完毕。
4 小结
本体系操作简略,功能安稳,编程速度快,无需PC机的支撑。一切的代码均保存在主控机的ROM区中。在主控机ROM写维护的情况下,代码不可能被读出,具有很强的保密性。需求的外部设备少,易于带着,并且成本低。本办法关于工业现场的批量芯片编程有必定学习含义。