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

📄 iflash.c

📁 C8051F340内部flash读写程序
💻 C
字号:
/*
*********************************************************************************************************
* Flash(internal) Driver for C8051F340 MCU	
* version 1.0
* File : iflash.c
* By   : ZJP		2008/07/28
*********************************************************************************************************
*/
#include "C8051F340.h"
#include <stdio.h>
#include <absacc.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long int
void iflashBlockErase(uint blockAddress)
{
	uchar data EA_Flag = 0;
	char xdata * data pwrite;
	if(EA == 1)
       {
        EA=0;                              	// 关所有中断
	    EA_Flag = 1;
   }
    pwrite=(char xdata *)blockAddress;
    FLKEY=0xA5;
	FLKEY=0xF1;
	PSCTL|=0x03;                //PSEE=1,PSWE=1
    *pwrite=0;
	PSCTL&=~0x03;                //PSEE=0,PSWE=0
    if(EA_Flag == 1)
     EA=1;                             // 开中断   
    else
     EA = 0; 
}
void iflashByteWrite(uchar *bytedata,uint addr,uint length)
{
    uchar EA_Flag = 0;
	int i;
	uchar xbfdata;
	//data unsigned char idata *pread;      // 源地址只能是内部的存储器 
	char xdata * idata pread;
    char xdata * data pwrite;     // 目的数据指向FLASH的地址指针
    pread=bytedata;
	pwrite=(char xdata *)addr;
	//iflashBlockErase(addr);
	if(EA == 1)
       {
        EA=0;                              	// 关所有中断
	    EA_Flag = 1;
        }
    PFE0CN=PFE0CN&0xfe;           // FLBWE=0;
    PSCTL|=0x01;
    PSCTL&=0xfd;                    //PSWE=1,PSEE=0
    for(i=length;i>0;i--)
	 {
      	FLKEY=0xA5;
    	FLKEY=0xF1;
		xbfdata=*pread;
    	*pwrite=xbfdata;
		pread++;
		pwrite++;
	 }
    PSCTL&=0xfe;              //PSWE=0,PSEE=0
	if(EA_Flag == 1)
     EA=1;                             // 开中断   
    else
     EA = 0; 
}
/*void iflashWordWrite(uchar *bytedata,uint addr,uint length)
{
  	uchar EA_Flag = 0;
	data unsigned char idata *pread;      // 源地址只能是内部的存储器 
    char xdata * data pwrite;      // 目的数据指向FLASH的地址指针
	int i;
	pread=bytedata;
	pwrite=(char xdata *)addr; 
	if(EA == 1)
       {
        EA=0;                              	// 关所有中断
	    EA_Flag = 1;
        }
    PFE0CN=PFE0CN|0x01;           // FLBWE=1;
    PSCTL|=0x01;
    PSCTL&=0xfd;                     //PSWE=1,PSEE=0
    for(i=length;i>0;i-2)
	 {
      	FLKEY=0xA5;
    	FLKEY=0xF1;
    	*pwrite++=*pread++;  //必须为偶地址
        FLKEY=0xA5;
    	FLKEY=0xF1;
        *pwrite++=*pread++;
	 }
    PSCTL&=0xfe;                   //PSWE=0,PSEE=0
	if(EA_Flag == 1)
     EA=1;                             // 开中断   
    else
     EA = 0; 
}*/
void iflashRead(uchar *bytedata,uint addr,uint length)
{
    int i;
	uchar EA_Flag = 0;
    char code * data pread;          	  // 程序存储器空间的指针(Flash),指向待读地址 
    char xdata *idata pwrite;          // 数据的指针
	pwrite=bytedata;
    /*if(EA == 1)
     {
       EA=0;                              	// 关所有中断
	   EA_Flag = 1;
      }*/
	pread=(char code *)addr;
	for(i=length;i>0;i--)
    	 *pwrite++=*pread++;
    /*if(EA_Flag == 1)
     EA=1;                             // 开中断   
    else
     EA = 0;*/ 
}
uchar iflashReadByte(uint addr)
{
    int i;
	uchar EA_Flag = 0;
    char code * data pread;          	  // 程序存储器空间的指针(Flash),指向待读地址 
    uchar idata pwrite;          // 数据的指针
    if(EA == 1)
     {
       EA=0;                              	// 关所有中断
	   EA_Flag = 1;
      }
	pread=(char code *)addr;
    pwrite=*pread;
    if(EA_Flag == 1)
     EA=1;                             // 开中断   
    else
     EA = 0; 
    return(pwrite);
}

⌨️ 快捷键说明

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