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

📄 针对两种flash所写的读写程序.txt

📁 针对两种flash所写的读写程序,公布我原来写的针对两种flash所写的读写程序
💻 TXT
字号:
针对两种flash所写的读写程序
公布我原来写的针对两种flash所写的读写程序,用的单片机是51系列!
/*
;***************************************************************************
; JUE TEAM.
;***************************************************************************

Revision History:
Rev             Date     Author
____________________________________________________________________________
1.0  2002/10/3 JUEZHU
  Build.

    flash operation service routines.
;---------------------------------------------------------------------------
*/
/**********************
* INCLUDE FILES       *
**********************/
#include "global.h"
#ifdef W516REG
#include "w516reg.h"
#else
#include "w58reg.h"
#endif
#include "comm.h"
#include "lcd.h"
#include "flash.h"

/**********************
* IMPORTED DATA       *
**********************/
UINT8  ddat;
/**********************
* LOCAL MACROS        *
**********************/
#define BANKSIZE 0x2000

#define FLASHCS  0xe000
/**********************
* FUNCTION PROTOTYPES *
**********************/

#ifdef FLASH29C40 //for 29c040
/*********************************************************
* NAME    : protect()
*           read one byte from watchdog X5045.
*
* Returns : mbByte  
*
* Parameter  Description
* --------------------------------------------------------
* Externals  Usage
* --------------------------------------------------------
* Additional information:
*  none
*********************************************************/
void protect(void)
{
   //load data AAH into address 0x5555h
   P4=0x02;
   P1=0x00;
   XBYTE[0xF555]=0xaa;
   //load data 55H into address 0x2AAAh
   P4=0x01;
   P1=0x00;
   XBYTE[0xEAAA]=0x55;
   //load data AAH into address 0x5555h
   P4=0x02;
   P1=0x00;
   XBYTE[0xF555]=0xa0;
  }
/*********************************************************
* NAME    : FlashWriteSector()
*           write one setor to the flash AT29C040A
*
* Returns : NONE 
*
* Parameter  Description
* --------------------------------------------------------
*tdwAddr             the wroten address of the flash
*tbDataStr           data string
* Externals  Usage
* --------------------------------------------------------
* Additional information:
*  none
*********************************************************/
void FlashWriteSector(UINT32 tdwAddr,UINT8 *tbDataStr)
{
     UINT8 mbBank;
     UINT16 mwRamOffset;
     UINT16 i;
     BIT flaga;

     flaga=EA;
     EA=0;
     mwRamOffset=tdwAddr%BANKSIZE;
     mbBank=tdwAddr/BANKSIZE;
     mwRamOffset|=0xE000;
     protect();           
       for(i=0;i<256;i++)
       {           
        P4=mbBank&0x0f;
             P1=mbBank>>4;
             XBYTE[mwRamOffset]=*tbDataStr;
             tbDataStr++;
             mwRamOffset++;
       }
       DelayMS(40);   
       EA=flaga;
}

/*********************************************************
* NAME    : FlashReadSector()
*           read one setor from flash AT29C040A.
*
* Returns : NONE  
*
* Parameter  Description
* --------------------------------------------------------
*tdwAddr             the start address of the sector
*tbDataBuf          data buffer for storage 
* Externals  Usage
* --------------------------------------------------------
* Additional information:
*  none
*********************************************************/
void FlashReadSector(UINT32 tdwAddr,UINT8 *tbDataBuf)
{
 UINT8 mbBank;
 UINT16 mwRamOffset;
 UINT16 i;

 mwRamOffset=tdwAddr%BANKSIZE;
     mbBank=tdwAddr/BANKSIZE;
     mwRamOffset|=0xE000;
     for(i=0;i<256;i++)
     {
  P4=mbBank&0x0f;
             P1=mbBank>>4;
             *tbDataBuf=XBYTE[mwRamOffset];
             tbDataBuf++;
             mwRamOffset++;
     }
 
}

#else//for 28sf040

void protect(void)
{
 UINT8 result;
 //read the address:1823h,1820h,1822h,0418h,041bh,0419h,041ah
 P4=0x00;
 P1=0x00;
 result=XBYTE[FLASHCS|0x1823];
 result=XBYTE[FLASHCS|0x1820];
 result=XBYTE[FLASHCS|0x1822];
 result=XBYTE[FLASHCS|0x0418];
 result=XBYTE[FLASHCS|0x041b];
 result=XBYTE[FLASHCS|0x0419];
 result=XBYTE[FLASHCS|0x041a];
}
/*byte program instruct:0x10*/
void FlashWriteSector(UINT32 tdwAddr,UINT8 *tbDataStr)
{
 UINT8 mbBank;
     UINT16 mwRamOffset;
     UINT16 i;
     BIT flaga;

     flaga=EA;
     EA=0;
     mwRamOffset=tdwAddr%BANKSIZE;
     mbBank=tdwAddr/BANKSIZE;
     mwRamOffset|=0xE000;
     protect();    
     P4=mbBank&0x0f;
       P1=mbBank>>4;       
       for(i=0;i<256;i++)
       {        
        //P4=mbBank&0x0f;
        //P1=mbBank>>4; 
        XBYTE[mwRamOffset]=0x10;
             XBYTE[mwRamOffset]=*tbDataStr;
             tbDataStr++;
             mwRamOffset++;
             
       }
       //DelayMS(10);   
       EA=flaga;
}


void FlashReadSector(UINT32 tdwAddr,UINT8 *tbDataBuf)
{
 UINT8 mbBank;
 UINT16 mwRamOffset;
 UINT16 i;

 mwRamOffset=tdwAddr%BANKSIZE;
     mbBank=tdwAddr/BANKSIZE;
     mwRamOffset|=0xE000;
     P4=mbBank&0x0f;
       P1=mbBank>>4;
     for(i=0;i<256;i++)
     {
  //P4=mbBank&0x0f;
             //P1=mbBank>>4;
             *tbDataBuf=XBYTE[mwRamOffset];
             tbDataBuf++;
             mwRamOffset++;
     }
 
}
#endif
/*********************************************************
* NAME    : DelayMS()
*           delay for tbTick ms for finish to write one sector.
*
* Returns : none  
*
* Parameter  Description
* --------------------------------------------------------
* tbTick             how much  milisecond
* Externals  Usage
* --------------------------------------------------------
* Additional information:
*  none
*********************************************************/
void DelayMS(UINT8 tbTick)
{
    UINT8 mbcount;
    UINT8 j;
    for(j=0;j<tbTick;j++)
    {
       for(mbcount=0;mbcount<52;mbcount++)
       {

       }
    }
}

⌨️ 快捷键说明

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