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

📄 fy_plt.c

📁 ATMEL89S53 ISP 下载程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	end_program();

}
void lockbit()
{
	int i;
	unsigned char y;

//	clrscr();
	printf("\n\r");

	
	printf("Please input the lockbit[1,2,3]:");
	scanf("%d",&i);
	switch(i)
	{
		case 1:	y=0x67;
			break;
		case 2:	y=0x27;
			break;
		case 3:	y=0x07;
			break;
		default:printf("\nYou didnot select proper lockbit.");
			printf("\nNo any lockbit programed.\n");
			return;
	}


	start_program();
	enable_program();

	shout(0xac);
	shout(y);
	shout(0x55);
	wait(100000);
	end_program();
	printf("\nHave programed lockbit %x.\n",i);
	
}
void testchip()
{
	int i;
	unsigned char x;

//	clrscr();
	printf("\n\r");

	start_program();
	enable_program();
	
	i=0x2ffe;
	x=read_code(i);

	if((write_code(0x55,i))&&(write_code(0xaa,i))&&(write_code(x,i)))
	{
		printf("\nConnect chip OK ,Now can do program.\n");
	}
	else
	{
		printf("\nConnect chip failt!!!,you must check the connect or the chip type.\n");
	};

	
	end_program();
	
}


void modify()
{	
	int i;
	unsigned char data;
	unsigned long address,tempdata;
	char *pstr,str[256];
	pstr=str;
	
	
//	clrscr();
	printf("\n\r");

	
	start_program();
	enable_program();
rein:
	printf("Please input the address of chip  want to modify[0-2fff]:");
	scanf("%s",pstr);
	address=hval(pstr);
	if (address>0x2fff){printf("Adress over range.\n");goto rein;};
	printf("\nUse \"SPACE KEY\" to next adress,\"ENTER KEY\" to change,\"ESC KEY\" to return. ");
	printf("\nFlash [Address:Data]");
nextaddress:

	data=read_code(address);	
	printf("\t%4x:",address);
	printf("%2x ",data);
/*	x=wherex();
	y=wherey();
*/	
	i=0;
	pstr=str;

nextchar:	
	data=getch();
	if (isxdigit(data))
	{
	printf("%c",data);
	str[i++]=data;
	}

	if (data==0x1b)
	{end_program();
	printf("\n");
	return;
	};
	
	if (data==0x20)
	{address++;
	goto nextaddress;
	};
	
	if(data==0x0d)
	{	
		str[i]='\0';
		tempdata=hval(pstr);
	    
	      if (!write_code((unsigned char)tempdata,address))
	      {  end_program();
	 	 printf("\nWrite the address %4x:",address);
	 	 printf("%2x failt!!!\n",tempdata);	
	         return;
	      };
	  
	address++;
	goto nextaddress;
	};


	goto nextchar;
}




void terminate()
{
	printf("\nNow the prorgram return to dos.");
	exit(0);
}

void erasechip()
{	char key;
	
//	clrscr();
	printf("\n\r");

	printf("Are you shur EREASE the chip? (Y/N)");
	key=toupper(getch());
	printf("%c\n\n",key);
	if (key=='N') return; 
	start_program();
	enable_program();
	erase_chip();
	end_program();
	printf("\nErase chip complited.\n");
}

void verify()
{
		int i,j;
	unsigned char x,y;
	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();
	
	
	i=0;j=0;
	while(!feof(fp))
	{
		x=fgetc(fp);
		y=read_code(i);
		if (x==y)
		{printf(".");}
		else
		{printf("address %4x:   %4x  -%4x\n",i,x,y);
		 j++;
		 };
		i++;	
	};

	fclose(fp);
	end = clock(); 
	
	if (j) {printf("\n\nSomeAdress verify failed!!!\n");}
	else{printf("\n\nVerified OK!\n");};
	
	printf("\nTotal verified %x bytes.\n",i);
	printf("Verified failt %x bytes.\n",j);
	printf("Total spend time %d mS\n",end-start);
	
	end_program();

}

