?? at89s51isp.cpp
字號:
// At89s51Isp.cpp: implementation of the CAt89s51Isp class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "EPro.h"
#include "At89s51Isp.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CAt89s51Isp::CAt89s51Isp()
{
m_pParlPro=NULL;//該類所支持的FID
FID=0x02;
}
CAt89s51Isp::~CAt89s51Isp()
{
}
void CAt89s51Isp::InitIsPro(CParallelPro* pParlPro)
{
TRACE("CAt89s51Isp::InitIsPro\n");
CIsPro::InitIsPro(pParlPro);//得到并口編程器對象的指針
}
void CAt89s51Isp::PreparePro()//編程前的準備工作
{
m_pParlPro->SetRst(0);//RST置低電平
m_pParlPro->SetMosi(0);//MOSI置低電平
m_pParlPro->SetSck(0);//SCK置低電平
Sleep(10);
m_pParlPro->SetRst(1);
Sleep(10);
m_pParlPro->OutBuf[0]=0xac;
m_pParlPro->OutBuf[1]=0x53;
m_pParlPro->SckBytes(4);
}
void CAt89s51Isp::ProOver()//編程結束后的工作
{
m_pParlPro->SetRst(0);//RST置低電平,這樣單片機就開始運行了
m_pParlPro->SetMosi(1);
m_pParlPro->SetSck(1);
}
void CAt89s51Isp::ReadSign(BYTE* pBuf)//讀特征字
{
m_pParlPro->OutBuf[0]=0x28;//根據器件手冊上規定的命令協議
m_pParlPro->OutBuf[1]=0x00;
m_pParlPro->OutBuf[2]=0x00;
m_pParlPro->OutBuf[3]=0x00;
m_pParlPro->SckBytes(4);//向器件發編程命令
pBuf[0]=m_pParlPro->InBuf[3];//第1個特征字
m_pParlPro->OutBuf[1]=0x01;
m_pParlPro->SckBytes(4);
pBuf[1]=m_pParlPro->InBuf[3];//第2個特征字
m_pParlPro->OutBuf[1]=0x02;
m_pParlPro->SckBytes(4);
pBuf[2]=m_pParlPro->InBuf[3];//第3個特征字
}
void CAt89s51Isp::Erase()//擦除器件
{
m_pParlPro->OutBuf[0]=0xac;//根據器件手冊上規定的命令協議
m_pParlPro->OutBuf[1]=0x80;
m_pParlPro->SckBytes(4);//向器件發編程命令
Sleep(500); //擦除器件要500ms
}
BOOL CAt89s51Isp::Write(BYTE Data,int nAddr)//寫一個單元
{
int nTimeOut=0;
m_pParlPro->OutBuf[0]=0x40;//根據器件手冊上規定的命令協議
m_pParlPro->OutBuf[1]=((BYTE*)&nAddr)[1];//高地址
m_pParlPro->OutBuf[2]=((BYTE*)&nAddr)[0];//低地址
m_pParlPro->OutBuf[3]=Data;
m_pParlPro->SckBytes(4);//向器件發編程命令
while(Read(nAddr)!=Data)//效驗:循環讀,直到讀出與寫入相同的數
{
nTimeOut++;
if(nTimeOut>=1000)//如果超時了,寫入失敗
return FALSE;
}
return TRUE;
}
BYTE CAt89s51Isp::Read(int nAddr)//讀一個單元
{
m_pParlPro->OutBuf[0]=0x20;//根據器件手冊上規定的命令協議
m_pParlPro->OutBuf[1]=((BYTE*)&nAddr)[1];//高地址
m_pParlPro->OutBuf[2]=((BYTE*)&nAddr)[0];//低地址
m_pParlPro->SckBytes(4);//向器件發編程命令
return m_pParlPro->InBuf[3];
}
BOOL CAt89s51Isp::LockBit(int nBit)
{
if(nBit>=1)//ComBuf[2]為鎖定位
{
m_pParlPro->OutBuf[0]=0xac;//根據器件手冊上規定的命令協議
m_pParlPro->OutBuf[1]=0xe1;
m_pParlPro->SckBytes(4);
Sleep(1);
}
if(nBit>=2)
{
PreparePro();
m_pParlPro->OutBuf[0]=0xac;//根據器件手冊上規定的命令協議
m_pParlPro->OutBuf[1]=0xe2;
m_pParlPro->SckBytes(4);
Sleep(1);
}
if(nBit==3)
{
PreparePro();
m_pParlPro->OutBuf[0]=0xac;//根據器件手冊上規定的命令協議
m_pParlPro->OutBuf[1]=0xe3;
m_pParlPro->SckBytes(4);
Sleep(1);
}
return TRUE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -