?? flash.c
字號:
////////////FLASH讀寫操作調試程序/////////////////
//////////flash.c////////////////////////////////////////
#include "c8051f020.h"
#include "absacc.h"
void FlashWrite(unsigned char xdata *pwrite,unsigned char *BufFrom,unsigned char len){
/*
pwrite為FLASH地址指針,采用xdata強制指明指針類型,以保證采用MOVX操作
BufFrom為數據指針
len為數據長度
*/
unsigned char i;
WDTCN = 0xde;//1101 1110
WDTCN = 0xad;// 禁止看門狗1010 1101
EA=0;//禁止中斷
// SFRPAGE=0x00;//0x84/* SFR PAGE SELECT */
FLSCL = 0x81;//0xb7/* FLASH TIMING PRESCALAR */
PSCTL = 0x03;//0x8f 0000 0011
*pwrite=0; //擦除操作
PSCTL=0x01;
for(i=0;i<len;i++) //copy BufFrom to FLASH with *pwriter
{
*pwrite++=*BufFrom++;
}
PSCTL = 0; // disable FLASH writes
FLSCL = 0x80; // disable FLASH writes
EA=1;
}
void Flasherase(unsigned char xdata *pwrite){
/*
pwrite為FLASH地址指針,采用xdata強制指明指針類型,以保證采用MOVX操作
BufFrom為數據指針
len為數據長度
*/
// unsigned char i;
WDTCN = 0xde;//1101 1110
WDTCN = 0xad;// 禁止看門狗1010 1101
EA=0;//禁止中斷
// SFRPAGE=0x00;//0x84/* SFR PAGE SELECT */
FLSCL = 0x81;//0xb7/* FLASH TIMING PRESCALAR */
PSCTL = 0x03;//0x8f 0000 0011
*pwrite=0; //擦除操作
PSCTL=0x01;
PSCTL = 0; // disable FLASH writes
FLSCL = 0x80; // disable FLASH writes
EA=1;
}
void FlashRead(unsigned char code *pread,unsigned char *BufTo,unsigned char len){//采用指針方法實現
/*
對FLASH讀操作采用MOVC指令,故采用code指針類型
BufTo為存放讀取值的緩沖指針
len為數據長度
*/
unsigned char i;
for(i=0;i<len;i++){
BufTo[i]=*pread;
pread++;
}
}
void config(){
//看門狗禁止
WDTCN = 0x07;
WDTCN = 0xDE;
WDTCN = 0xAD;
// SFRPAGE = 0x0F;
//交叉開關使能,但沒有進行外圍設備配置
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x40;
// XBR3 = 0x00;
//管腳輸出配置,P0口為開漏輸出,其中P0.6接上拉電阻,P0為數字輸入口
// SFRPAGE = 0x0F;
P0MDOUT = 0x00;
P1MDIN = 0xFF;
//晶振配置,采用內部晶振8分頻
// SFRPAGE = 0x0F;
// CLKSEL = 0x00;
OSCXCN = 0x00;
OSCICN = 0x84;
}
void main(){
int i=0;
config();
for(i=0;i<30;i++)
{Flasherase(512*i);
}
// Flasherase(512*0);
while(1);//可在此設斷點觀察寫的數據與讀的數據是否一致
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -