⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit5.cpp

📁 ISP 并口下载工具
💻 CPP
字号:
//---------------------------------------------------------------------------


#pragma hdrstop

#include "Unit5.h"
#include "Unit4.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
bool penable(void)
{
  unsigned char order[4]={0xac,0x53,0x00,0x00};
  unsigned char i,temp;
  for(i=0;i<4;i++)
   {
     temp=outinbyte(order[i]);
   }
  if(temp!=0x69)
   {
    Form1->Memo2->Lines->Add("发送编程允许命令错误!");
    return false;
    }
  return true;
}
//==========================================================
void erase(void)
{
  unsigned char order[4]={0xac,0x80,0x00,0x00};
  unsigned char i;
  for(i=0;i<4;i++)
   {
     outinbyte(order[i]);
   }
  delayus(500000);
  Form1->Memo2->Lines->Add("完成擦除芯片操作!");
}
//==========================================================
unsigned char readbyte(unsigned char *p)
{
  unsigned char i,temp;
  for(i=0;i<4;i++)
   {
     temp=outinbyte(*(p+i));
    }
  return temp;  
}
//===========================================================
void writebyte(unsigned char *p)
{
  unsigned char i;
  for(i=0;i<4;i++)
   {
     outinbyte(p[i]);
    }
  delayus(600);
}
//==========================================================
void wrlockbit(unsigned char bit)
{
 unsigned char order[4];
 unsigned char i;
 order[0]=0xac;
 order[2]=0;
 order[3]=0;
 if(bit>=1)
  {
   order[1]=0xe1;
   for(i=0;i<4;i++)
     outinbyte(order[i]);
  }
  delayus(10000);
 if(bit>=2)
  {
   order[1]=0xe2;
   for(i=0;i<4;i++)
     outinbyte(order[i]);
  }
  delayus(10000);
 if(bit==3)
  {
   order[1]=0xe3;
   for(i=0;i<4;i++)
     outinbyte(order[i]);
  }
  delayus(10000);
  Form1->Memo2->Lines->Add("写入加密位成功");
}
//==========================================================
void relockbit(void)
{
  unsigned char order[4]={0x24,0x00,0x00,0x00};
  unsigned char i,temp;
  AnsiString lockbit;
  for(i=0;i<4;i++)
   {
     temp=outinbyte(order[i]);
   }
  i=temp & 0x10;
  if(i>0)
   lockbit="B3=1,";
  i=temp & 0x08;
  if(i>0)
   lockbit=lockbit+"B2=1,";
  i=temp & 0x04;
  if(i>0)
   lockbit=lockbit+"B1=1";
  lockbit="加密位:"+lockbit;
  i=temp & 0x1c;
  if(i==0)
   lockbit="加密位:B3=0,B2=0,B1=0";
  Form1->Memo2->Lines->Add(lockbit);
}
//===========================================================
void readID(void)
{
  unsigned char order[3][4]={{0x28,0x00,0x00,0x00},{0x28,0x01,0x00,0x00},{0x28,0x02,0x00,0x00}};
  unsigned char i,IDA,IDB,IDC;
  for(i=0;i<4;i++)
   {
    IDA=outinbyte(order[0][i]);
   }
  for(i=0;i<4;i++)
   {
    IDB=outinbyte(order[1][i]);
   }
  for(i=0;i<4;i++)
   {
    IDC=outinbyte(order[2][i]);
   }
  if(IDA==0x1e)
    Form1->Memo2->Lines->Add("该芯片是Atmel产品");
  if(IDB==0x51)
    Form1->Memo2->Lines->Add("芯片名是:AT89S51");
  if(IDB==0x52)
    Form1->Memo2->Lines->Add("芯片名是:AT89S52");
  if(IDC!=0X06)
    Form1->Memo2->Lines->Add("读取芯片信息错误,(200H)不等06H");
}
//=============================================================
unsigned int getromsize(void)
{
  unsigned char order[4]={0x28,0x01,0x00,0x00};
  unsigned char i,IDB;
  int romsize;
  for(i=0;i<4;i++)
   {
    IDB=outinbyte(order[i]);
   }
  if(IDB==0x51)
   romsize=4096;
  else if(IDB==0X52)
   romsize=8192;
  else
   romsize=0;
  return romsize; 
}
//===========================================================
void pageread(unsigned char *read,int readsize)
{
  bool byteread;
  int i,j,k,mod;
  int beginaddress,endaddress;  
  unsigned char temp,page;
  unsigned char order[4];
  page=(unsigned char)(readsize/256);
  Form1->ProgressBar1->Max=readsize/10+1;
  if(readsize%256!=0)
   {
     byteread=true;
     mod=readsize-page*256;
     beginaddress=page*256;
     endaddress=beginaddress+mod;
    }
  else
    byteread=false;
  if(page!=0)
   {
    order[0]=0x30;
    order[2]=0;
    for(j=0;j<page;j++)
     {
       order[1]=j;
       outinbyte(order[0]);
       outinbyte(order[1]);
       k=256*j;
       for(i=0;i<256;i++)
        {
          temp=outinbyte(order[2]);
          read[k+i]=temp;
          if((k+i)%10==0)
           Form1->ProgressBar1->Position=Form1->ProgressBar1->Position+1;
         }
      }
   }
 if(byteread)
  {
    order[0]=0x20;
    order[3]=0;
    for(i=beginaddress;i<endaddress;i++)
     {
       order[2]=i;
       order[1]=i >> 8;
       read[i]=readbyte(order);
       if(i%10==0)
         Form1->ProgressBar1->Position=Form1->ProgressBar1->Position+1;
     }
  }
 Form1->ProgressBar1->Position=0;
 Form1->Memo2->Lines->Add("已经将芯片数据读取出来了!");
}
//===========================================================
void pagewrite(unsigned char *prom,unsigned int promsize)
{
 bool bytewrite;
 int i,k,mod;
 int beginaddress,endaddress;
 unsigned char j,page,order[4];
 page=(unsigned char)(promsize/256);
 Form1->ProgressBar1->Max=promsize/10+1;
 if(promsize%256!=0)
   {
     bytewrite=true;
     mod=promsize-page*256;
     beginaddress=page*256;
     endaddress=beginaddress+mod;
   }
 else
    bytewrite=false;
 order[0]=0x50;
 if(page!=0)
  {
   for(j=0;j<page;j++)
    {
     order[1]=j;
     outinbyte(order[0]);
     outinbyte(order[1]);
     k=256*j;
     for(i=0;i<256;i++)
      {
        outinbyte(prom[k+i]);
        if((k+i)%10==0)
         Form1->ProgressBar1->Position=Form1->ProgressBar1->Position+1;
      }
     delayus(600);
   }
  }
 if(bytewrite)
  {
    order[0]=0x40;
    for(i=beginaddress;i<endaddress;i++)
     {
       order[2]=i;
       order[1]=i >> 8;
       order[3]=prom[i];
       writebyte(order);
       if(i%10==0)
         Form1->ProgressBar1->Position=Form1->ProgressBar1->Position+1;
     }
  }
 Form1->ProgressBar1->Position=0;
 Form1->Memo2->Lines->Add("已经完成烧写芯片操作了!");
}
//===========================================================
#pragma package(smart_init)
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -