?? flash1.c
字號:
////////////FLASH讀寫操作調試程序/////////////////
//////////flash.c////////////////////////////////////////
#include "c8051f040.h"
#include "absacc.h"
#define LEN 5
void FlashWrite(unsigned char xdata *pwrite,unsigned char *BufFrom,unsigned char len){
/*
pwrite為FLASH地址指針,采用xdata強制指明指針類型,以保證采用MOVX操作
BufFrom為數據指針
len為數據長度
*/
unsigned char i;
WDTCN = 0xde;
WDTCN = 0xad;// 禁止看門狗
EA=0;//禁止中斷
SFRPAGE=0x00;
FLSCL = 0x81;
PSCTL = 0x03;
*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 FlashRead1(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 FlashRead2(unsigned int adr,unsigned char *BufTo,unsigned char len){//采用CBYTE[]讀FLASH
unsigned i;
for(i=0;i<len;i++){
BufTo[i]=CBYTE[adr];
adr++;
}
}
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(){
xdata unsigned char teststr1[LEN]={0x30,0x32,0x34,0xa8,0xa7};
xdata unsigned char readdata1[LEN];
xdata unsigned char readdata2[LEN];
float pi=3.14159;
idata int tt=-345;
xdata float readpi=0.0;
xdata int readtt=0;
config();
FlashWrite(512*20,teststr1,LEN);
FlashWrite(512*21,teststr1,LEN);
FlashWrite(512*21+20,&pi,sizeof(float));
FlashWrite(512*22,&tt,sizeof(int));
FlashRead1(512*20,readdata1,LEN);
FlashRead1(512*21,readdata2,LEN);
FlashRead1(512*21+20,&readpi,sizeof(float));
FlashRead2(512*22,&readtt,sizeof(int));
while(1);//可在此設斷點觀察寫的數據與讀的數據是否一致
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -