DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4839|回复: 2
打印 上一主题 下一主题

EASY51PRO实现分析

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-15 16:50:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
EASY51PRO 软件是一个很经典的写AT89X51系列单片机的ISP下载软件,先对其实现机理做一简单分析,具体内部怎么实现,作者精心巧妙的设计,耐人寻味.

ChipList.chip    --
芯片的类型记录文件
EasyIsp.ini      -- EasyIsp-2的引脚定义
EasyPro_Info.ini -- 设置记录文件
LastFile.ini   -- 记录上次打开的文件
WinIo.sys   -- WINIO库,可以在保护模式下,直接读写端口,这里用来对并口直接操作
ChipManager.exe   -- 设置芯片类型的可视化程序
Easy 51Pro.exe   -- EASY51下载的主程序
IspTest.exe   -- 测试并口ISP下载线的测试程序
Hook.dll   -- 钩子函数,这样单独抽出来写DLL,目的是可以钩子windows消息,用来实现发送系统消息的.有待深入研究,具体使用那种类型的钩子!
WinIo.dll   -- WINIO库
XT2000Lib.dll   -- 界面库,这个大可不必吧,我在我的486上倒置了好久才让我看到程序界面,实在鸡肋啊.
先简单分析下,真希望作者能透露下具体内幕,多多学习!
                                                                                2007年12月13日 星期四 22:32

发现这篇文章的访问量特高,因此,我决定拿出我珍藏的另一份文档继续完成,那就是Easy51Pro的源码分析,就参详后续文章。
                                                                                 2008年08月07日 星期四 09:11
前言:
Easy51Pro是由聂忠强编写的一款优秀的针对单片机ISP下载的软件,并且提供可拓展的芯片型号的支持,引脚检测等功能。并且更值得敬佩的是,作者将代码开源了,我拿到这个代码已久,早就技痒想分析下这些代码,因为工作的原因一直拖延,近日由于对界面库对比使用的频繁(Easy51Play使用Xtreme界面库,本篇不涉及界面库使用方法的分析),再次读了一遍EASY51源码,因为作者优秀的OOP编程思想,使得代码流畅易懂,我边读边记录并把它公开,希望能给大家一些帮助。网上也有人对比Easy51Pro和Atmel的Microcontroller ISP Software,其中有一个功能就是Run Target的实现,最终我们也会进行探讨。希望写的纰漏的地方,大家能够不吝指正,共同进步。另期待作者的《Easy51Pro的秘密》一文早日面世,我想这是很多电子爱好者期待已久的事情吧。



图1.工程结构图
CParallelPort 是一个由WINIO库封装的并口操作类,在这里简单对WINIO库进行一下介绍。
由于MS-Windows的保护模式,出于安全的考虑,禁止用户对硬件端口进行操作,因此,对串并口的读写设置就稍微复杂了一些,不能随心所欲的对接口寄存器操作,而WINIO库就提供了接口,方便用户对端口的直接读取写入。
下面是WINIO库的几个核心函数:
WINIO_API bool _stdcall InitializeWinIo();    //初始化WINIO库
WINIO_API void _stdcall ShutdownWinIo();   //关闭WINIO库
//////////////////// 函数描述 Begin ////////////////////
// *   
// * 函数名: WINIO_API bool _stdcall GetPortVal
// *     
// * 参数:   3个参数
// *   参数1:WORD wPortAddr 端口地址
// *   参数2DWORD pdwPortVal 读取的值
// *   参数3:BYTE bSize   值位数
// *   
// * 返回值: bool 类型;
// *   
// * 备注: 读取端口的值
// *   
// * 最后修改时间: 2008-8-9 上午 02:38:55
// *   
//////////////////// 函数描述 End ////////////////////
WINIO_API bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);

//////////////////// 函数描述 Begin ////////////////////
// *   
// * 函数名:bool _stdcall SetPortVal
// *   
// * 参数:   3个参数
// *   参数1:WORD wPortAddr 端口地址
// *   参数2WORD dwPortVal 读取的值
// *   参数3:BYTE bSize   值位数
// *   
// * 返回值: WINIO_API 类型;
// *   
// * 备注: 向端口写入值
// *   
// * 最后修改时间: 2008-8-9 上午 02:41:41
// *   
//////////////////// 函数描述 End ////////////////////
WINIO_API bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
这些函数使用简单方便,如果对平台有限制的话,可以利用API判断下是否为NT系统,Win2000或WinXP先使用InstallWinIoDriver()函数安装驱动,WinIo库也提供了成员接口,更多信息,大家可以在WinIo.h文件中查看。
现在回到CParallelPort类,这个类在WinIo基础上,根据并口操作的特点,进行了封装,应该说作者的OOP观念是非常好的,它的几个关键函数:

BOOL SetPinLogic(int nPin,BOOL bLogic); //设置指定引脚, 1高电平,0低电平
BOOL GetPinLogic(int nPin);     //得到指定引脚的电平
BOOL SetPinL(int nPin);      //设置指定引脚为低电平
BOOL SetPinH(int nPin);      //设置指定引脚为高电平
WriteData(BYTE Data);      //写数据口
BYTE ReadData();       //读数据口
WriteCtrl(BYTE Ctrl);       //写控制字
BYTE ReadCtrl();        //读控制字
BYTE ReadState();       //读状态字
CString m_strDrivePath;       //驱动程序所在路径
BYTE m_CtrlByte,m_DataByte,m_StatByte; //保存当前的数据字,状态字,控制字
unsigned short m_nCtrlPort,m_nDataPort,m_nStatPort; //端口地址
值得说明的是,如果大家在改进这个类的时候,需要读写数据,该类已经帮大家做好了反相引脚的转换,这点大家可以参考我空间的《并口编程学习笔记》里的说明,因为1,14,11,17引脚是反相的,所以平时这点大家也不要马虎大意。
下面我们说说CParallelPro,通过名称分析,这个类和CParallelPort类有莫大的关系,作者的注释说:“ParallelPro.cpp: implementation of the CParallelPro class.这个类负责对并口下载线进行控制,利用’Isp编程方法对象’对器件编程”。
根据源码分析,这个类在并口类的基础上,进一步加入了通过并口进行ISP编程的特点,它的类操作流程和功能,大致是,初始化并口,从EasyIsp.ini配置文件中,读取ISP编程针脚的设置,然后再根据下载线类型等设置来进行控制。另外它还提供了诸如查找支持该FID的"Isp编程方法对象" CIsPro* CParallelPro::GetIsPro(BYTE FID) 等接口函数。
这里我们知道了在CParallelPro类里,还引入了:CAt89s51Isp(AT89S51的Isp编程方法)和IsPro(这个纯虚类封装了Isp编程流程的一般操作,请从这个类派生出对具体器件的Object)。
这两个类,是我们对本源码进行扩充和改进的关键,很多人都想对新型号的单片的ISP下载进行改进支持,这两个类是大家要研究的关键,但是我们要放到下一节中继续分析。
                                                    转至 大伦子 的大作

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏2 分享分享 支持支持 反对反对
板凳
发表于 2018-8-13 18:46:24 | 只看该作者
感谢分享,感谢分享
沙发
发表于 2017-12-25 15:06:13 | 只看该作者
好文章呀,多年以后读来,都有启发。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-23 10:21 , 耗时 0.106261 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表