jianhong_wu 发表于 2015-1-22 23:04:44

鸿哥为什么AT2402检测好坏判断2次,而ds1302只判断1次?ds1302的读写地址不一样?已解答.

茂名-陈:
if(ucCheckEeprom!=0x5a)//如果不等于特定内容。则重新写入数据再判断一次
   {
   write_eeprom(254,0x5a);//重新写入标志数据
   ucCheckEeprom=read_eeprom(254); //判断AT24C02是否正常
         if(ucCheckEeprom!=0x5a)//如果还是不等于特定数字,则芯片不正常
         {
            ucEepromError=1;//表示AT24C02芯片出错报警
         }
   }
(1)鸿哥的单片机51程序中的那节AT2402的判断好坏那部分程序,一般不是要判断俩次吗?这1302的判断程序怎么就一次了呢 ?先读取出来,判断对错,再写进去,然后在读取出来,再次判断。
(2)写1302实时时钟的检查是否备用电池用完了的这部分程序,它写和读取都是俩个不同的地址,只有一次判断对错,再把它写进去,然后就没有第二次读取出来,再判断对错了 这是为什么呢?
ucCheckDs1302=Read1302(READ_CHECK); //判断ds1302内部的数据是否被更改
   if(ucCheckDs1302!=0x5a)
   {
          Write1302 (WRITE_PROTECT,0X00);          //禁止写保护
      Write1302 (WRITE_CHECK,0x5a);            //重新写入标志数据,方便下一次更换新电池后的判断
      Write1302 (WRITE_PROTECT,0x80);          //允许写保护

          ucDs1302Error=1;//表示ds1302备用电池没电了,报警提示更换新电池
   }



鸿哥-深圳:
(1)AT24C02为什么判断两次,因为有可能是你第一次烧录程序进去,之前从来没有运行过的程序,那么这个时候AT24C02里面什么都没有的,所以第一次有可能读取的数据不对,但是并不意味着坏,还要再写入再读取一次才能确认。为什么1302只判断一次?因为1302不仅仅是判断好坏的,而包括判断电池有没有正常工作,刚上电的时候判断一次,如果发现数据更改了就说明电池没电了或者其它故障,再判断两次就没必要了。
(2)为什么ds1302它写和读取都是俩个不同的地址?其实是同一个地址的,只是表面上看是不同的数据,是因为这个数据带有特定的协议,虽然表面看地址的数据不同,但是都是指同一个寄存器地址。

页: [1]
查看完整版本: 鸿哥为什么AT2402检测好坏判断2次,而ds1302只判断1次?ds1302的读写地址不一样?已解答.