STC单片机内置EEPROM读取与保存 函数调用 .c和.h文件

发布者:数字奇迹最新更新时间:2020-02-16 来源: 51hei关键字:STC单片机  内置EEPROM  读取与保存  函数调用 手机看文章 扫描二维码
随时随地手机看文章

请教如何调用文件  掉电不丢失


1、读取3参数个数  改动后 保存到 EEPROM

我的用法是 :


unsigned int  Temp_Buf[3];                           //定义缓存:

Read_Flash_Message(ks_Addr,Temp_Buf, 3);//读取:函数是:void Read_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int *Len);


Save_Flash_Message(ks_Addr,Temp_Buf, 3);//保存    函数是 :void Save_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int Len);


现在是  无法保存  调取的也不对


//以下为.h文件

//使用单片机内部的Flash,模拟EEPROM使用

//STC15W4K48S4 单片机,可以使用IAP命令擦写内部Flash

//起始地址 0X0000 结束 0X27FF  其中,512Byte一个扇区

//一共20个扇区  一个扇区可以存储一组参数,这样就可以直接擦出整个扇区修改内容


#ifndef        __IAP_EEPROM__H_

#define        __IAP_EEPROM__H_

#include "STC15W.h"

#include "intrins.h"



#define        ks_Addr                                0X0000

#define        tz_Addr                                0X0200

#define        tm_Addr                                0X0400




//保存内容到Flash

void Save_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int Len);

//从Flash读取内容

void Read_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int *Len);

//读取某地址一个字节

unsigned char Read_One_Byte(unsigned int addr);

void Erase_IAP(unsigned int addr);

void Write_One_Byte(unsigned int addr,unsigned char dat);


#endif


以下为.c文件


#include "IAP_EEPROM.h"

//#include //用来CLI交互

//STC15W4K48S4 单片机,可以使用IAP命令擦写内部Flash

//起始地址 0X0000 结束 0X27FF  其中,512Byte一个扇区


//关闭IAP功能

void Close_IAP(void)

{

        IAP_CONTR = 0;

        IAP_CMD = 0;

        IAP_TRIG = 0;

        IAP_ADDRH = 0;

        IAP_ADDRL = 0;

}

//擦除某地址所在的扇区

void Erase_IAP(unsigned int addr)

{

                IAP_CONTR = 0x82;//允许IAP操作,设置IAP操作速度         

    IAP_CMD = 0x03;//扇区擦除命令            

    IAP_ADDRL = addr;              

    IAP_ADDRH = addr >> 8;//地址赋值          

    IAP_TRIG = 0x5a;                

    IAP_TRIG = 0xa5;//触发命令               

    _nop_();_nop_();_nop_();            

    Close_IAP();//清空IAP操作寄存器

}

//在某地址写入一个字节

void Write_One_Byte(unsigned int addr,unsigned char dat)

{

                IAP_CONTR = 0x82;//允许IAP操作,设置IAP操作速度   

    IAP_CMD = 0x02;//IAP写命令

    IAP_ADDRL = addr;

    IAP_ADDRH = addr >> 8;//地址赋值

    IAP_DATA = dat;//更新写寄存器

    IAP_TRIG = 0x5a;

    IAP_TRIG = 0xa5;//触发

    _nop_();

    Close_IAP();//清空IAP操作寄存器等

}

//读取某地址一个字节

unsigned char Read_One_Byte(unsigned int addr)

{

                unsigned char dat=0;//定义一个待返回的数据

    IAP_CONTR = 0x82;//允许IAP

    IAP_CMD = 0x01;//IAP读命令

    IAP_ADDRL = addr;

    IAP_ADDRH = addr >> 8;//地址赋值

    IAP_TRIG = 0x5a;

    IAP_TRIG = 0xa5;//触发

    _nop_();_nop_();_nop_();_nop_();

    dat = IAP_DATA;

                Close_IAP();//清空IAP操作寄存器等

    return dat;

}

//保存内容到Flash

void Save_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int Len)

{

        unsigned int i=0;

        Erase_IAP(Addr);//擦除对应扇区

        

        if(Len >= 511)

                Len = 511;

        

        Write_One_Byte(Addr,Len>>8);//长度写入首地址

        Write_One_Byte(Addr+1,(Len&0X00FF));//长度写入首地址

        for(i=0;i        {

                Write_One_Byte((Addr+2+i),Buf[i]);

        }

}

//从Flash读取内容

void Read_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int *Len)

{

        unsigned int i=0;

        *Len = Read_One_Byte(Addr); //首先读取长度信息

        *Len <<= 8;

        *Len += Read_One_Byte(Addr+1);

        

        if(*Len >= 511)

                *Len = 511;

        

        for(i=0;i<*Len;i++)

        {

                Buf[i] = Read_One_Byte(Addr+2+i);

        }

}

//

关键字:STC单片机  内置EEPROM  读取与保存  函数调用 引用地址:STC单片机内置EEPROM读取与保存 函数调用 .c和.h文件

上一篇:单片机指纹识别程序
下一篇:单片机驱动EC11编码器

推荐阅读最新更新时间:2024-11-08 18:25

