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

📄 at89s5x_spi.c

📁 at89x52 spi 编程工具
💻 C
字号:
/********************************************************************
FILE MAME AT89S5X_SPI.C
********************************************************************/

#pragma SMALL ORDER NOPRINT OPTIMIZE(2)
#include <AT89X52.H>
unsigned char result,read,write;
unsigned char serial_buf[16];
void WBYTE(unsigned char);
unsigned char RBYTE(void);
void INIT(void);
unsigned char READ_MEM(unsigned int addr);
void WRITE_MEM(unsigned int addr,unsigned char val); //write program memory
void DELAY10(void);

void put(char x)                         //输出字符
{
	SBUF=x;
    while(TI==0);
    TI=0; 
}

void print(char *p)                      //输出字符串
{  
	char c;
   	while((c=*p++)!=0)
	put(c);
}
void convert_to_byte(void)
{
  unsigned char temph,templ;
  while(write == read);
  temph = serial_buf[read];
  read++;
  read = read & 0x0F;
  if(temph >= '0' && temph <= '9')
  temph -= 48;
  else
  temph -= 55;
  while(write == read);
  templ = serial_buf[read];
  read++;
  read = read & 0x0F;
  if(templ >= '0' && templ <= '9')
  templ -= 48;
  else
  templ -= 55;
  result = (temph << 4) + templ;
}

void serial(void) interrupt 4 using 1
{
  if(RI)
  {
    RI=0;
    serial_buf[write] = SBUF;
    write ++;
    write = write & 0x0F;
  }
}
// programming enable
unsigned char progra_en(void)
{
	unsigned char val;
	WBYTE(0xAC);
	WBYTE(0x53);
	WBYTE(0x00);
	val = RBYTE();
	return(val);
}

//chip erase
void chip_erase(void)
{
	WBYTE(0xAC);
	WBYTE(0x80);
	WBYTE(0x00);
	WBYTE(0x00);
}

void delay(unsigned int i)
{
	while(i)
	{
      DELAY10();            //1 毫秒延时子程序
      i--;
	}
}
void main(void)
{
	unsigned char a,length,addh,addl;
	int i,addr;
	INIT();
	SP = 0x30;
	SCON = 0x50;
	TMOD = 0x20;
	PCON = 0X00;
	TH1 = 0xFD;          // 9600 baud    	
	TR1 = 1;
	write = 0;
	read = 0;
	ES = 1;
	EA = 1;
	while(1)
	{
		print("\r\n  programming enable...\r\n");
		delay(2000);
		a = progra_en();
		if(a != 0x69)
	      {
   		    print("  programming enable error please reset!\r\n");
			while(1);
	      }
		print("  programming enable compelted!\r\n");
		print("  erasing chip please waite...\r\n");
   		chip_erase();
        delay(600);
		delay(1000);
		print("  erasing chip completed!\r\n");
		print("  please select hex file!\r\n");
		while(1)
		{
			while(write == read);
			while(serial_buf[read] != ':')
	      	{ 
		    	read++;
				read = read & 0x0F;
				while(write == read);
		  	}
	    	read++;
			read = read & 0x0F;
        	convert_to_byte();
        	length = result;
        	convert_to_byte();
			addh = result;
        	convert_to_byte();
			addl = result;
			addr = addh*256 + addl;
        	convert_to_byte();
			if(result == 0x01)
		  	{
		    	print("  programming compeleted!\r\n");
				while(1);
	  		}
			for(i=0;i<length;i++)
		  	{
				convert_to_byte();
		    	WRITE_MEM(i+addr,result);
   				a = READ_MEM(i+addr);
				if(result != a)
			  	{
			    	print("  programming error!\r\n");
					while(1);
			  	}
		  	}
		}
	}
}

⌨️ 快捷键说明

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