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

📄 flash_extend.c

📁 用24cxx扩展LPC900单片机代码存储空间
💻 C
字号:
/*****************************************************************************
*文件名:	FlashExtend.C
*版权:		周立功单片机研究所
*功能:		24Cxx扩展LPC900存储代码演示程序
*日期:		17:25 04-6-16
*****************************************************************************/
#include "reg932.h"
#include "VI2C_C51.h"
#define	uchar unsigned char
#define	uint unsigned int

sfr	FMADRH	= 0xE7;				//IAP_Lite相关寄存器定义
sfr	FMADRL  = 0xE6;
sfr	FMCON   = 0xE4;
sfr	FMDATA  = 0xE5;

sbit 	KEY1=P1^6;
sbit 	KEY2=P1^7;
sbit 	LED=P1^4;
uchar	buff[16];				//定义接收发送缓冲区

void	Transfer(uint addr);			
void	Page_Write(uchar addr_H,uchar addr_L);
void 	Delayms(uchar n);		
void 	(*Excute)();				//定义函数指针

void main()
{
	P1M1=0x0C;				//P1口初始化
	P1M2=0x0C;
	Excute=0x1800;				//设定函数指针地址为0x1800
	while(1)
	{
		if(KEY1==0)			//等待KEY1按下
		{
			Delayms(20);
			while(KEY1==0);		//去抖动处理
		
			Transfer(0x00);		//从EEPROM地址为00h处读取数据,并写入FLASH中,然后调用该段代码
		}else if(KEY2==0)		//等待KEY2按下
		{
			Delayms(20);		
			while(KEY2==0);		//去抖动处理

			Transfer(0x40);		//从EEPROM地址为40h处读取数据,并写入FLASH中,然后调用该段代码
		}
	}
}

//----------------------------------
void Page_Write(uchar addr_H,uchar addr_L)
{
	uchar i;
	do
	{
		FMCON=0x00;			//装载数据指令
		FMADRH=addr_H;
		FMADRL=addr_L;			//装载地址
		for(i=0;i<16;i++)
		{
			FMDATA=buff[i];		//装载数据,地址自增1
		}
		FMCON=0x68;			//擦除编程操作
	}while((FMCON&0x0F)!=0);		//等待编程操作完成
}
//------------------------------------
void Transfer(uint addr)
{
	uchar suba;

	suba=addr&0xFF;				//设定将要从EEPROM区读取的地址
	IRcvStr(0xa0,suba,buff,16);		//从EEPROM读取16个字节数据

	Page_Write(0x18,0x00);			//向FLASH代码(1800H)写入16个字节的数据

	Excute();				//采用函数指针方式,调用固定地址1800H处的代码
}
//----------------------------------
//功能:ms级延时
//----------------------------------
void	Delayms(uchar	n)
{
	int	j;

	while(n>0)
	{
		for(j=0;j<=669;j++);
		n--;
	}
}
//----------------------------------

⌨️ 快捷键说明

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