历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2020年01月07日 | 单片机成长之路(51基础篇) - 022 N76e003 APROM模拟EEPROM驱动

2020-01-07 来源:eefocus

N76e003单片机内部没有EEPROM,但是可以使用 APROM模拟EEPROM功能,代码如下:


eeprom.h


 1 #ifndef _EEPROM_H_

 2 #define _EEPROM_H_

 3 

 4 //EEPROM 指令

 5 #define BYTE_PROGRAM_AP 0x21    //APROM 字节编程(数据写入)

 6 #define PAGE_ERASE_AP     0x22    //APROM 页擦除 (128字节)

 7 #define BYTE_Read_AP    0x00    //APROM 字节读 (数据字节)

 8 

 9 

10 // EEPROM起始地址

11 #define EEPROM_START_ADDRESS          0x0200

12 

13 void Eeprom_Unlock(void);

14 void Eeprom_Locked(void);

15 void Eeprom_IAP_process(void);

16 void Eeprom_Erase_page(unsigned short address,unsigned char Data);

17 void Eeprom_Byte_write(unsigned short address,unsigned char Data);

18 unsigned char Eeprom_Erase_read(unsigned short address);

19 

20 

21 #endif  /* _EEPROM_H_ */


eeprom.c


  1 #include

  2 #include "eeprom.h"

  3 #include "data.h"

  4 

  5 volatile unsigned char code Data_Flash[128] _at_ EEPROM_START_ADDRESS;                //不被优化

  6 

  7 /**************************************************************************

  8 Function:    Eeprom_Unlock

  9 Description: 解锁 Eeprom

 10 Input:       no

 11 Output:      no

 12 Return:      no

 13 **************************************************************************/

 14 void Eeprom_Unlock(void){

 15     //开启 在线编程模式(LDROM和APROM)

 16     TA = 0xAA;                            //CHPCON受TA保护

 17     TA = 0x55;

 18     CHPCON |= 0x01;                        //IAPEN = 1, 启用IAP模式(CHPCON芯片控制寄存器)

 19     //开启 编程程序模式(APROM)

 20     TA = 0xAA;                            //IAPUEN受TA保护

 21     TA = 0x55;

 22     IAPUEN |= 0x01;                        //APUEN = 1, 启用APROM更新(更新使能)

 23 }

 24 /**************************************************************************

 25 Function:    Eeprom_Locked

 26 Description: 解锁 Eeprom

 27 Input:       no

 28 Output:      no

 29 Return:      no

 30 **************************************************************************/

 31 void Eeprom_Locked(void)

 32 {

 33     //关闭 编程程序模式(APROM)

 34     TA = 0xAA;                             //IAPUEN受TA保护

 35     TA = 0x55;

 36     IAPUEN &= ~0x01;                      //APUEN = 0,禁用APROM更新

 37     //关闭 在线编程模式(LDROM和APROM)

 38     TA = 0xAA;                             //CHPCON受TA保护

 39     TA = 0x55;

 40     CHPCON &= ~0x01;                     //IAPEN = 0,禁用IAP模式

 41 }

 42 /**************************************************************************

 43 Function:    Eeprom_IAP_process

 44 Description: IAP 处理

 45 Input:       no

 46 Output:      no

 47 Return:      no

 48 **************************************************************************/

 49 void Eeprom_IAP_process(void){

 50     bit EA_status;

 51     //IAP 执行

 52     EA_status = EA;

 53     EA = 0;

 54     TA = 0xAA;

 55     TA = 0x55;

 56     IAPTRG |= 0x01;                     //IAP 执行(设置该位为1开始执行IAP。该指令后,CPU保持程序计数器(PC) ,IAP硬件自动管理控制该过程。IAP完成后,程序计数器继续执行下一个指令。IAPGO位自动清零,保持为0。在触发IAP动作前,如果中断打开应该临时关闭因为硬件限制。)    Eeprom_Unlock();            //Eeprom 上锁

 57     EA = EA_status;

 58 }

 59 /**************************************************************************

 60 Function:    Eeprom_Erase_page

 61 Description: 擦除页面 Eeprom

 62 Input:       - address  指定擦除页面的绝对地址

 63              - Data  Eeprom擦除后的数据

 64 Output:      no

 65 Return:      no

 66 **************************************************************************/

 67 void Eeprom_Erase_page(unsigned short address,unsigned char Data)

 68 {

 69     unsigned char High_address = address >> 8;    //取高位

 70     unsigned char Low_address = address;        //取低位

 71     Eeprom_Unlock();                            //Eeprom 解锁

 72     //擦除页面

 73     IAPCN = PAGE_ERASE_AP;                //页擦除

 74     IAPAH = High_address;                //页面地址高8位

 75     IAPAL = Low_address;                //页面地址低8位

 76     IAPFD = Data;                        //擦除数据值

 77     //IAP 执行

 78     Eeprom_IAP_process();                //执行上面设置

 79     Eeprom_Locked();                    //Eeprom 上锁

 80 }

 81 /**************************************************************************

 82 Function:    Eeprom_Byte_write

 83 Description: 字节编程 Eeprom

 84 Input:       - address  指定更改数据的绝对地址

 85              - Data  Eeprom写入的数据

 86 Output:      no

 87 Return:      no

 88 **************************************************************************/

 89 void Eeprom_Byte_write(unsigned short address,unsigned char Data)

 90 {

 91     unsigned char High_address = address >> 8;    //取高位

 92     unsigned char Low_address = address;         //取低位

 93     Eeprom_Unlock();                    //Eeprom 解锁

 94     //字节编程

 95     IAPCN = BYTE_PROGRAM_AP;            //字节编程

 96     IAPAH = High_address;                //字节编程地址高8位

 97     IAPAL = Low_address;                //字节编程地址低8位

 98     IAPFD = Data;                        //写入的数据

 99     //IAP 执行

100     Eeprom_IAP_process();                //执行上面设置

101     Eeprom_Locked();                       //Eeprom 上锁

102 }

