N76E003之模拟EEPROM

news/2024/12/22 14:00:13/

在使用STM32时,常可以将内部1flash的一部分划作数据储存区(EEPROM),用于掉电后的数据保存。而N76E003单片机也可实现类似的功能。
在这里插入图片描述
在这里插入图片描述
下图为N76E003的内存分配图,我们可以从下图中看到APROM使用的地址范围(APROM + LDROM = 18K,当LDROM为0时,APROM的地址为0000~0x47FF)
在这里插入图片描述
下面的程序为新唐官方所给出的例程,我只进行了粗浅的注释

//***********************************************************************************************************
//  File Function: N76E003 APROM program DATAFLASH as EEPROM way 
//***********************************************************************************************************
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"#define ADDR_BASE 0x4700//位于地址末端.4700~47FF共256字节#define FLASH_L_LOW			ADDR_BASE+1
#define FLASH_L_HIGH		ADDR_BASE+2
#define FLASH_H_LOW			ADDR_BASE+3
#define FLASH_H_HIGH		ADDR_BASE+4volatile unsigned char xdata page_buffer[128];/*********************************************************
功能:读取APROM中的一位数据
参数:需要读取的内存地址(addr)
*********************************************************/
UINT8 Read_APROM_BYTE(UINT16 code *u16_addr)
{UINT8 rdata;rdata = *u16_addr>>8;return rdata;
}
/*****************************************************************************************************************
write_DATAFLASH_BYTE :
写入flash数据
user can copy all this subroutine into project, then call this function in main.
用户能复制这所有的代码区工程中,然后调用这个函数在主函数中功能:在指定Flash地址写入数据
参数:需要写入的flash地址、需要写入的数据、
******************************************************************************************************************/		
void Write_DATAFLASH_BYTE(unsigned int u16EPAddr,unsigned char u8EPData)
{unsigned char looptmp=0;unsigned int u16_addrl_r;unsigned int RAMtmp;//Check page start addressu16_addrl_r=(u16EPAddr/128)*128;
//Save APROM data to XRAM0for(looptmp=0;looptmp<0x80;looptmp++){RAMtmp = Read_APROM_BYTE((unsigned int code *)(u16_addrl_r+looptmp));page_buffer[looptmp]=RAMtmp;}
// Modify customer data in XRAMpage_buffer[u16EPAddr&0x7f] = u8EPData;//Erase APROM DATAFLASH pageIAPAL = u16_addrl_r&0xff;IAPAH = (u16_addrl_r>>8)&0xff;IAPFD = 0xFF;set_IAPEN; set_APUEN;IAPCN = 0x22; 		set_IAPGO; //Save changed RAM data to APROM DATAFLASHset_IAPEN; set_APUEN;IAPCN = 0x21;for(looptmp=0;looptmp<0x80;looptmp++){IAPAL = (u16_addrl_r&0xff)+looptmp;IAPAH = (u16_addrl_r>>8)&0xff;IAPFD = page_buffer[looptmp];set_IAPGO;			}clr_APUEN;clr_IAPEN;
}	/******************************************************************************************************************/	void main (void) 
{UINT8 datatemp;UINT16 system16highsite;
/* -------------------------------------------------------------------------*/
/*  Dataflash use APROM area, please ALWAYS care the address of you code    */
数据闪存使用APROM区,请一定保证这部分数据和你的代码地址不会冲突
/*	APROM 0x3800~0x38FF demo as dataflash 				      				      			*/
APRON 地址为0x3800~0x38ff  演示作为数据内存
/* 	Please use Memory window key in C:0x3800 to check earse result					*/	  
请使用内存窗口密匙 (C:0x3800)去检查结果?????    
/* -------------------------------------------------------------------------*/InitialUART0_Timer1(115200);//串口初始化
//call write byte Write_DATAFLASH_BYTE (0x3802,0x34);//在0x3802地址写入数据0x34Write_DATAFLASH_BYTE (FLASH_L_LOW,0x55);//在0x4700地址写入数据0x55Write_DATAFLASH_BYTE (FLASH_L_HIGH,0x56);//0x4701写入0x56Write_DATAFLASH_BYTE (FLASH_H_LOW,0xaa);//0x4702写入0xaaWrite_DATAFLASH_BYTE (FLASH_H_HIGH,0x66);//0x4703写入0x66
//call read bytedatatemp = Read_APROM_BYTE(0x3802);system16highsite = ((Read_APROM_BYTE(FLASH_H_HIGH)<<8)+Read_APROM_BYTE(FLASH_H_LOW));while(1){
//				printf ("\n data temp = 0x%bx", datatemp);//打印datatemp中数据}
}