void start_program()
{
	enable_outport();
	clr_reset();
	wait(1000);
	

	clr_psck();
	clr_mosi();
	clr_ss();
	set_reset();
	wait(1000);
}
void end_program()
{

	clr_psck();
	clr_mosi();
	clr_reset();
}

void clr_reset()
{
	unsigned char x;
	x=DP_InpB((validPpt+2));
	x=setbit(x,RESET);
	DP_OutpB((validPpt+2),x);	
}

void set_reset()
{
	unsigned char x;
	x=DP_InpB((validPpt+2));
	x=clrbit(x,RESET);
	DP_OutpB((validPpt+2),x);
}

void clr_ss()
{
	unsigned char x;
	x=DP_InpB((validPpt+2));
	x=clrbit(x,SS);
	DP_OutpB((validPpt+2),x);
}

void set_ss()
{
	unsigned char x;
	x=DP_InpB((validPpt+2));
	x=setbit(x,SS);
	DP_OutpB((validPpt+2),x);
}

void clr_psck()
{
	unsigned char x;
	x=DP_InpB(validPpt);
	x=clrbit(x,PSCK);
	DP_OutpB(validPpt,x);
}

void set_psck()
{
	unsigned char x;
	x=DP_InpB(validPpt);
	x=setbit(x,PSCK);
	DP_OutpB(validPpt,x);
}

void clr_mosi()
{
	unsigned char x;
	x=DP_InpB(validPpt);
	x=clrbit(x,MOSI);
	DP_OutpB(validPpt,x);
}

void set_mosi()
{
	unsigned char x;
	x=DP_InpB(validPpt);
	x=setbit(x,MOSI);
	DP_OutpB(validPpt,x);
}


void enable_outport()
{	unsigned char x;

	x=DP_InpB((validPpt+2));
	x=x & 0xdf;
	DP_OutpW((validPpt+2),0);
	wait(1000);
}

void erase_chip()
{
	shout(0xAC);
	shout(0x04);
	shout(0x55);
	wait(500000);
}

void enable_program()
{
	shout(0xAC);
	shout(0x53);
	shout(0x55);
	wait(500000);

}



unsigned char write_code(unsigned char byte,unsigned int address)
{
	unsigned char hi_address,low_address,x;
	long timers,timers3;

	hi_address=address / 0x100;
	low_address=address % 0x100;

	x=hi_address;
	hi_address=hi_address<<3;
	hi_address=movbit(hi_address,2,x,5);
	hi_address=(hi_address & 0xfc)|0x02; 

	timers3=0;
	
	
restw:
		
	shout(hi_address);
	shout(low_address);
	shout(byte);

	timers=0;
	do{
	if(60 < timers++) goto errorw;
	hi_address=hi_address&0xfc|0x01;
	shout(hi_address);
	shout(low_address);
	x=shin();
	}while (x!=byte);
	return(1);
	
errorw:	if (timers3++>=2){return(0);}
	else{goto restw;};

}



unsigned char read_code(unsigned int address)
{		
	unsigned char hi_address,low_address,x;
	hi_address=address / 0x100;
	low_address=address % 0x100;

	x=hi_address;
	hi_address=hi_address<<3;
	hi_address=movbit(hi_address,2,x,5);
	hi_address=(hi_address & 0xfc) | 0x01;  
	
	shout(hi_address);
	shout(low_address);
	x=shin();

	return(x);
}




unsigned char setbit(unsigned char byte_char,unsigned nbit)
{
	unsigned char x=0x01;
	x=x<<nbit;
	byte_char=byte_char|x;
	return(byte_char);
}

unsigned char notbit(unsigned char byte_char,unsigned nbit)
{
	unsigned char x=0x01;
	x=x<<nbit;
	byte_char=byte_char^x;
	return(byte_char);
}


unsigned char clrbit(unsigned char byte_char,unsigned nbit)
{
	unsigned char x=0x01;
	x=~(x<<nbit);
	byte_char=byte_char & x;
	return(byte_char);
}


