📄 fy_plt.c
字号:
#include "stdio.h"
#include "time.h"
#include "math.h"
#include "conio.h"
#include "windows.h"
#include "stdafx.h"
#include "DirectPort.h"
//#define validPpt 0x378
//#define (validPpt+1) 0x379
//#define (validPpt+2) 0x37A
#define LPT1 0x378 // the search order is LPT1 then 2 then 3
#define LPT2 0x278 // first valid address found is used (re-order if needed for multiple ports)
#define LPT3 0x3bc // hardware base address for parallel port
int validPpt;
#define MISO 0x7 /*statu.7 pin11 */
#define ISCK 0x6 /*statu.6 pin10 */
#define RESET 0x1 /*command.1 pin14 */
#define SS 0x2 /*command.2 pin16 */
#define MOSI 0x1 /*data.1 pin3 */
#define PSCK 0x0 /*data.0 pin2 */
unsigned char clrbit(unsigned char byte_char,unsigned nbit);
unsigned char setbit(unsigned char byte_char,unsigned nbit);
unsigned char movbit(unsigned char byte_char1,unsigned n,unsigned char byte_char2,unsigned m);
void shout(unsigned char outdata);
unsigned char shin();
unsigned char shoutin(unsigned char outdata);
unsigned char write_code(unsigned char byte,unsigned int address);
unsigned char read_code(unsigned int address);
void send_data(unsigned char byte,unsigned int address);
int hextobin(FILE *fp);
int copybin(FILE *fp);
long hval(char *str);
void clr_ss();
void set_ss();
void clr_psck();
void set_psck();
void clr_mosi();
void set_mosi();
void set_reset();
void clr_reset();
void erase_chip();
void enable_program();
void wait(long t);
void enable_outport();
void start_program();
void end_program();
int loadfile();
void program();
void terminate();
void erasechip();
void verify();
void readbin();
void testchip();
void lockbit();
void modify();
void debug();
void waitdata();
void polling();
void main()
{ char key;
DWORD result;
result= DP_GetVer();
printf("DIRECTPORT VER: %08x ",result);
if(DP_IsNTOS())
printf("OS: WINDOWS NT ");
else
printf("OS: WINDOWS 9x ");
if(DP_UseDirectPortMode(FALSE))
printf("\nPORTMODE SET OK.");
else
printf("\nPORTMODE SET FAULT.");
// search for valid parallel port
DP_OutpB(LPT1, 0x55);
if((int)DP_InpB(LPT1) == 0x55)
{ validPpt=LPT1;
}
else
{ DP_OutpB(LPT2, 0x55);
if((int)DP_InpB(LPT2) == 0x55)
{ validPpt=LPT2;
}
else
{
DP_OutpB(LPT3, 0x55);
if((int)DP_InpB(LPT3) == 0x55)
validPpt=LPT3;
else
validPpt=0;
}
}
if(validPpt)
printf("\nValid LPT address = %x\n", validPpt);
else
printf("\nHave No Valid LPT address.\n");
enable_outport();
redoit:
printf("\n");
printf("________________________________________");
printf("________________________________________\n");
printf("AT89S53 ISP PROGRAMER & DEBUG TOOLS. Ver1.0 2007.5 FuYi WUHAN.CHINA\n");
printf("P-program\t");
printf("C-copy flash\t");
printf("E-erase chip \t");
printf("V-verify \t");
printf("M-modify \n");
printf("S-reset chip \t");
printf("T-test write\t");
printf("L-lockbit\t");
printf("R-read ram\t");
printf("W-wait data\n");
printf("Q-quit\n");
printf("Please press function key>");
key=toupper(getch());
printf("%c\n\n",key);
switch(key)
{ case 'P':
program();
break;
case 'C':
readbin();
break;
case 'Q':
terminate();
break;
case 'E':
erasechip();
break;
case 'T':
testchip();
break;
case 'V':
verify();
break;
case 'M':
modify();
break;
case 'L':
lockbit();
break;
case 'R':
debug();
break;
case 'W':
polling();
break;
case 'S':
start_program();
Sleep(100);
end_program();
break;
default:printf("You pressed the HAVE NOT defined key.\n");break;
}
goto redoit;
}
void debug()
{ unsigned x,indata,data,pre_x,pre_y;
int y;
int i;
char str[32],*pstr;
// int tempdata;
pstr=str;
// clrscr();
printf("\n\r");
printf("\nThis function need 89s53 program support.");
printf("\nAnd the 89s53 SPI should working on slave mode.");
x=0;
y=0x100;
start:
printf("\nPlese input ram address[0-ffhex]['r'read pre]:");
i=0;
RETDX:
data=getch();
if (isxdigit(data))
{
printf("%c",data);
str[i++]=data;
}
if ((data==0x72)||(data==0x52)) goto READRAM;
if (data==0x1b)
{end_program();
printf("\n");
return;
};
if(data==0x0d)
{
str[i]='\0';
x=hval(pstr);
goto length;
};
goto RETDX;
length:
printf("\nPlese input length[0-100hex]:");
i=0;
RETDY:
data=getch();
if (isxdigit(data))
{
printf("%c",data);
str[i++]=data;
}
if (data==0x1b)
{end_program();
printf("\n");
return;
};
if(data==0x0d)
{
str[i]='\0';
y=hval(pstr);
goto READRAM;
};
goto RETDY;
READRAM:
pre_x=x;
pre_y=y;
indata=shoutin((unsigned char)(x++));
printf("\n");
printf(" pre read byte:%3x\n",indata);
printf("%6s%3x%3x%3x%3x%3x%3x%3x%3x%3x%3x%3x%3x%3x%3x%3x%3x\n","tab ",0,1,2,3,4,5,6,7,8,9,0xa,0xb,0xc,0xd,0xe,0xf);
printf("------------------------------------------------------\n");
wait(1000);
printf("%3xH :",(x-1));
for (i=0;i<y;i++)
{
indata=shoutin((unsigned char)(x++));
wait(1000);
printf("\%3x",indata);
if (((i+1)%0x10==0)&&((i+1)!=y))
{printf("\n");
printf("%3xH :",x-1);}
};
printf("\n");
printf("rear send byte:%3x\n",x);
x=pre_x;
y=pre_y;
goto start;
}
int hextobin(FILE *fp)
{ char hexrec[256],char2[3],char4[5];
unsigned char ch,sum;
unsigned int i,j,prerecordlen=0,recordlen;
unsigned long preaddress=0,address;
FILE *fptemp;
if((fptemp=fopen("temp.bin","wb"))==NULL)
{ printf("\n Sorry,can't open the temp file.");
return(0);
};
nextrecord:
i=0;
ch=0;
while((i<256)&&(!feof(fp))&&(ch!=0x0a))
{ch=fgetc(fp);
hexrec[i++]=ch;
};
sum=0;
j=0;
if (hexrec[j++]!=':')
{ printf("\n Sorry,can't find hex record head \':\'.");
fclose(fptemp);
return(0);
};
char2[0]=hexrec[j++];
char2[1]=hexrec[j++];
char2[2]='\0';
recordlen=hval(char2);
sum=sum+recordlen;
char4[0]=hexrec[j++];
char4[1]=hexrec[j++];
char4[2]=hexrec[j++];
char4[3]=hexrec[j++];
char4[4]='\0';
address=hval(char4);
sum=(unsigned char)(sum+(address%0x100));
sum=(unsigned char)(sum+(address/0x100));
for(i=preaddress+prerecordlen;i<address;i++)fputc(0xff,fptemp);
char2[0]=hexrec[j++];
char2[1]=hexrec[j++];
char2[2]='\0';
ch=(unsigned char)hval(char2);
sum=sum+ch;
if (ch==0x01)
{ fclose(fptemp);
return(1);
};
for(i=0;i<recordlen;i++)
{ char2[0]=hexrec[j++];
char2[1]=hexrec[j++];
char2[2]='\0';
ch=(unsigned char)hval(char2);
sum=sum+ch;
fputc(ch,fptemp);
};
char2[0]=hexrec[j++];
char2[1]=hexrec[j++];
char2[2]='\0';
ch=(unsigned char)hval(char2);
sum=sum+ch;
if(!(sum==0))
{ printf("\n Sorry,hex record sum wrong. \n");
fclose(fptemp);
return(0);
};
prerecordlen=recordlen;
preaddress=address;
goto nextrecord;
}
int copybin(FILE *fp)
{
unsigned char x;
FILE *fptemp;
if((fptemp=fopen("temp.bin","wb"))==NULL)return(0);
while(!feof(fp))
{
x=fgetc(fp);
fputc(x,fptemp);
};
fclose(fptemp);
return(1);
}
int loadfile()
{
static char inifile[]="set.ini";
unsigned char x;
int i,j;
char *filename,*pstr,*pstr1,*ptype,string[256],temp[256],temp1[256],type[4];
FILE *fp,*fpini;
pstr=inifile;
pstr1=temp1;
filename=string;
if((fpini=fopen(pstr,"r"))!=NULL)
{
fscanf(fpini,"%s",pstr1);
fclose(fpini);
}
else
{pstr1="";};
for(j=0;j<=4;j++)
{
printf("\nInput filename to be load[%s]",pstr1);
for (i=0;i<256;i++) temp[i]='\0';
x=0;
for (i=0;x!=0x0a;i++)
{x=getchar();temp[i]=x;};
temp[i--]='\0'; temp[i--]='\0';
if (temp[0]!='\0')
{filename=temp;}
else filename=pstr1;
if((fp=fopen(filename,"rb"))==NULL)
{printf("Can not open this file:%s\n",filename);}
else {printf("\n\n");break;};
if (j==2)return(0);
};
ptype=strchr(filename,'.');
ptype++;
type[0]=toupper(*ptype++);
type[1]=toupper(*ptype++);
type[2]=toupper(*ptype++);
type[3]='\0';
if (strcmp(type,"HEX")==0)
{printf("Begin program hex file.%s\n\n",filename);
if (!hextobin(fp))
{ printf("\nConver Hex to Bin failt!!!");
return(0);
};
}
else
{printf("Begin program bin file.%s\n\n",filename);
if(!copybin(fp))
{ printf("\nCreate temp.bin failt!!!");
return(0);
};
};
fclose(fp);
pstr=inifile;
if((fpini=fopen(pstr,"w"))!=NULL)
{fprintf(fpini,"%s",filename);
fclose(fpini);
};
return(1); /*good return 1*/
}
void program()
{
int i,j;
unsigned char x;
FILE *fp;
char *filename,temp[]="temp.bin";
long start, end;
start = clock();
// clrscr();
printf("\n\r");
if (!loadfile()) return;
filename=temp;
if((fp=fopen(filename,"rb"))==NULL)
{printf("\nCannot open the temp file.\n");
return;
};
start_program();
enable_program();
erase_chip();
i=0;j=0;
while(!feof(fp))
{
x=fgetc(fp);
if(!write_code(x,i))
{
printf(" xxx");
j++;
if (j>=0x80) break;
}
else
{
printf("%4x",x);
};
i++;
};
fclose(fp);
end = clock();
if (j) {printf("\n\nSomeAdress program failed!!!\n");}
else{printf("\n\nProgram OK!\n");};
printf("\nTotal program %x bytes\n",i);
printf("Programed failt %x bytes.\n",j);
printf("Total spend time %d mS\n",end-start);
end_program();
}
void readbin()
{
int i;
unsigned char x;
FILE *fp;
char *filename,temp[]="chip.bin";
long start, end;
start = clock();
// clrscr();
printf("\n\r");
filename=temp;
if((fp=fopen(filename,"wb"))==NULL)
{printf("\nCannot open the temp file.\n");
return;
};
start_program();
enable_program();
i=0;
for (i=0;i<0x3000;i++)
{
x=read_code(i);
printf("%4x",x);
fputc(x,fp);
};
fclose(fp);
end = clock();
printf("\nTotal read %x bytes.Have write to \"chip.bin\"\n",i);
printf("Total spend time %d mS\n",end-start);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -