📄 flash1.c
字号:
////////////FLASH读写操作调试程序/////////////////
//////////flash.c////////////////////////////////////////
#include "c8051f020.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;//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(){
xdata float readpi=0.0;
int i=0;
config();
for(i=0;i<30;i++)
{Flasherase(512*i);
}
while(1);//可在此设断点观察写的数据与读的数据是否一致
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -