查看完整版本: EASY51PRO源码小析

liyf 发表于 2011-4-15 17:02:15

EASY51PRO源码小析

Easy51Pro是由聂忠强设计的一款优秀的单片机编程器,而且作者早就无私地公开该程序的源代码,在下不才,抱着学习的心态读一读,若有不妥之处,还请指正。在分析之前,我们首先要知道究竟编程器是如何工作的?也就是说,例如,对一片AT89C52来说,我们怎样才能把我们的程序烧进芯片里呢?这个问题可是做编程器的重中之重,其实只要我们打开Atmel的网站找一下,就可以找到89C52的DATASHEET,好可惜是英文的,英语不好的朋友可以找一下中文版的,只是不是每一个芯片都有中文资料的,所以学好英语还是有好处的啦。从DATASHEET中我们可以知道,AT89C52的编程方法:1,在地址线上加上要编程单元在地址信号(图9,)2,在数据线上加上要写入的数据字节(图9)3,激活相应的控制信号(看表格示)4,在高电压编程方式时,将EA/VPP端加上+12V编程电压(看表格示)5,每对Flash存储阵列写一个字节或每写入一个程序加密位,加上一个ALE/PROG编程脉冲。每个字节写入周期是自身定时的,通常约为1.5ms。重复1-5步,改变编程单元的地址和写入的数据,直到全部文件编程结束

对于并行编程器来说,它们的作用就是完成上面的5步而已。现在我们来看文件AT89C51PRO.C其中一个擦除函数(命令)void Erase00()//擦除器件{InitPro00();//根据器件的DataSheet,设置相应的编程控制信号P2_6=1;P2_7=0;P3_6=0;P3_7=0;Delay_ms(1);SetVpp12V();//将EA/VPP端加上+12V编程电压Delay_ms(1);P3_2=0;Delay_ms(10);P3_2=1;Delay_ms(1);ProOver00();}看完再对比一下编程真值表的第3行,Chip Eraser,呵呵,对应着呢,而且,整个的AT89C51PRO.C文件就是对89C51/52的所有读,擦,写等操作,同样的,另外两个AT89C2051PRO.C和AT89S51PRO.C也是同样对其所对应的芯片的一系列操作,但你应该注意到,对89S51/52等具有ISP功能的单片机,该编程器是用ISP的方式来编程,当然你也可以自行修改为用并行方式编程。到现在你是否会奇怪,程序是如何调用不同的子程序对不同型号的芯片进行操作呢?答案可以看主程序包含的文件E51PRO.H一个结构struct _prowork//定义编程器的一般操作,具体器件的编程器实现下列函数{void (*fpInitPro)();//编程前的准备工作void (*fpReadSign)();//读特征字void (*fpErase)();//擦除器件BOOL (*fpWrite)(BYTE);//写器件BYTE (*fpRead)();//读器件void (*fpLock)();//写锁定位void (*fpProOver)();//编程结束后的工作};typedef struct _prowork ProWork;ProWork
pw; 再看看AT89C51PRO.C中的PreparePro00()函数里面搞了些什么?void PreparePro00()
//设置pw中的函数指针,让主程序可以调用上面的函数{
pw.fpInitPro=InitPro00;

pw.fpReadSign=ReadSign00;
pw.fpErase=Erase00;
pw.fpWrite=Write00;
pw.fpRead=Read00;
pw.fpLock=Lock00;
pw.fpProOver=ProOver00;}类似地,我们也能在AT89C2051PRO.C和AT89S51PRO.C中找到相似的函数。到这里,你接下来要做的事,就是好好读一下主程序E51P.C了最后若各位有什么见解或问题的话,欢迎一起探讨

jy11 发表于 2017-12-25 15:08:28

细节 都讲到了,版主 耐心。

muelfox 发表于 2018-8-13 18:46:49

感谢分享, 感谢分享

robter 发表于 2021-8-13 06:55:30

这个每次看看都有收获,感谢楼主

rayin 发表于 2021-8-17 09:21:32

好帖不能沉

raymond_au 发表于 2023-11-30 11:40:03

谢谢楼主经验分享
页: [1]
查看完整版本: EASY51PRO源码小析