DIY编程器网

标题: EASY51PRO源码小析 [打印本页]

作者: liyf    时间: 2011-4-15 17:02
标题: 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
细节 都讲到了,版主 耐心。
作者: muelfox    时间: 2018-8-13 18:46
感谢分享, 感谢分享
作者: robter    时间: 2021-8-13 06:55
这个每次看看都有收获,感谢楼主
作者: rayin    时间: 2021-8-17 09:21
好帖不能沉
作者: raymond_au    时间: 2023-11-30 11:40
谢谢楼主经验分享




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2