![]() |
已解决,谢谢大家 |
STC庄伟 发表于 2024-9-2 10:13 你说用比较器做掉电检测,其他用法都是错的?? 那么,STC的“掉电中断”是干什么吃的? 样子货? |
qq378912453 发表于 2024-9-2 22:07 update_admin_passwd和update_admin_passwd1在哪里运行? |
本帖最后由 newlined 于 2024-9-3 09:12 编辑 前边楼层已经想到了,编辑掉了,请版主删掉此贴,谢谢。 |
wpppmlah 发表于 2024-9-2 08:40 这个main 初始化已经初始化了 ,就是根据官方改的,目前可以写可以读,就是断电不会保存 |
#include "config.h" /************* 功能说明 ************** 选择时钟 11.0592MHz (可以在配置文件"config.h"中修改). ******************************************/ /**********************************************/ int main(void) { P_SW2 |= 0x80; // 允许访问扩展寄存器xsfr IRCDB = 0x10; // IRCDB设置减小,增加内部高速振荡器去抖 IAP_TPS = 11; //设置EEPROM操作等待参数(11.0592MHz),初始化设置一次即可 EA = 1; // 允许全局中断 INT0_Init(); Timer0_Init(); GPIO_config(); PrintfInit(); // 串口波特率 ADC_config(); Touch_Init(); /**********************************************/ open_flag = 1; // 默认开的状态 close_flag = 0; /**********************************************/ mode_yongjiu = 1; //永久模式(固定模式) mode_linshi = 0; /**********************************************/ while (1) { // key(); /**********************************************/ Touch_Scan(); /**********************************************/ Show_Vol(); // 显示电池的电压 /**********************************************/ handle_key_function(); // 状态机切换 /**********************************************/ } } |
STC的EEPROM的读写擦除方法: 字节读:部分系列可使用unsigned char/int/long code指针或汇编MOVC访问(STC89/90系列除外)。 字节编程:二进制1可以写为0,0不能写为1,必须擦除后才可以继续写。 扇区擦除:没有字节擦除,1次擦1扇区为512字节,擦除后全部恢复为0xFF。 |
1、你没有给出STC8H具体的单片机型号,所以一定注意,有些单片机是出厂自带EEPROM,有些没有EEPROM,而只有再手动分割FLASH出来作为EEPROM使用。手上正好有艾克姆科技的STC8H8K64U的开发板,把相关资料分享给你。
![]() 2、STC8H8K64U是没有片内EEPROM的,所以需要在STC-ISP下载软件时分好EEPROM空间。如果芯片自带片内EEPROM,则无需分割,比如STC8H8K48U。 ![]() 3、程序源码见附件,下载程序后,打开串口助手可观察对片内EEPROM的读写操作。 ![]() |
34.05 KB, 下载次数: 1
![]() |
平常不要操作 STC32G/STC8H的EEPROM: 1,上电时读到 SRAM 中; 2,平常在SRAM中改写; 3,掉电时及时保存到 EEPROM/DATA-FLASH中! 用内部比较器做外部掉电检测!!! 其他用法都是错误的用法 ![]() |
代码不全,main()呢? |
单字节,指定地址读写,进行实验,如果没问题,就是你的连续读写代码有问题,另外注意连续读写跨扇区问题,STC是扇区擦除,写之前需要对当前扇区先进行擦除操作,才能写.严格按照官方的代码进行操作,一般不会出问题,另外设置等待参数为什么要注释掉呢: //IAP_TPS = 12; |