unsigned char movbit(unsigned char byte_char1,unsigned n,unsigned char byte_char2,unsigned m)
{
	unsigned char x=0x01;
	x=~(x<<n);
	byte_char1=byte_char1&x;
	x=byte_char2;
	x=(x>>m)<<n;
	byte_char1=byte_char1|x;
	return(byte_char1);
}

void shout(unsigned char outdata)
{
	int	i;

	

	for (i=0;i<8;++i)
	{
		if(outdata&0x80){
		DP_OutpB(validPpt,0x02);
		DP_OutpB(validPpt,0x03);
		DP_OutpB(validPpt,0x02);			
		}
		else{
		DP_OutpB(validPpt,0x00);
		DP_OutpB(validPpt,0x01);
		DP_OutpB(validPpt,0x00);			
		};
		outdata=outdata<<1;
	};

}

unsigned char shin()
{	
	unsigned char outdata=0,data;
	int i;

	for(i=0;i<8;++i)
	{
		outdata=outdata<<1;
		DP_OutpB(validPpt,0x01);
		data=DP_InpB((validPpt+1));
		DP_OutpB(validPpt,0x00);
		if(data&0x80)outdata=outdata|0x01;
	}	
	return(~outdata);
}



unsigned char shoutin(unsigned char outdata)
{
	unsigned char data,indata=0;
	int i;
	
	for (i=0;i<8;++i)
	{	indata=indata<<1;
		if (outdata&0x80){
		DP_OutpB(validPpt,0x02);
		DP_OutpB(validPpt,0x03);
		data=DP_InpB((validPpt+1));
		DP_OutpB(validPpt,0x02);		
		
		}
		else{
		DP_OutpB(validPpt,0x00);
		DP_OutpB(validPpt,0x01);
		data=DP_InpB((validPpt+1));
		DP_OutpB(validPpt,0x00);		
		};
		if(data&0x80)indata=indata|0x01;
		outdata=outdata<<1;
	};
	return(~indata);

}
	
				
void wait(long t)
{
	long int i,j;
	i=t;
	for (i=1;i<=t;i++)
	{
		for(j=1;j<=165;j++);	
	};
}
long hval(char *str)
{	long number=0;
	int i,n=0;
	char ch;

	i=strlen(str);

	for(i--;i>=0;i--)
	{	ch=*str;
		if isxdigit(*str)
		{	if (*str<=0x3a) 	
			{	n=toupper(ch)-0x30;}
			else
			{	n=toupper(ch)-0x41+0x0a;};
		};

		number=(long)(number+ n*pow(16.0,(double)i));

		str++;
	}

	return(number);
}

void waitdata()
{	int i,j;
	unsigned char x,data;
//	clrscr();
	printf("\n\r");
	printf("The plt work on slave mode.wait the sck .  \n");
	printf("Press any key return.\n \n");

	j=0;
rewait:	
	data=0;

	for (i=0; i<8;i++)
	{
		data=data<<1;
	rehi:			
		do		
		{x=DP_InpB((validPpt+1)) & 0xc0;if (_kbhit()) return;} 
		while((x&0x40) == 0x00);
		
		for(j=0;j<10;j++)
		{
		if ((DP_InpB((validPpt+1))&0x40)==0x00) goto rehi;			
		};
	
		if((x&0x80) != 0x00) data= data | 0x01;
	relow:
		do
		{x=DP_InpB((validPpt+1)) & 0xc0;if (_kbhit()) return;} 
		while((x&0x40) == 0x40);

		for(j=0;j<10;j++)
		{
		if ((DP_InpB((validPpt+1))&0x40)==0x40) goto relow;			
		};
	}
	
	printf("%3x",data);
	if (((j++)%16)==0) printf("\n");

	goto rewait;
	
}

void polling()
{
	set_ss();
	waitdata();
	clr_ss();	
}

⌨️ 快捷键说明

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