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

📄 wr_flash.c

📁 此源码为商用的电力抄表系统的从机端源程序。通过电力载波模块
💻 C
字号:
/******************************************************************
* 文件名:WR_FLASH.C
* 功能:实现FLASH读写功能
* 日期:2005.6.16
* 说明:
******************************************************************/ 
#include <REG922.H>

#define uint  unsigned int
#define uchar unsigned char 


/* 定义页宽度屏蔽字(16字节时为0x0F,64字节时为0x3F) */
#define  PAGE_SIZE	0x3F

/* 定义FLASH控制命令字 */
#define  LOAD		0x00	  	/* 加载数据 	*/
#define  PROG		0x48		/* 编程		    */
#define  ERS_PROG	0x68		/* 擦除编程 	*/
#define  ERS_P		0x70		/* 擦除页		*/


/******************************************************************
* 名称:FLASH_ReadNByte
* 功能:指定FLASH起始地址,读多字节数据
* 入口参数:addr		指定的起始地址
*	   dat_buf	保存数据的缓冲区指针
*		   no		要写入数据个数
* 出口参数:无
******************************************************************/

void  FLASH_ReadNByte(uint addr, uchar *dat_buf, uchar no)
{  uchar code *readp;
   if(0==no) return;
   readp = addr;				// 设置读取的地址
   for(; no>0; no--)
   {  *dat_buf = *readp;		// 读取数据
	  dat_buf++;			
	  readp++;				// 指向下一地址
   }  
}



/******************************************************************
* 名称:FLASH_ErasePage
* 功能:页擦除
* 入口参数:addr		指定待擦除页内的地址
* 出口参数:返回0时表示操作错误
******************************************************************/
/*
bit  FLASH_ErasePage(uint addr)
{  FMADRH = addr>>8;
   FMADRL = addr&0xFF;
   FMCON = ERS_P;
   
   if( (FMCON&0x0F)!=0x00 ) return(0);
	 else return(1);
}
*/
/******************************************************************
* 名称:FLASH_WriteNByte
* 功能:指定FLASH起始地址,写多字节数据
* 入口参数:addr		指定的起始地址
*	   dat_buf	待写入的数据缓冲区指针
*		   no		要写入数据个数
* 出口参数:返回0时表示操作错误
******************************************************************/
bit  FLASH_WriteNByte(uint addr, uchar  *dat_buf, uchar no)
{ 
   if(0==no) return(0);
   
   FMCON = LOAD;			// 设置加载数据命令  
   FMADRH = addr>>8;			// 设置写入地址
   FMADRL = addr&0xFF;
   while(1)
   {  FMDATA = *dat_buf;		// 写入数据
	  dat_buf++;			// 指向下一个待写入的数据
	  addr++;				
	  no--;
	  if(0==no) break;			// 判断是否写完所有数据,若是则退出
	  
	}
   FMCON = ERS_PROG;			// 擦除编程
   if( (FMCON&0x0F)!=0x00 ) return(0);		
	 else  return(1);
}

/******************************************************************
* 名称:FLASH_WriteByte
* 功能:指定FLASH地址,写单字节数据
* 入口参数:addr		指定的地址
*	   dat		待写入的数据
* 出口参数:返回0时表示操作错误
******************************************************************/
/******************************************************************
* 名称:FLASH_WriteByte
* 功能:指定FLASH地址,写单字节数据
* 入口参数:addr		指定的地址
*	   dat		待写入的数据
* 出口参数:返回0时表示操作错误
****************************************************************** / 
bit  FLASH_WriteByte(uint addr, uchar dat)
{  FMCON = LOAD;		// 设置加载数据命令  
   FMADRH = addr>>8;		// 设置写入地址
   FMADRL = addr&0xFF;		
   FMDATA = dat;		// 写入数据
   FMCON = ERS_PROG;		// 擦除编程
   
   if( (FMCON&0x0F)!=0x00 ) return(0);
     else return(1);
}

/******************************************************************
* 名称:FLASH_ReadByte
* 功能:指定FLASH地址,读单字节数据
* 入口参数:addr		指定的地址
* 出口参数:返回值即是读出的数据
****************************************************************** /
uint  FLASH_ReadByte(uint addr)
{  uint  code *readp;

   readp = addr;
   return(*readp);
}



/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$* /


!!!!!!重复特别注意:写表的地址必须从串口写入才有效!!!!!
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/


⌨️ 快捷键说明

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