找回密码
 立即注册
查看: 1679|回复: 4

为什么eeprom断电保存功能存一个字节的0x08就行,再大如0x09断电以后就记不住了

[复制链接]

4

主题

4

回帖

54

积分

注册会员

积分
54
发表于 2024-5-20 09:44:07 | 显示全部楼层 |阅读模式
以下是eeprom配置
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCAI.com ---------------------------------------------*/
/* --- BBS: www.STCAIMCU.com  -----------------------------------------*/
/* --- QQ:  800003751 -------------------------------------------------*/
/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò            */
/*---------------------------------------------------------------------*/

#include "STC8G_H_EEPROM.h"
#define eepRomAdd_mainAddr 0x06 ¶¨Òåeeprom´¢´æµØÖ·
//========================================================================
// º¯Êý: void        ISP_Disable(void)
// ÃèÊö: ½ûÖ¹·ÃÎÊISP/IAP.
// ²ÎÊý: non.
// ·µ»Ø: non.
// °æ±¾: V1.0, 2012-10-22
//========================================================================

void        DisableEEPROM(void)
{
        IAP_CONTR = 0;                        //½ûÖ¹IAP²Ù×÷
        IAP_CMD   = 0;                        //È¥³ýIAPÃüÁî
        IAP_TRIG  = 0;                        //·ÀÖ¹IAPÃüÁîÎó´¥·¢
        IAP_ADDRH = 0xff;                //Çå0µØÖ·¸ß×Ö½Ú
        IAP_ADDRL = 0xff;                //Çå0µØÖ·µÍ×Ö½Ú£¬Ö¸Ïò·ÇEEPROMÇø£¬·ÀÖ¹Îó²Ù×÷
}

//========================================================================
// º¯Êý: void EEPROM_Trig(void)
// ÃèÊö: ´¥·¢EEPROM²Ù×÷.
// ²ÎÊý: none.
// ·µ»Ø: none.
// °æ±¾: V1.0, 2014-6-30
//========================================================================
void EEPROM_Trig(void)
{
        F0 = EA;    //±£´æÈ«¾ÖÖжÏ
        EA = 0;     //½ûÖ¹ÖжÏ, ±ÜÃâ´¥·¢ÃüÁîÎÞЧ
        IAP_TRIG = 0x5A;
        IAP_TRIG = 0xA5;                    //ÏÈËÍ5AH£¬ÔÙËÍA5Hµ½IAP´¥·¢¼Ä´æÆ÷£¬Ã¿´Î¶¼ÐèÒªÈç´Ë
                                                                                                                                                        //ËÍÍêA5Hºó£¬IAPÃüÁîÁ¢¼´±»´¥·¢Æô¶¯
                                                                                                                                                        //CPUµÈ´ýIAPÍê³Éºó£¬²Å»á¼ÌÐøÖ´ÐгÌÐò¡£
        _nop_();
        _nop_();
        EA = F0;    //»Ö¸´È«¾ÖÖжÏ
}

//========================================================================
// º¯Êý: void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number)
// ÃèÊö: ´ÓÖ¸¶¨EEPROMÊ×µØÖ·¶Á³ön¸ö×Ö½Ú·ÅÖ¸¶¨µÄ»º³å.
// ²ÎÊý: EE_address:  ¶Á³öEEPROMµÄÊ×µØÖ·.
//       DataAddress: ¶Á³öÊý¾Ý·Å»º³åµÄÊ×µØÖ·.
//       number:      ¶Á³öµÄ×Ö½Ú³¤¶È.
// ·µ»Ø: non.
// °æ±¾: V1.0, 2012-10-22
//========================================================================
void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number)
{
        IAP_ENABLE();                           //ÉèÖõȴýʱ¼ä£¬ÔÊÐíIAP²Ù×÷£¬ËÍÒ»´Î¾Í¹»
        IAP_READ();                             //ËÍ×Ö½Ú¶ÁÃüÁÃüÁî²»Ðè¸Ä±äʱ£¬²»ÐèÖØÐÂËÍÃüÁî
        do
        {
                IAP_ADDRH = EE_address / 256;       //Ë͵ØÖ·¸ß×Ö½Ú£¨µØÖ·ÐèÒª¸Ä±äʱ²ÅÐèÖØÐÂË͵ØÖ·£©
                IAP_ADDRL = EE_address % 256;       //Ë͵ØÖ·µÍ×Ö½Ú
                EEPROM_Trig();                      //´¥·¢EEPROM²Ù×÷
                *DataAddress = IAP_DATA;            //¶Á³öµÄÊý¾ÝËÍÍù
                EE_address++;
                DataAddress++;
        }while(--number);

        DisableEEPROM();
}

