| 
  以下读1302数据程序可正常运行,读出数据。请注意红色部分注解 
uchar read_DS(uchar command) 
   { 
 uint i=0; 
 uchar zhi=0; 
 DS_RST=0;     //此三句也是必须要的。否则又存在初始化归0问题。 
 DS_CLK=0; 
 DS_RST=1; 
 for(i=0;i<8;i++)      //先写地址 
  { 
   
   DS_IO=command&0x01;   //写数据时必须先将数据位置于IO口然后拉时钟。 
                                        //此句与下面两句交换位置也会出错。 
      DS_CLK=0;     
   DS_CLK=1;      //时钟上升沿写数据有效 
   command>>=1;     //从低位写起 
  } 
 for(i=0;i<8;i++)      //再读数据 
  { 
     
   DS_CLK=1;     //时钟下降沿后读数据有效,先读低位。 
 
   DS_CLK=0;      
 
  if(DS_IO) zhi|=0x01<<i;   //0x01<<i;zhi=zhi|0x01;<< 优先级 
   else zhi|=0x00<<i;    //此句可以不要。 
//   ACC0=DS_IO;  
//   zhi=zhi|(ACC<<i);     //很奇怪此三句不能正确读出数据。 
//   ACC=0; 
  } 
 DS_RST=0; 
 zhi=(zhi/16*10)+zhi%16;    //两位BCD码转换为十进制 
 return zhi; 
  } 
------------------------------- 
      但是奇怪的是,标记红色部分语句若换成紫色语句则不能正确读出数据。但是仔细推敲感觉二者的功能相同啊!! 
     注:ACC0为宏定义,即ACC的第0位。 
     望高手指点迷津!!!  |