103 /**************************************************************************

104 Function:    Eeprom_Erase_read

105 Description: 字节读 Eeprom

106 Input:       - address  指定读出数据的绝对地址

107 Output:      no

108 Return:      IAPFD 读出的数据

109 **************************************************************************/

110 unsigned char Eeprom_Erase_read(unsigned short address){

111     unsigned char High_address = address >> 8;    //取高位

112     unsigned char Low_address = address;          //取低位

113     //字节读

114     IAPCN = BYTE_Read_AP;                  //字节读

115     IAPAH = High_address;                //字节读地址高8位

116     IAPAL = Low_address;                //字节读地址低8位

117     //IAP 执行

118     Eeprom_IAP_process();                //执行上面设置

119     return IAPFD;

120 }


推荐阅读

史海拾趣

Global Specialties公司的发展小趣事

在电子技术的不断推动下,Global Specialties始终保持对新技术的高度敏感。公司不断投入研发资源,对现有产品进行升级换代,并推出了一系列具有创新性的新产品。例如,公司开发的智能测试仪器能够自动完成复杂的测试任务,大大提高了测试效率和准确性。这些技术创新不仅巩固了Global Specialties在业内的领先地位,还为公司带来了更多的商业机会。

Emerson公司的发展小趣事

1890年,Emerson在美国密苏里州圣路易斯市成立,最初是一家电机和风扇制造商。1892年,新公司靠交流电机起家,并生产出了第一批销往北美的电风扇,净销售额接近6万美元。随着技术的不断革新,Emerson于1897年开始生产吊扇,这一创新使得高层建筑更加宜居,吊扇业务迅速成为公司的重要收入来源。

GAIA Converter Inc公司的发展小趣事

随着全球化进程的加速,锋鸣电子(上海总部)于2015年启动了国际化战略。公司首先在东南亚地区设立生产基地,利用当地的成本优势扩大产能。随后,锋鸣电子积极参加国际展会,拓展海外市场,与多家国际知名企业建立了合作关系。通过国际化战略的实施,锋鸣电子不仅提升了品牌知名度,还实现了销售收入的快速增长。

Falco Electronics公司的发展小趣事

