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

📄 iap.c

📁 本程序是一个人机接口程序
💻 C
字号:
//新增特殊功能寄存器定义        
sfr  T2CON      =   0xc8;
sfr  T2MOD      =   0xc9;
sfr  RCAP2L     =   0xca;
sfr  RCAP2H     =   0xcb;
sbit TR2        =   T2CON^2;
sfr	 ISP_DATA	=   0xe2;
sfr  ISP_ADDRH	=   0xe3;  
sfr	 ISP_ADDRL	=   0xe4;
sfr	 ISP_CMD	=   0xe5; 
sfr	 ISP_TRIG	=   0xe6;   
sfr	 ISP_CONTR  =   0xe7; 

//内部EEPROM操作命令和参数 
#define READ_AP_and_Data_Memory_Command				0x01      //字节读数据存储区   
#define PROGRAM_AP_and_Data_Memory_Command          0x02      //字节编程数据存储区 
#define SECTOR_ERASE_AP_and_Data_Memory_Command     0x03      //扇区擦除数据存储区 
#define WAIT_TIME                                   0x02      //定义Flash 操作等待时间 

void ISP_IAP_enable(void)                                     //打开 ISP,IAP 功能 
{
	EA	=	0;	                                              //关中断 
	ISP_CONTR	=	ISP_CONTR & 0x18;                         //0001,1000 
	ISP_CONTR	=	ISP_CONTR | WAIT_TIME;
	ISP_CONTR	=	ISP_CONTR | 0x80;                         //1000,0000 
}

void ISP_IAP_disable(void)                                   //关闭 ISP,IAP 功能 
{
	ISP_CONTR	=	ISP_CONTR & 0x7f;	                     //0111,1111 
	ISP_TRIG	=	0x00;
	EA			=   1;                	                     //开中断 
}

unsigned char byte_read(unsigned int byte_addr)              //字节读 
{
//	byte_addr+=0x8000;
	ISP_ADDRH	=	(unsigned char)(byte_addr >> 8);
	ISP_ADDRL	=	(unsigned char)(byte_addr & 0x00ff);
	ISP_CMD = ISP_CMD &	0xf8;                               // 1111,1000 */
	ISP_CMD = ISP_CMD |	READ_AP_and_Data_Memory_Command;    // 0000,0001 */
	ISP_IAP_enable();
	ISP_TRIG	=	0x46;
	ISP_TRIG	=	0xb9;
	_nop_();
	ISP_IAP_disable();
	return (ISP_DATA);
}

unsigned char sector_erase(unsigned int sector_addr)       //扇区擦除 
{
	unsigned int get_sector_addr	=	0;
	get_sector_addr	=	(sector_addr & 0xfe00); //1111,1110,0000,0000; 取扇区地址 
	ISP_ADDRH       =	(unsigned char)(get_sector_addr >> 8);
	ISP_ADDRL		=	0x00;
	ISP_CMD	= ISP_CMD & 0xf8;	                                    //1111,1000 
	ISP_CMD	= ISP_CMD |	SECTOR_ERASE_AP_and_Data_Memory_Command;	//0000,0011
	ISP_IAP_enable();
	ISP_TRIG = 0x46;        //触发ISP_IAP命令
	ISP_TRIG = 0xb9;        //触发ISP_IAP命令
	 _nop_();
	ISP_IAP_disable();
	return 1;
}

unsigned char byte_program(unsigned int byte_addr, unsigned char original_data) //字节编程 
{
//	byte_addr+=0x8000;
	ISP_ADDRH =	(unsigned char)(byte_addr >> 8);
	ISP_ADDRL =	(unsigned char)(byte_addr & 0x00ff);
	ISP_CMD	= ISP_CMD &	0xf8;        //1111,1000 
	ISP_CMD = ISP_CMD | PROGRAM_AP_and_Data_Memory_Command;		//0000,0010 
	ISP_DATA = original_data;
	ISP_IAP_enable();
	ISP_TRIG=0x46;        // 触发ISP_IAP命令
	ISP_TRIG=0xb9;        // 触发ISP_IAP命令 
	_nop_();
	ISP_IAP_disable();
	return	1;
}

⌨️ 快捷键说明

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