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

📄 flash1.c

📁 C8051f020单片机内部FLASH读写程序
💻 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 + -