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

📄 main.c

📁 读写C8051F020内部FLASH的代码
💻 C
字号:


#include<assert.h>
#include<string.h>

#define SIZE 100

sbit	LED = P2^6;	//"LED调试引脚,用于测试!"


 void 	Test_LED(void)
  {

	uchar LED_Num =0;

	for( LED_Num =0; LED_Num < 6;LED_Num++)
	{

	   	LED = 1;
		delayms(50); 

	   	LED = 0;
	 	delayms(50); 

	}

   	LED = 1;
}
/******************************************************************************

** 函数 名 :	WriteBytesToFlash

** 描    述:	写C8051F020/1的128字节区域;
	
** 入口参数:    Buff :写数据存放的地址;
				Lenth:要写数据的长度;最大128;

** 出口参数:    返回 1;

*******************************************************************************/

unsigned char WriteBytesToFlash(const unsigned char *Buff, unsigned char Lenth)
{
	unsigned char xdata *PWrite = (void *)0;
	unsigned char Local_Lenth = 0;

	assert((Buff != NULL) && (Lenth < 128));

	FLSCL = 0x81;//"允许FLASH写操作"

	PWrite =0;
	PSCTL = 0x07;//"允许FLASH擦除操作和访问128字节区域"

	*PWrite =0;	//"启动擦除操作"

	PSCTL = 0x05; //"禁止擦除操作"

	Local_Lenth = Lenth;

	while( Local_Lenth-- >0 )
	{

		*PWrite++ = *Buff++;

	}

	PSCTL = 0;
	FLSCL = 0x80;

	return 1;

}
/******************************************************************************

** 函数 名 :	ReadBytesFromFlash

** 描    述:	读C8051F020/1的128字节区域;
	
** 入口参数:    Buff :读数据存放的地址;
				Lenth:要读数据的长度;最大128;

** 出口参数:    返回 1

*******************************************************************************/

unsigned char ReadBytesFromFlash(volatile unsigned char *Buff, unsigned char Lenth)
{
	 unsigned char code *PRead = (void *)0;
	unsigned char Local_Lenth =0;

	assert((Buff != NULL) && (Lenth < 128));

	PSCTL = 0x04; //"允许访问128字节区域"

	Local_Lenth = Lenth;
	PRead = 0;

	while( Local_Lenth-- >0 )
	{

		*Buff++ = *PRead++;

	}

	return 1;

}

/******************************************************************************

** 函数 名 :	主函数

** 描    述:
	
** 入口参数:    无

** 出口参数:    无

*******************************************************************************/
void main(void)
 {
	uchar i = 0;
	xdata uchar buff[SIZE]={0};
	xdata uchar Rbuff[SIZE];


	EA=0;                                    
	WDTCN = 0xde;    //"禁止看门狗"                   
	WDTCN = 0xad;

	Init_Mcu() ;
	Test_LED();

	for( i = 0; i < SIZE; i++)
	{
		buff[i]=i;
	}
	 
 	WriteBytesToFlash(buff,SIZE);
	ReadBytesFromFlash(Rbuff,SIZE);


	if(strcmp(Rbuff,buff) == 0 ) //"比较写入和读出的数据;若相等则执行 Test_LED()"
	{
		Test_LED();
		Test_LED();
	}

	while(1);

 }


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -