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

📄 e2prom_drv.c

📁 此文件为GPS源代码
💻 C
字号:
#include "stc89c52.h"
#include <intrins.h>        /* use _nop_() function */

/*************	Definition 	************************************/
Uint16 e2prom_free_add;						//向E2PROM写入新的GPS数据时,新GPS数据在E2PROM中的地址
Uint16 e2prom_update_add;					//用于指示在把新的设备状态信息更新到e2prom中时,数据在e2prom的地址
Uint16 e2prom_gl_add;						// 通用地址用于切换e2prom_free_add e2prom_update_add
extern idata Byte gl_buffer[GL_BUF_SIZE];   // global buffer of 256 bytes 
Byte e2prom_read_byte()
{
	// send address 
	ISP_ADDRH=(Uchar)(e2prom_gl_add >> 8);
	ISP_ADDRL=(Uchar)(e2prom_gl_add & 0x00FF);
	// send read command 
	//E2prom_read_on();
	ISP_CMD=ISP_CMD & 0xF8;	
	ISP_CMD=ISP_CMD | E2PROM_READ_CMD;
	// e2prom enable 
	//E2prom_enable();
	EA	= 0;						
	ISP_CONTR=ISP_CONTR & 0x18;		
	ISP_CONTR=ISP_CONTR	| WAIT_TIME;
	ISP_CONTR=ISP_CONTR | 0x80;	
	// execute e2prom cmd 
	//E2prom_execute_cmd();
	ISP_TRIG=0x46;					
	ISP_TRIG=0xB9;					
	_nop_();
	
	// e2prom disenable
	//E2prom_disenable();
	ISP_CONTR	=0x7F;				
	ISP_CMD		=0x00;				
	ISP_TRIG	=0x00;				
	ISP_ADDRH	=0x00;				
	ISP_ADDRL	=0x00;				
	EA			=1;
	return E2prom_read_byte();
}
/*************** Read bytes     *************************************/
/*功能:	 从e2prom中读取len个字节数据                      			*/
/*参数: e2prom_gl_add 确定数据的开始地址  	        	  			*/
/*      len  确定读取字节数据个数 				                   	*/ 		
/*返回值: 实际读取到字节数据个数									*/
/********************************************************************/
Byte	e2prom_read_bytes(Byte len)
{
	Byte i;
	for(i=0;i<len;i++)
	{
		gl_buffer[i]=e2prom_read_byte();
		e2prom_gl_add+=1;
	}
	
	return len;
}

	
// 	删除一个扇区
bit		e2prom_sector_erase()
{
	Uint16 get_sector_addr	=	0;
	get_sector_addr			=	(e2prom_gl_add & 0xfe00); /* 1111,1110,0000,0000; 取扇区地址 */
	ISP_ADDRH        		=	(Uchar)(get_sector_addr >> 8);
	ISP_ADDRL		        =	0x00;

	ISP_CMD	=	ISP_CMD	&	0xf8;						/* 1111,1000 */
	ISP_CMD	=	ISP_CMD	|	E2PROM_ERASE_CMD;			/* 0000,0011 */
	// e2prom enable 
	//E2prom_enable();
	EA	= 0;						
	ISP_CONTR=ISP_CONTR & 0x18;		
	ISP_CONTR=ISP_CONTR	| WAIT_TIME;
	ISP_CONTR=ISP_CONTR | 0x80;	
	
	// execute e2prom cmd 
	//E2prom_execute_cmd();
	ISP_TRIG	=	0x46;        /* 触发ISP_IAP命令 */
	ISP_TRIG	=	0xb9;        /* 触发ISP_IAP命令 */
	 _nop_();

	// e2prom disenable
	//E2prom_disenable();
	ISP_CONTR	=0x7F;				
	ISP_CMD		=0x00;				
	ISP_TRIG	=0x00;				
	ISP_ADDRH	=0x00;				
	ISP_ADDRL	=0x00;				
	EA			=1;
	return OK;
}
	//	写入gl_buffer中len个字节数据	
bit		e2prom_write_bytes(Int16 len)
{	//send address
	ISP_ADDRH	=	(Uchar)(e2prom_gl_add >> 8);
	ISP_ADDRL	=	(Uchar)(e2prom_gl_add & 0x00ff);
	// send write command 
	ISP_CMD		=	ISP_CMD	&	0xf8;        			/* 1111,1000 */
	ISP_CMD		=	ISP_CMD	|	E2PROM_WRITE_CMD;		/* 0000,0010 */
	

	//ISP_IAP_enable();
	EA	= 0;						
	ISP_CONTR=ISP_CONTR & 0x18;		
	ISP_CONTR=ISP_CONTR	| WAIT_TIME;
	ISP_CONTR=ISP_CONTR | 0x80;	
	
	//write a byte 
	E2prom_write_byte(gl_buffer[1]);
	// execute e2prom cmd 
	//E2prom_execute_cmd();
	ISP_TRIG=0x46;					
	ISP_TRIG=0xB9;					
	_nop_();
	
	// e2prom disenable
	//E2prom_disenable();
	ISP_CONTR	=0x7F;				
	ISP_CMD		=0x00;				
	ISP_TRIG	=0x00;				
	ISP_ADDRH	=0x00;				
	ISP_ADDRL	=0x00;				
	EA			=1;
	
	return len;
}	





	

⌨️ 快捷键说明

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