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

📄 stciap.c

📁 电压瞬时检测
💻 C
字号:
/**********************************************
*   文件名:STCIAP.C
/**********************************************/
#include "REG51STC.H"
#include "oven.h"
#include "citation.h"
#include <INTRINS.H>
//-----------------------------------------------------
#define DATA_FLASH_START_ADDRESS  0x2800  //STC12C5410

#define ENABLE_ISP   0x81   //等待时间
//---------------------------------------
/***********************************************
*  功能:送地址
************************************************/
void set_isp_add(uint add)
{
	ISP_ADDRH=add/256;
   ISP_ADDRL=add%256;
}
/**********************************************
*   功能:触发ISP
***********************************************/
void trigger_isp(void)
{
	//EA=0;
	ISP_TRIG=0x46;
	ISP_TRIG=0xb9;
	_nop_();_nop_();_nop_();_nop_();_nop_();
//	EA=1;
}
/****************************************
*   功能:打开 ISP,IAP 功能 
****************************************/
void ISP_IAP_enable(void)
{
	EA	=	0;	/* 关中断 */
	ISP_CONTR	=	ISP_CONTR & 0x18;       /* 0001,1000 */
	ISP_CONTR	=	ISP_CONTR | ENABLE_ISP;
	ISP_CONTR	=	ISP_CONTR | 0x80;       /* 1000,0000 */
}

/***********************************************
*  功能:关闭IAP功能
************************************************/
void iap_disable(void)
{
	ISP_CONTR=0;
   ISP_CMD=0;
   ISP_TRIG=0;
	EA=1;
}
/************************************************
*  功能:IAP字节读
*************************************************/
uchar byte_verify(uint add)
{
	ISP_CMD=1;
	set_isp_add(add);
	ISP_IAP_enable();
	trigger_isp();  //触发ISP
	iap_disable();   //关闭IAP功能
	return(ISP_DATA);
}
/***********************************************
* 功能:字节编程
************************************************/
void byte_program(uint add,uchar *ptr)
{
	ISP_CMD=2;
	set_isp_add(add);
	
	ISP_DATA=*ptr;
	ISP_IAP_enable();
	trigger_isp();
	iap_disable();   //关闭IAP功能
	if(*ptr!=byte_verify(add)) isp_err=1; //只要有1个字节写入不正确则出错
}
/**********************************************
*   功能:扇区擦除
***********************************************/
void sector_erase(uint add)
{
	//ISP_CONTR=ENABLE_ISP;//等待时间
	ISP_CMD=0x03;
	set_isp_add(add);

	ISP_IAP_enable();
	trigger_isp();
	iap_disable();   //关闭IAP功能
}

/*************************************************
*  功能:保存IAP系统参数
*************************************************/
void iap_sys_save(uint add,uchar *pi,uchar amount)
{	uchar i;
	sector_erase(add);  //扇区擦除
	ISP_CONTR=ENABLE_ISP;//等待时间
	for(i=0;i<amount;i++)
	{
		byte_program(add+i,pi+i);
	}
	
}
/*************************************************
*  功能:读IAP系统参数
*************************************************/
void iap_sys_read(uint add,uchar *pi,uchar amount)
{	uchar i;
   ISP_CONTR=ENABLE_ISP;//等待时间
	for(i=0;i<amount;i++)
	{
		*(pi+i)=byte_verify(add+i);
	}
	//iap_disable();   //关闭IAP功能
}

/*************************************************
*  功能:掉电保存数据
**************************************************/
void power_drop_save(void)
{  void  *pi;
	drop_bit=save_bit;
	pi=&drop_bit;
	iap_sys_save(DATA_FLASH_START_ADDRESS+512,pi,9);
}
/*************************************************
*  功能:恢复掉电数据
**************************************************/
void renew_dropdata(void)
{  void  *pi;
	pi=&drop_bit;
	iap_sys_read(DATA_FLASH_START_ADDRESS+512,pi,9);
	save_bit=drop_bit;
}

⌨️ 快捷键说明

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