总结:使用flash作为eeprom时,最好按实际需求从47FF倒着写,以此保证不会干扰程序的正常运行。

(https://blog.csdn.net/DZRYWYBL/article/details/86320325在此感谢这位博主分享经验)


http://www.ppmy.cn/news/620624.html

相关文章

最全74HC04六反相器中文资料|引脚图及功能表|应用电路图

最全74HC04六反相器中文资料|引脚图及功能表|应用电路图 最全74HC04六反相器中文资料|引脚图及功能表|应用电路图&#xff0c;该74HC04/74HCT04是高速CMOS器件&#xff0c;低功耗肖特基的TTL(LSTTL)电路 。功能作用&#xff1a;六反相器图1 引脚-其他基础电路图 该74HC04/74HC…

STM32G474E-EVAL

STM32G474E-EVAL valuation board with STM32G4xxQE MCUDM00564162_ENV1.pdf https://download.csdn.net/download/qq_39392553/12122443 批量生产 储存到myST Evaluation board with STM32G474QE MCU 下载产品简介 Order from our eStore and our distributors Buy now…

N76E003读24C64程序

IIC.C #include “I2C.h” #include “N76E003.h” #include “SFR_Macro.h” #include “Function_define.h” #include “Common.h” #include “Delay.h” //端口定义=== #define IIC_SCL_PORT //GPIOF #define IIC_SCL_PIN P13//GPIO_PIN_6 #define IIC_SDA_PORT //GPIOF…

E+H差压变送器FMD78

应用领域 Deltabar FMD78差压变送器采用金属传感器&#xff0c;带双毛细管膜片密封&#xff0c;主要用于过程工业和卫生行业内液体、气体、蒸汽和粉尘的差压连续测量。内置HistoROM数据模块&#xff0c;方便过程和设备参数管理。符合IEC61508标准&#xff0c;满足SIL3安全功能…

xenserver Pool和Host损坏后的灾难恢复(HBA存储)

最近工作中碰到一个客户的生产环境挂了&#xff0c;Pool中的3台机器的xapi都无法启动&#xff0c;所有的xe命令都无法执行&#xff0c;唯一能访问的方式 只有SSH,问题是还有一台机器上有许多虚拟机在运行&#xff0c;尝试了很多方法都没有效果&#xff0c;客户的pool中的db损坏…

骨传导运动耳机哪款好、骨传导运动耳机最好的品牌

如今随着科技的发展&#xff0c;蓝牙耳机越来越受欢迎&#xff0c;这进一步推动了运动耳机的发展。无线蓝牙耳机与播放器分隔带来的好处是减少了耳机线带来的困扰。然而&#xff0c;并非所有的蓝牙耳机都适合运动&#xff0c;只有经过专门设计和调节的耳机才能在运动过程中不成…

编译.ts的方法、ts转换为js文件

目录 第一步&#xff1a;安装环境 第二步&#xff1a;按需转换 第一步&#xff1a;安装环境 执行如下指令安装tsc: npm install -g typescript 完成后查看版本&#xff0c;如出现版本信息则安装成功&#xff1a; tsc -v 如未出现版本信息&#xff0c;则尝试本工程下安装…

ckplayer在线播放流媒体

项目名称&#xff1a;ckplayer 项目作者&#xff1a;niandeng 开源许可协议&#xff1a;MIT 项目简介 本项目用于在网页端播放视频&#xff0c;支持mp4、flv、m3u8及 rtmp 协议的直播&#xff0c;支持移动端和 PC 端。 项目架构 软件分为两部分&#xff1a; 1.JavaScript …