为什么eeprom断电保存功能存一个字节的0x08就行,再大如0x09断电以后就记不住了
以下是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();
}
注释都是乱码,格式没调好? 用附件例子烧录到芯片里试试,通过串口打印EEPROM读写结果。
每个地址写入内容从0x00~-0xFF都可以,同一个地址重复写入之前要先擦除。 乘风飞扬 发表于 2024-5-20 10:41
用附件例子烧录到芯片里试试,通过串口打印EEPROM读写结果。
每个地址写入内容从0x00~-0xFF都可以,同一个 ...
感谢,就是忘记擦除了 乱码注释,看着眼晕
页:
[1]