打印

用P89V51RD+读取24C02的疑惑!

[复制链接]
1905|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xialvfire|  楼主 | 2010-9-13 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在做了个24c02的读写程序,目前遇到了一个问题:
我的24c02已经有8个数据了,目前程序就是读出这8个数据。
但是在开机上电后,读出数据显示为8个00,再按一下复位按钮
显示的8个数据就正常了,有意思的是我再按复位按钮,显示的
数据比正常数据加了7(比如正常数据是01,显示就是08),再
复位一次再加7,不知道是什么原因。

为什么会上电读数据为全00,复位一次显示正确,复位2次又出错??
这个程序问题应该出在什么地方?是我的数据传递有问题吗?

下面是我的程序:
void main(void)
    {
     CY=0;
     fg_SYS.data_one=1; //个位开始显示
     fg_SYS.data_ten=0;
     fg_SYS.data_hdrd=0;
     fg_SYS.data_thsd=0;
     Delay_1s();
//   init_all_reg2();
//   write_EEPROM_DATA();//写24c02,这个应该没有问题
     EEPROM_DATA_num=0;
     write_ACK();
     stop_EEPROM();
     read_EEPROM_DATA();
     Delay_1s();
     TMOD = 0x11;
     TMOD|=1;
     TH0=0xec;//timer0初值
     TL0=0x78;
     ET0=1;
     TR0=1;
     EA=1;
     EEPROM_DATA_num=0;
     INTT0_TIMES_1sec=400;
  while(1)
   {
  if(fg_SYS.time_1s==1)    //一秒更新一个数据用于显示
   {
    DATA_one=EEPROM_DATA_buf1[EEPROM_DATA_num]&0x0f;//显示数据低位段码
    DATA_ten=(EEPROM_DATA_buf1[EEPROM_DATA_num]>>4)&0x0f;//显示数据高位段码
   EEPROM_DATA_num=EEPROM_DATA_num++;
   if(EEPROM_DATA_num>7)      //循环显示
    {
     EEPROM_DATA_num=0;
    }
   fg_SYS.time_1s=0;
   }
  if(fg_SYS.time_10ms==1)//10毫秒扫描4位数码管
    {
  if(fg_SYS.data_one)        //显示数据低4位
    {
     DISPLAY_SEGA_data=DATA_one;;//显示数据低位段码
     NUM_1X=0;
     NUM_10X=1;
     NUM_100X=1;
     NUM_1000X=1;
     display();
     fg_SYS.data_one=0;
     fg_SYS.data_ten=1;
    }else{
        if(fg_SYS.data_ten);//显示数据高4位
             {
              NUM_1X=1;
              NUM_10X=0;
              NUM_100X=1;
              NUM_1000X=1;
              DISPLAY_SEGA_data=DATA_ten;;//显示数据高位段码
              display();
              fg_SYS.data_ten=0;
              fg_SYS.data_hdrd=1;
             }else{
/*           if(fg_SYS.data_hdrd);//后两位显示暂时不用
                     {
                      NUM_1X=1;
                      NUM_10X=1;
                      NUM_100X=0;
                      NUM_1000X=1;
                      DISPLAY_SEGA_data=DATA_hundred;
                      display();
                     fg_SYS.data_hdrd=0;
                     fg_SYS.data_thsd=1;
                     }else{
                              if(fg_SYS.data_thsd)
                             {
                              NUM_1X=1;
                              NUM_10X=1;
                              NUM_100X=1;
                              NUM_1000X=0;
                              DISPLAY_SEGA_data=DATA_thousand;
                              display();
                              fg_SYS.data_thsd=0;
                              fg_SYS.data_one=1;
                             }
                        }
                  }*/
         }
    fg_SYS.time_10ms=0;
    }
  }
}

//显示程序
void display()
{
  switch(DISPLAY_SEGA_data)
    {
      case 0: P0=0xc0; break;//显示0  //共阳
   case 1: P0=0xf9; break;//显示1
   case 2: P0=0xa4; break;//显示2
   case 3: P0=0xb0; break;//显示3
   case 4: P0=0x99; break;//显示4
   case 5: P0=0x92; break;//显示5
   case 6: P0=0x82; break;//显示6
   case 7: P0=0xf8; break;//显示7
   case 8: P0=0x80; break;//显示8
   case 9: P0=0x90; break;//显示9
   case 10: P0=0x88; break;//显示A
   case 11: P0=0x83; break;//显示b
   case 12: P0=0xc6; break;//显示c
   case 13: P0=0xa1; break;//显示d
   case 14: P0=0x86; break;//显示E
   case 15: P0=0x8e; break;//显示F
   default: P0=0x8c;//显示错误 P
    }
}

相关帖子

沙发
ayb_ice| | 2010-9-13 15:48 | 只看该作者
这样程序网大把的,下一个吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

粉丝