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

📄 flash.c

📁 单片机与29f080通信源码
💻 C
字号:
#include <reg52.h>
#include	"Mylib.h"
#define	XMODEM_NAK	0x15
#define	XMODEM_ACK	6



char xdata  *FlashAddr;

char code *VenderName;
char code *DeviceName;
char VenderID;
char DeviceID;
char TopBootProtect;
char BottBootProtect;
int  SectorSize=256;
int  SectorMount=0;
uint	PageNum;
uchar	xdata	XdataBuf[256];
uchar 	code	CodeBuf[256*128]	_at_	0x8000;

uchar 	CodeCounter,CMDState,RecCode;
uchar	Time0_5=0;
bit		blRecCode,blRunWrite;
void	SentToPc(uchar a);
extern	void	writeatchar(uchar position ,uchar a);
extern	void	writeddram1(char *datastring);
extern 	void	writeddram2(char *datastring);
extern	void	init();
extern	void	delay1ms();
extern	void	Write_Isp_String(uchar AddressIndex,uchar *Read_Buf);
extern	void from_ISP_Memory_switch_to_AP_Memory(void);


sbit	TestClk=P1^2;


void	SysInt()
{
 	
	SCON=0X50;
	TMOD=0x11;
	PCON=0x80;
	T2CON=0x34;		//用定时器2做波特率 57600
	RCAP2H=0xff;
	//RCAP2L=0xf3;
	RCAP2L=0xf6;  	//18.432
				
	ET1=1;
	ES=1;
	EA=1;
}
void    timer1() interrupt 3 
{
	TestClk=~TestClk;

}
void IntSerial () interrupt 4  
{   
	uchar RBuf;
	static	uchar i;
	RBuf=SBUF;
 	if(RI)
	{
	   RI=0;
	   if(blRecCode)
	   {   	
	   		XdataBuf[i]=RBuf;
			i++;
			if(i==0x80)
			{
				blRecCode=0;
				ES=0;
				while(!RI);
				RI=0;
				SentToPc(XMODEM_ACK);
				ES=1;
				
			}
			if(!i)
			{
				blRunWrite=1;
				ES=0;
			}	
	   }
	   else
	   {	
	   		switch(CMDState)
			{
			 	case	0:	//if(RBuf==0xaa)
							if(RBuf==1)
							CMDState=1;
							break;
				case	1:	//if(RBuf==0xbb)
							CMDState=2;
							break;
				/*case	2:	
							CMDState=3;
							//PageNum=0x100*RBuf;
							break;
				case	3:	//PageNum=PageNum+RBuf;
							
							CMDState=0;
							blRecCode=1;
							break;*/
				case	2:	//PageNum=PageNum+RBuf;
							
							CMDState=0;
							blRecCode=1;
							ET1=0;
							break;
				default:	break;	
			}
		}
	}
} 
void FlashWriteByte(unsigned int  Addr,char Data)
{   
	FlashAddr=(char xdata *)Addr;
    *FlashAddr=Data;	
}
unsigned char FlashReadByte(unsigned int Addr)
{	
	
	return(CodeBuf[Addr]);
}

void FlashChipEarse(void)
{
    FlashWriteByte(0x5555,0xAA);
	FlashWriteByte(0x2AAA,0x55);
	FlashWriteByte(0x5555,0x80);
	FlashWriteByte(0x5555,0xAA);
	FlashWriteByte(0x2AAA,0x55);
	FlashWriteByte(0x5555,0x10);
}
/*void FlashWriteSector(unsigned int sector)
{
	int byte_count;
	unsigned long Addr;

	FlashWriteByte(0x5555,0xAA);
	FlashWriteByte(0x2AAA,0x55);
	FlashWriteByte(0x5555,0xA0);

    Addr=(unsigned long)sector*SectorSize;
    for(byte_count=0; byte_count < SectorSize; byte_count++)
      FlashWriteByte(Addr+byte_count,0xea);
	//while(FlashReadByte(Addr) != FlashReadByte(Addr));
}*/ 
void FlashWriteSector(unsigned int sector)
{
	uint byte_count=0,Addr;
	if(sector<128)
	{
		Write_Isp_String(sector,XdataBuf);	
	 	
	}
	else
	{
		FlashWriteByte(0x5555,0xAA);
		FlashWriteByte(0x2AAA,0x55);
		FlashWriteByte(0x5555,0xA0);
		Addr=sector*SectorSize+0x8000;	
		for(byte_count=0; byte_count < SectorSize; byte_count++)
	    FlashWriteByte(Addr+byte_count,XdataBuf[byte_count]);
		delay1ms();
		delay1ms();
		delay1ms();
		delay1ms();
		delay1ms();
		delay1ms();
	}
} 
void FlashDisableProtection()
{
	FlashWriteByte(0x5555,0xAA);
	FlashWriteByte(0x2AAA,0x55);
	FlashWriteByte(0x5555,0x80);
	FlashWriteByte(0x5555,0xAA);
	FlashWriteByte(0x2AAA,0x55);
	FlashWriteByte(0x5555,0x20);	
}
void	SentToPc(uchar a)
{
 	SBUF=a;
    while(!TI)
    ;
    TI=0;
}
void	SentPageData(uchar a)
{
 	uint	i;
	for(i=0;i!=256;i++)
	SentToPc(FlashReadByte(a*SectorSize+i));

	SentToPc(0xaa);
	SentToPc(0xbb);
	SentToPc(0xcc);

}
uchar	CheckFlash(uint	Address)
{
 	uint	a;
	for(a=0;a<200;a++)
	{
	 	if(FlashReadByte(a)!=0xaa)
		return(0);
	}
	return(1);
}
void	SwitchPage(uchar a)
{  	uchar	i;
	i=P1;
	i&=0xf0;
 	P1=i+a;
}
void	ComparFlash(uchar a)
{  	
	uchar 	i;
 	for(i=0;i<255;i++)
	{
		if(XdataBuf[i+1]!=FlashReadByte(a*SectorSize+i))
		writeddram2("   error   ");
	}

}

void	main()
{
	//FlashInitial();
	init();
	init();
	EA=0;
	P1&=0xf0;
	SysInt();
	TR1=1;	
	while(1);
}

⌨️ 快捷键说明

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