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 <N76E003.h>
  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 }

转载于:https://www.cnblogs.com/jikexianfeng/p/10655648.html

单片机成长之路(51基础篇) - 022 N76e003 APROM模拟EEPROM驱动相关推荐

  1. Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程–>错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个人 ...

  2. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  3. 程序猿成长之路番外篇之前后端加解密(rsa+aes混合加解密算法)

    今年国庆前夕接手一个外部项目,说是要保障接口数据安全,数据安全相对容易些,接口安全嘛emmmmm, 这个要考虑加解密算法.白名单之类的问题了.于是打算今天搞一期接口安全为题的成长之路番外篇. 为什么要 ...

  4. Vue学习之路(基础篇)

    Vue学习之路(基础篇)

  5. Alibaba技术专家倾心五年打造 Java成神之路:基础篇

    近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是Java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. ...

  6. 路上有你:《架构师成长之路》终结篇 (附新年礼物)

    <架构师成长之路>第 0 期 <架构师成长之路>第 1 期 <架构师成长之路>第 2 期 <架构师成长之路>第 3 期 <架构师成长之路>第 ...

  7. 单片机成长之路(51基础篇) - 008 C51 的标示符和关键字

    标准 C 语言定义了 32 个关键字,如下表(ANSI C的32个关键字): C51在此基础上针对单片机功能进行了扩展,详情见下表(C51编译器扩充关键字): C 51的数据类型 51单片机使用的C语 ...

  8. n76e885_单片机成长之路(51基础篇) - 023 N76e003 系统时钟切换到外部

    N76e003切换到外部时钟的资料很少(因为N76e003的片子是不支持无源晶振的,有源晶振的成本又很高,所以网上很少有对N76e003的介绍).有图有真相: 代码如下: main.c 1 #incl ...

  9. 单片机成长之路(51基础篇) - 013 MCS-51单片机控制详解–T2MOD

    T2CON:定时器控制寄存器 寄存器地址0C8H,位寻址0C8H-0CFH. 位地址 CF CE CD CC CB CA C9 C8 位符号 TF2 EXF2 RCLK TCLK EXEN2 TR2 ...

最新文章

  1. Java 线程同步 synchronized
  2. python怎么读取word文件大小_python操作word
  3. 快讯:阿里巴巴加入JCP执行委员会
  4. 微信小程序+ColorUI
  5. 微型计算机原理与接口技术 考题,微机原理与接口技术试题答案
  6. 更新macOS Monterey后遇到的各种Bug及解决方法
  7. 程序员的自我修养之数学基础11:期望、方差、常见分布(均匀分布、二项分布、泊松分布、正态分布)
  8. Unity零基础到入门 ☀️| 万字教程 对 Unity 中的 Navigation导航系统基础 全面解析+实战演练【收藏不迷路】
  9. python实时定位查询系统_selenium打开天眼查实现自动搜索查找功能
  10. androi的AT指令
  11. 网易互娱在线编程纪要
  12. 亿道信息丨手持PDA丨三防加固手机丨高频RFID丨电商仓库高效管理
  13. C++宏定义中的特殊符号
  14. Orange's:一个操作系统的实现 Descriptor 3宏详解
  15. Unity碰撞检测/触发器触发问题
  16. php人民币小写转大写函数,php 人民币小写怎么转大写
  17. 红楼梦java_《红楼梦》最经典的12首诗词,读懂了才是人生
  18. 价值规律的作用是什么
  19. NISP二级7.3 强制访问控制模型
  20. 卸载ncurses_Linux下程序库Ncurses显示中文乱码的解决方法

热门文章

  1. 移动硬盘上划分linux分区,Linux下磁盘分区和移动硬盘的挂载方法有哪些?
  2. linux工程师前景_linux运维工程师前景怎样 就业薪资待遇高吗
  3. java直线函数_java实现顺序结构线性列表的函数代码
  4. router-link标签学习
  5. 计算机程序设计 期末考试题,《计算机编程ASP》期终习题A.doc
  6. html5页面被键盘挡住,HTML5 虚拟键盘出现挡住输入框怎么办
  7. async function_理解 Iterator, Generator 和 Async/Await
  8. java程序设计_JAVA基础程序设计之方法
  9. linux系统内核官网,五年26个版本:Linux系统内核全程回顾
  10. qt高亮快捷键_QtCreator中常用快捷键总结