STC单片机IO管脚毁坏动态自检程序
#i nclude REGX52.h #i nclude stdio.h #i nclude absacc.h #i nclude intrins.h #i nclude string.h #pragma NOAREGS //STC ISP_V2.0 PCB的晶振为18.432MHz #define WdtTime_71_1mS 0x30 //71.1mS #define WdtTime_141_2mS 0x31 //141.2mS #define WdtTime_284_4mS 0x32 //284.4mS #define WdtTime_568_8mS 0x33 //568.8mS #define Wdt
[单片机]
STC单片机PCA产生PWM程序
stc12 15单片机的pca模块产生pwm的完整例程,测试成功。完整代码下载: http://www.51hei.com/f/stcpcaPWM.zip #include reg51.h #include "PCA.h" void PWM(unsigned int num,int cex); void main() { CMOD=0x02; CL=0x00; CH=0x00; PWM(10,0); PWM(20,1); PWM(50,2); PWM(70,3); PWM(90,4); CR=1; while(1); } void PWM(unsigned int num,int cex) { double i=256*(1
[单片机]
利用全局及外部变量实现C51无能数化调用A51函数
电子技术应用 2001年第7期发表苟帅的文章“ASM51无参数化调用C51函数的实现”,阐述了ASM51无参数化调用C51 函数的实现原理并给出实例来验证该方法的优越性和可行性。作者在文章中表明这样一种观点:“利用汇编语言对I/O接口、中断向量及程序空间分配的巨大优势,让程序员对MCS51内的每一字节甚至是每一比特(可位寻址空间)全部进行统筹安排,设计好各个程序模块,包括I/O口地址和中断向量地址的处理;同时在具体数据处理、通信等不需要过多与硬件打交道的程序模块中,充分利用C51语言强大高效的编程能力”。上述观点并没有错,但是对I/O接口、中断向量及程序空间分配及MCS-51内的每一个字节甚至是每一比特(可位寻址空间)全部进行统
[单片机]
STC单片机片内EEPROM的读写
宏晶STC很多系列的单片机片内都集成了EEPROM存储器(其实是Data Flash),方便用户使用,想得真周到!今天写了个小程序,测试了一下,工作正常。下面就上我自己写的源程序。本人在STC89C52RC单片机上试验成功。 首先是stcEEPROM.h头文件内容: /* When Who Remarks ---------------------------------- 2011-Oct-06 黄长浩 初始版本 */ #ifndef __STCEEPROM_H__ #define __STCEEPROM_H__ #define STC_EEPROM_START_ADDR 0x2000 //STC89C
[单片机]
STC单片机免断电下载程序的另一种更简单的方法
看到网上有一些STC单片机免断电下载程序的例子。但是都是要用串口中断来完成。以下是一个程序片断 拿来说明 在调试程序中加入串口初始化代码,串口中断代码即可实现不断电下载程序 TMOD|=0x20; SCON=0x50; TH1=0xfd; //12T时钟9600bps TL1=0xfd; TR1=1; ES=1; EA=1; AUXR=AUXR|0x40; //定时器1使用1T时钟 9600*12=115200bps void uart(void) interrupt 4 { uchar cdd; if(RI) { RI=0; cdd=SBUF; if(cdd==0xaa
[单片机]
AVR 中 delay 函数调用注意事项!delay_ns delay_ms
早就知道AVR的编译器有自带的延时子函数(或者说是头文件),但一直没时间一探究竟,今天终于揭开了其内幕。 AVR编译器众多,可谓是百家齐鸣,本人独尊WinAVR. 说明:编译器版本WinAVR-20080610 先说winAVR的_Delay.h_肯定是在Include文件夹下了,进去一看果然有,可打开一看,其曰: This file has been moved to util/delay.h . 在util文件夹中找到delay头文件如下: -----------------------------------------------------------------------------------------
[单片机]
程序中关于变量的引用,和函数调用
程序中关于变量的引用,和函数的调用 cseg segment assume cs:cseg,ds:cseg org 100 start: mov bx,word ptr aaa virus_start: call get_start mov ah,4ch int 21h get_start: mov ax,offset virus_start ret aaa db ''abcd'',0 cseg ends end start 上面的程序进行反汇编之后。 -u 13E7:0064 8B1E7300 MOV BX, 13E7:0068 E80400 CALL 0
[单片机]
STC单片机扩展P4口的应用
对于PQFP-44和PLCC-44封装的STC89系列单片机增加了4个I/O口P4口,P4口在特殊功能寄存器中的地址为E8H,可以进行位寻址,用户在使用P4口之前需要先定义地址,然后就像操作其它I/O口一样操作P4口了。 另外,P4口的P4.2和P4.3新增加了两个外部中断作为它们的第二功能,使用这两个外部中断时和使用P3.2和P3.3外部中断方法相同,P4.2(INT2)的中断向量入口地址为33H,中断序号为6,P4.3(INT3)的中断向量地址为3BH,中断序号为7,P4口的外部中断由另一个新增加的扩展中断控制寄存器来设置,请看下一个知识点。 知识点:扩展中断控制寄存器(XICON) STC89系列单片机扩展中断
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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