社区导航

 

搜索
查看: 2876|回复: 1

[讨论] 那位高人指点EEPROM程序

[复制链接]

105

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2009-12-8 10:28 | 显示全部楼层 |阅读模式
我做好了一个数码显示的程序,数码管显示从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++;
//读取接口形式
此帖出自单片机论坛

105

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2009-12-8 12:42 | 显示全部楼层
:L 怎么没人说说呢?

回复

使用道具 举报

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

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-1-21 22:24 , Processed in 0.099060 second(s), 17 queries , Gzip On, MemCache On.

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