3729|1

79

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

那位高人指点EEPROM程序 [复制链接]

我做好了一个数码显示的程序,数码管显示从1走到999.但是有的时候断电后就自动又从零开始走,我现在想让它断电把数据记下来我已经做好了一个断电检测电路我已经写了一点断电的程序,但是就是实现不了断电之前的数据记下来,每次还是断电后就从0开始记。我用的是STC11F02E单片机。它只有四个扇区。程序在下面,有谁知道我的错在那吗?请大家指点。谢谢!
#include "reg52.h"
#include "Flash\Flash.h"
#define uint unsigned int
#define uchar unsigned char
unsigned char  m_Addge,m_Addshi,m_Addbai;//写入或者读出EEPROM的变量,只要把要写入的数据写入m_Add,然后调用 SaveToFlash()函数就可以保存.
data unsigned int flashAdd;//写入或者读出EEPROM的地址
bit SaveToFlash();//保存m_Add到地址flashAdd
bit ReadFromFlash();//从地址flashAdd读取数据到m_Add
uint n,m,temp;
sbit DAT=P1^3;
sbit CLK=P1^7;
sbit b=P1^4;
sbit a=P1^5;
sbit com3=P1^2;
sbit com2=P3^3;
sbit com1=P3^4;
uchar tab[]={0x01,0x4f,0x12,0x06,0x4c,0x24,0x20,0x0f,0x00,0x04,0x7f};//0-9,-,全灭
void sendbyte(uchar byte)
{   
    uchar num,c;
    num=tab[byte];
    for(c=0;c<8;c++)
    {
     CLK=0;
     DAT=num&0x01;
     CLK=1;
     num>>=1;
    }
}
/*******延时函数*********/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

/*************显示个十百函数************/
void display(uchar m_Addge,uchar m_Addshi,uchar m_Addbai)
{
com1=0;
com2=0;
com3=0;   
sendbyte(m_Addbai);
com1=1;
com2=0;
com3=0;
delay(1);

com1=0;
com2=0;
com3=0;
sendbyte(m_Addshi);
com1=0;
com2=1;
com3=0;
delay(1);
com1=0;
com2=0;
com3=0;
sendbyte(m_Addge);
com1=0;
com2=0;
com3=1;
delay(1);
}
/*********主函数************/
main ()
{
    com1=0;
    com2=0;
    com3=0;
    //m_Addbai=0;
//m_Addshi=0;
//m_Addge=0;
    ReadFromFlash();//从地址flashAdd读取数据到m_Add
    TMOD=0X01;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    ET0=1;
    TR0=1;
    EA=1;

    while(1)
{
        if(n==4)
  {   a=~a;
      n=0;
      m++;
      if(m==2)
      {
       m=0;
             temp++;
             if(temp==999)
    {temp=0;}
       m_Addbai=temp/100;
    m_Addshi=temp%100/10;
    m_Addge=temp%10;
      
   }
   }
      
         display(m_Addbai,m_Addshi,m_Addge);
   

}
}
/*******中断函数*********/
void timer0() interrupt 1
{
    TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n++;
    if(b==0)
    {SaveToFlash();}
  if(b==1)
  ReadFromFlash();

}
bit SaveToFlash()//保存至永久存贮
{
//flashAdd=0x8000;//stc89054
flashAdd=0x600;//stc11F02
if(!sector_erase(flashAdd))//擦除扇区0
{
   return 0;
}
delay0(1000);
//保存标识
//byte_program(flashAdd,m_Add);
//flashAdd++;
if(!byte_program_and_verify(flashAdd,88))return 0;
flashAdd++;
//保存本板地址
if(!byte_program_and_verify(flashAdd,m_Addge))return 0;
flashAdd++;
if(!byte_program_and_verify(flashAdd,m_Addshi))return 0;
flashAdd++;
if(!byte_program_and_verify(flashAdd,m_Addbai))return 0;
flashAdd++;
//保存接口形式
}
/***************************************
函数:ReadFromFlash()
功能:从地址flashAdd读取数据到m_Add
注: flashAdd不用修改.
***************************************/
bit ReadFromFlash()//从永久存贮中读取
{
//flashAdd=0x8000;//stc89054
flashAdd=0x600;//stc12C2052
//读取标识
if(byte_read(flashAdd)!=88)return 0;
flashAdd++;
//读本板地址
m_Addge=byte_read(flashAdd);
flashAdd++;
m_Addshi=byte_read(flashAdd);
flashAdd++;
m_Addbai=byte_read(flashAdd);
flashAdd++;
//读取接口形式
此帖出自单片机论坛
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
:L 怎么没人说说呢?
此帖出自单片机论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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