//========================================================================
// º¯Êý: void EEPROM_SectorErase(u16 EE_address)
// ÃèÊö: °ÑÖ¸¶¨µØÖ·µÄEEPROMÉÈÇø²Á³ý.
// ²ÎÊý: EE_address:  Òª²Á³ýµÄÉÈÇøEEPROMµÄµØÖ·.
// ·µ»Ø: non.
// °æ±¾: V1.0, 2013-5-10
//========================================================================
void EEPROM_SectorErase(u16 EE_address)
{
        IAP_ENABLE();                       //ÉèÖõȴýʱ¼ä£¬ÔÊÐíIAP²Ù×÷£¬ËÍÒ»´Î¾Í¹»
        IAP_ERASE();                        //ºêµ÷ÓÃ, ËÍÉÈÇø²Á³ýÃüÁÃüÁî²»Ðè¸Ä±äʱ£¬²»ÐèÖØÐÂËÍÃüÁî
                                                                                                                                                        //Ö»ÓÐÉÈÇø²Á³ý£¬Ã»ÓÐ×Ö½Ú²Á³ý£¬512×Ö½Ú/ÉÈÇø¡£
                                                                                                                                                        //ÉÈÇøÖÐÈÎÒâÒ»¸ö×Ö½ÚµØÖ·¶¼ÊÇÉÈÇøµØÖ·¡£
        IAP_ADDRH = EE_address / 256;       //ËÍÉÈÇøµØÖ·¸ß×Ö½Ú£¨µØÖ·ÐèÒª¸Ä±äʱ²ÅÐèÖØÐÂË͵ØÖ·£©
        IAP_ADDRL = EE_address % 256;       //ËÍÉÈÇøµØÖ·µÍ×Ö½Ú
        EEPROM_Trig();                      //´¥·¢EEPROM²Ù×÷
        DisableEEPROM();                    //½ûÖ¹EEPROM²Ù×÷
}

//========================================================================
// º¯Êý: void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number)
// ÃèÊö: °Ñ»º³åµÄn¸ö×Ö½ÚдÈëÖ¸¶¨Ê×µØÖ·µÄEEPROM.
// ²ÎÊý: EE_address:  Ð´ÈëEEPROMµÄÊ×µØÖ·.
//       DataAddress: дÈëÔ´Êý¾ÝµÄ»º³åµÄÊ×µØÖ·.
//       number:      Ð´ÈëµÄ×Ö½Ú³¤¶È.
// ·µ»Ø: non.
// °æ±¾: V1.0, 2012-10-22
//========================================================================
void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number)//дÈëÊý¾Ý
{
        IAP_ENABLE();                       //ÉèÖõȴýʱ¼ä£¬ÔÊÐíIAP²Ù×÷£¬ËÍÒ»´Î¾Í¹»
        IAP_WRITE();                        //ºêµ÷ÓÃ, ËÍ×Ö½ÚдÃüÁî
        do
        {
                IAP_ADDRH = EE_address / 256;     //Ë͵ØÖ·¸ß×Ö½Ú£¨µØÖ·ÐèÒª¸Ä±äʱ²ÅÐèÖØÐÂË͵ØÖ·£©
                IAP_ADDRL = EE_address % 256;     //Ë͵ØÖ·µÍ×Ö½Ú
                IAP_DATA  = *DataAddress;         //ËÍÊý¾Ýµ½IAP_DATA£¬Ö»ÓÐÊý¾Ý¸Ä±äʱ²ÅÐèÖØÐÂËÍ
                EEPROM_Trig();                    //´¥·¢EEPROM²Ù×÷
                EE_address++;                     //ÏÂÒ»¸öµØÖ·
                DataAddress++;                    //ÏÂÒ»¸öÊý¾Ý
        }while(--number);                   //Ö±µ½½áÊø
        DisableEEPROM();
}




回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-04 00:16:27
已绑定手机

19

主题

3191

回帖

4930

积分

论坛元老

积分
4930
发表于 2024-5-20 10:33:20 来自手机 | 显示全部楼层
注释都是乱码,格式没调好?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6845

积分

论坛元老

积分
6845
发表于 2024-5-20 10:41:29 | 显示全部楼层
用附件例子烧录到芯片里试试,通过串口打印EEPROM读写结果。
每个地址写入内容从0x00~-0xFF都可以,同一个地址重复写入之前要先擦除。

STC8-EEPROM基本操作-P32按键通过串口1输出.zip

9.15 KB, 下载次数: 38

回复 支持 反对

使用道具 举报 送花

4

主题

4

回帖

54

积分

注册会员

积分
54
发表于 2024-5-20 12:22:17 | 显示全部楼层
乘风*** 发表于 2024-5-20 10:41
用附件例子烧录到芯片里试试,通过串口打印EEPROM读写结果。
每个地址写入内容从0x00~-0xFF都可以,同一个 ...

感谢,就是忘记擦除了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2025-04-30 08:59:38

1

主题

81

回帖

1073

积分

金牌会员

积分
1073
发表于 2024-5-22 07:56:35 | 显示全部楼层
乱码注释,看着眼晕
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 10:32 , Processed in 0.118712 second(s), 77 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表