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

📄 从应用程序切换到isp程序.c

📁 STC单片机从ISP程序切换到应用程序,里面有具体的操作步骤
💻 C
字号:
/* ---  STC International Limited ---------------- */
/* ---  宏晶科技 姚永平  设计 2004/9/11 ---------- */
/* ---  RD+/RC   AP switch to ISP Memory --------- */
/* ---  STC89C516RD+, STC89C58RD+, STC89C54RD+ --- */
/* ---  STC89LE516RD+,STC89LE58RD+,STC89LE54RD+ -- */
/* ---  STC89C53RC,   STC89C52RC,  STC89C51RC ---- */
/* ---  STC89LE53RC,  STC89LE52RC, STC89LE51RC --- */
/* ---  Mobile: 13922805190 ---------------------- */ 
/* ---  Fax: 0755-82944243 ----------------------- */ 
/* ---  Tel: 0755-82908285 ----------------------- */ 
/* ---  Web  : www.mcu-memory.com ---------------- */
 
#include <reg52.h>
#include <intrins.h>	/* use _nop_() function */
/*	新增特殊功能寄存器定义	*/
sfr		ISP_DATA	=	0xe2;		/*	ISP_DATA	DATA	0E2H;	汇编程序定义 */
sfr		ISP_ADDRH	=	0xe3;		/*	ISP_ADDRH	DATA	0E3H;	汇编程序定义 */
sfr		ISP_ADDRL	=	0xe4;		/*	ISP_ADDRH	DATA	0E4H;	汇编程序定义 */
sfr		ISP_CMD		=	0xe5;		/*	ISP_CMD		DATA	0E5H;	汇编程序定义 */
sfr		ISP_TRIG	=	0xe6;		/*	ISP_TRIG	DATA	0E6H;	汇编程序定义 */
sfr		ISP_CONTR	=	0xe7;		/*	ISP_CONTR	DATA	0E7H;	汇编程序定义 */

/*  SFR: ISP_DATA  (ISP / IAP Flash Data Register):	E2H ----------------*/
/*--|	b7	|	b6	|	b5	|	b4	|	b3	|	b2	|	b1	|	b0	|---*/
/*--|	Data to be written into flash, or Data got from flash       |---*/

/*  SFR: ISP_ADDRH  (ISP / IAP Flash Address High):	E3H ----------------*/
/*--|	b7	|	b6	|	b5	|	b4	|	b3	|	b2	|	b1	|	b0	|---*/
/*--|	High byte of the address pointing to flash                  |---*/


/*  SFR: ISP_ADDRL  (ISP / IAP Flash Address Low):	E4H ----------------*/
/*--|	b7	|	b6	|	b5	|	b4	|	b3	|	b2	|	b1	|	b0	|---*/
/*--|	Low byte of the address pointing to flash                   |---*/


/*  SFR: ISP_CMD	(ISP / IAP Flash Mode Table):	E5H ----------------*/
/*--|	b7	|	b6	|	b5	|	b4	|	b3	|	b2	|	b1	|	b0	|---*/
/*--|			reserved					|		Mode Selection  |---*/

/*  SFR: ISP_TRIG (Sequential Command Data register for ISP/IAP): E6H --*/
/*--|	b7	|	b6	|	b5	|	b4	|	b3	|	b2	|	b1	|	b0	|---*/
/*--|	        ISP-Command Trigger and Device ID				    |---*/


/*  SFR: ISP_CONTR  (ISP / IAP Control register):	E7H ----------------*/
/*--|	b7	|	b6	|	b5	|	b4	|	b3	|	b2	|	b1	|	b0	|---*/
/*--| ISPEN	|  SWBS	| SWRST	|	-	|	-	|		WAIT		    |---*/
/*-- ISPEN: ISP function enabling bit 	--------------------------------*/
/*--     0: Disable ISP program to change flash		--------------------*/
/*--     1: Enable ISP program to change flash		--------------------*/
/*-- SWBS: Software Booting  select          		--------------------*/
/*--     0: Boot from AP-Memory / Main-Memory		--------------------*/
/*--     1: Boot from ISP-Memory					--------------------*/
/*-- SWRST: Software reset trigger					--------------------*/
/*--     0: No operation							--------------------*/
/*--     1: Generate software system reset. It will be cleared by hardware automatically  ---*/

typedef	unsigned char	INT8U;		/* 8 bit 无符号整型  */
typedef	unsigned int	INT16U;		/* 16 bit 无符号整型 */
#define DELAY_CONST 60000

sbit	AP_Memory_LED	=	P1^3;
sbit	ISP_Memory_LED	=	P1^7;
sbit	delay_over_LED	=	P1^0;

void from_ISP_Memory_switch_to_AP_Memory(void)
{
	ISP_CONTR	=	0x20;  //  0010,000
}
void from_AP_Memory_switch_to_ISP_Memory(void)
{
	ISP_CONTR	=	0x60;  //  0110,000
}


/*  only display ISP_Memory_LED */
void only_display_ISP_Memory_LED(void)
{
	AP_Memory_LED	=	1;  /* AP_Memory_LED Off */
	ISP_Memory_LED	=	0;	/* ISP_Memory_LED on  */
	delay_over_LED	=	1;	/* delay_over_LED off  */
}

/*  only display AP_Memory_LED */
void only_display_AP_Memory_LED(void)
{
	AP_Memory_LED	=	0;  /* AP_Memory_LED On */
	ISP_Memory_LED	=	1;	/* ISP_Memory_LED off  */
	delay_over_LED	=	1;	/* delay_over_LED off  */
}
void display_delay_over_LED(void)
{
	AP_Memory_LED	=	1;  /* AP_Memory_LED Off */
	ISP_Memory_LED	=	1;	/* ISP_Memory_LED off  */
	delay_over_LED	=	0;	/* ISP_Memory_LED on  */
}
void display_error_LED(void)
{
	AP_Memory_LED	=	0;  /* AP_Memory_LED on */
	ISP_Memory_LED	=	0;	/* ISP_Memory_LED on  */
	delay_over_LED	=	0;	/* ISP_Memory_LED on  */	
}
void delay(INT16U counter)
{
	INT16U	temp	=	0;
	for(temp = counter;temp>0;temp--)
	{
		_nop_();
		_nop_();
		_nop_();
	
	}
}

void main()
{
//sbit	AP_Memory_LED	=	P1^3;
//sbit	ISP_Memory_LED	=	P1^7;
//sbit	delay_over_LED	=	P1^0;		
		/* program code in AP_Memory run */
		while(1)
		{
			only_display_AP_Memory_LED();
			delay(DELAY_CONST);
			
			display_delay_over_LED();
			delay(DELAY_CONST);
			
			from_AP_Memory_switch_to_ISP_Memory();
			delay(DELAY_CONST);
			
			display_error_LED();
			delay(DELAY_CONST);
		}
}

⌨️ 快捷键说明

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