OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9205|回复: 6

DS1302读数据问题

[复制链接]

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2011-11-10
在线时间
0 小时
发表于 2012-2-11 00:44:43 | 显示全部楼层 |阅读模式

以下读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位。
     望高手指点迷津!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-2-11 01:20:54 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2012-2-11
在线时间
0 小时
发表于 2012-2-11 02:44:13 | 显示全部楼层
ACC移位前的内容是什么呢?如果不确定肯定不对。
由于ACC会经常使用,如中断、子程序调用后内容会变化,不建议用ACC,要用必须用独占方式,还是用一变量安全。
回复 支持 反对

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2011-11-10
在线时间
0 小时
 楼主| 发表于 2012-2-11 13:39:40 | 显示全部楼层
嗯,但一般的变量可以进行位赋值吗?如ACC0=DS_IO这样。不确定ACC的值那上面的语句改为这样是否就可以了:

    ACC=0;
    ACC0=DS_IO; 
     zhi=zhi|(ACC<<i);    
     ACC=0;
>
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2012-2-11
在线时间
0 小时
发表于 2012-2-12 07:21:24 | 显示全部楼层
只要处理好我说的问题,ACC也是可以用的,只是如果遇到中断之类,还要进行堆栈处理,这样就没有什么优势了。
位运算在特定情况下有优势,但在通用性来说不是很好,Keil C中处理这种情况就是用“按位或”,即:
var = 0;
var |= 1<<n;

其中n为要赋值的bit。>
回复 支持 反对

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2011-11-10
在线时间
0 小时
 楼主| 发表于 2012-2-13 23:41:46 | 显示全部楼层
嗯,多谢哈。
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2015-11-26
在线时间
19 小时
发表于 2015-11-26 20:32:33 | 显示全部楼层
求大神发一个51单片机控制s1302时钟和ds18b20温度传感器一起的程序,谢谢!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 12:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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