Falco Electronics自创立之初就注重技术创新。公司创始人深知,在电子行业,只有不断推陈出新,才能在激烈的市场竞争中立足。因此,公司投入大量研发资金,吸引了一批优秀的科研人才。经过不懈努力,Falco Electronics成功开发出了一款具有革命性的新型芯片,这款芯片在性能上远超同类产品,迅速在市场上占据了一席之地。

Aeroflex公司的发展小趣事

Falco Electronics自创立之初就注重技术创新。公司创始人深知,在电子行业,只有不断推陈出新,才能在激烈的市场竞争中立足。因此,公司投入大量研发资金,吸引了一批优秀的科研人才。经过不懈努力,Falco Electronics成功开发出了一款具有革命性的新型芯片,这款芯片在性能上远超同类产品,迅速在市场上占据了一席之地。

EDO Corp公司的发展小趣事

随着电子行业的快速发展,Eclipse Magnetics逐渐将目光投向了更为高端的市场领域。在航空航天领域,Eclipse Magnetics凭借其先进的磁性技术,成功开发了一系列用于航空航天设备的磁性产品。这些产品不仅提高了航空航天设备的性能,还为公司带来了丰厚的利润。

问答坊 | AI 解惑

高清HDMI数字接口技术迅速普及

本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 由日立、松下、飞利浦、硅化图像Silicon Image、索尼、汤姆逊、东芝开发的高清晰度多媒体接口 (HDMI) 新近成为HDTV和消费类电子产品市场的连接标准。HDMI是首个也是唯一一个在单数字接口中集成 ...…

查看全部问答>

友善之臂嵌入式浏览器中文支持移植成功

经过本人的改造,友善之臂的qtopia自带的浏览器终于支持中文网页了,也就是,如果能把应用程序再汉化下,就可以应用到开发中。空说无凭,先给大家上几张图。(X86-qtopia在PC上运行) …

查看全部问答>

RDA 方法

我采用RDA技术,想连接后台的sql   server   2000的数据库,怎么都不好用。请问有人写过吗?…

查看全部问答>

求xscale下sdio接口的wifi模块

本人现在要在作一个类似于手机平台之类的东西,要支持wifi 和GPRS ,采用的是xscale的处理器,准备采用的操作系统是linux, 刚开始的时候我们是希望采用集成了wifi和gprs的模块,但是本人现在没有找到,或是过于大了,如果坛子里有人知道的话,还 ...…

查看全部问答>

44b0 ping不通

昨天弄了一个44b0的板子 用bootloader的tftp没有问题,但是uclinux的和主机就是ping不通,网线用的交叉直连的,ip也设置成同一网段了。uclinux是随机带的,可能会是什么问题,系统的网络不会有问题吧?望高人指点一二…

查看全部问答>

关于winCE下菜单自绘的问题

我想请问下winCE下能不能实现菜单的自绘。我用ModifyStyle不能实现。网上也有很多人提问,但是也没有人提出解决办法,小弟在这里先谢过了。主要的是在触摸屏上应用,现有的菜单太小,使用不方便。我想增大菜单的高度,如果不能实现自绘,是否有别的 ...…

查看全部问答>

delphi中spcomm控件安装问题

安装好后(SYSTEM中有红色控件)把SPCOMM控件放入窗体,没写一行代码直接编译弹出SPCOMM单元文件,编译不过,好像内嵌了一个代码单元,怎么回事?…

查看全部问答>

主管给了我一个C写的.dll要求我的Web程序能对接,与单片机交互,怎么办

求高手解答啊``那个C写的.dll文件里面把一些东西都写好了 我不知道如何调用,如何与单片机对接啊…

查看全部问答>

彩信接收问题

在做手机上的彩信软件,彩信打包,发送的问题解决了, 现在差彩信接收的问题搞不定,彩信中心给手机发彩信 先给手机发一条带有彩信URL的短信通知,手机再根据 URL去下载彩信,这个URL我取不到,要短信那边配合, 谁有彩信接收的代码,给我发一份,可 ...…

查看全部问答>

先上传一篇FPGA-TFT的论文

TFT控制器还没有弄好,还有我们板上用的SRAM是用的70NS的芯片,感觉难满足要求,希望大家对这个TFT控制器提些建议!…

查看全部问答>