📄 从应用程序切换到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 + -