📄 flash_extend.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 + -