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

发布者:自由漫步最新更新时间:2020-01-07 来源: eefocus关键字:51基础篇  APROM  模拟EEPROM驱动 手机看文章 扫描二维码
随时随地手机看文章

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 }


关键字:51基础篇  APROM  模拟EEPROM驱动 引用地址:单片机成长之路(51基础篇) - 022 N76e003 APROM模拟EEPROM驱动

上一篇:单片机成长之路(51基础篇) - 023 N76e003 系统时钟切换到外部
下一篇:(51基础篇) - 021 STC89C51系列单片机 内部EEPROM 驱动

推荐阅读最新更新时间:2024-11-12 03:16

单片机 APROM: RAM: Flash:区别
APROM是用户程序存储区,我们写的单片机的程序的代码,就放在这里.APROM是,APROM是Flash中的一部分。 RAM,随机存储器,主要用来存放动态数据,比如我们程序里定义的变量,就是放在这里的,还有程序运算时产生的中间的结果,也是放在这里的。 Flash,总得来说,分为两个部分,一是LDROM,即程序引导区,一个全新的单片机,电脑烧程序的时候,如何与电脑通信的呢?原因单片机在出厂前,就在LDROM里固化了程序,这样,全新的单片机,我们才能下载程序,不然的话,我们只能用专业的编程器去下载。LDROM里的程序用户是读不出来的,也不能修改和删除。 另一部分,就是APROM,LDROM引导电脑,把用户的程序下载到APR
[单片机]
单片机成长之路(51基础篇) - 022 N76e003 APROM模拟EEPROM驱动
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 EEPRO
[单片机]
单片机成长之路(51基础篇) - 007 CH340CH341最全说明
比较全的CH340,CH341应用说明 CH340 以前用USB转串口时图方便一般也都是直接买现成的USB转串口模块,但是后面设计需要,不等不将CH340这个模块集成到电路板中,经过多次失败,终于得到稳定的工作电路了,以下是CH340的说明。 特点 1、全速USB设备接口,兼容USB V2.0,外围元器件只需要晶体和电容。 2、仿真标准串口,用于升级原串口外围设备,或者通过USB增加额外串口。 3、计算机端Windows操作系统下的串口应用程序完全兼容,无需修改 4、硬件全双工串口,内置收发缓冲区,支持通讯波特率50bps~2Mbps。 5、支持常用的MODEM联络信号RTS、DTR、DCD、RI、DSR、CTS。 6、
[单片机]
单片机成长之路(<font color='red'>51</font><font color='red'>基础篇</font>) - 007 CH340CH341最全说明
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved