?? wr_flash.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 + -