📄 unit5.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 + -