找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2759|回复: 1
打印 上一主题 下一主题
收起左侧

求助 DS1302读出来的数据乱码

[复制链接]
跳转到指定楼层
楼主
ID:81283 发表于 2015-9-1 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*---------------------------------------------
/* DS1302 Read Byte
/*-------------------------------------------*/
uint8 ReadByte()
{
uint8 i,tmp = 0x00;

for(i = 0; i < 8 ; i ++)
  {  
   
    if(io) tmp|=0x80;
    sclk = 1 ;
    tmp >>= 1;
   sclk = 0;
  }
  return tmp;
  
}
/*---------------------------------------------
  DS1302 WriteByte()
--------------------------------------------*/
void WriteByte(uint8 dat)
{
uint8 i;

   for(i = 0; i < 8 ; i ++)
   {
   io = (bit)(dat & 0x01);
    dat >>= 1;
    sclk = 1;
   sclk = 0;
   }
   
}
/*---------------------------------------------
/* DS1302 SingleRead
/*-------------------------------------------*/
uint8 SingleRead(uint8 addr)
{
   uint8 tmp;

  cs = 1;
   _nop_();
   WriteByte(addr);
   tmp = ReadByte();
   cs = 0;
return tmp;
}
/*----------------------------------------------
/* DS1302 SingleWrite
/---------------------------------------------*/
void SingleWrite(uint8 addr,uint8 dat)
{
  cs = 1;
   WriteByte(addr);
   WriteByte(dat);
   cs = 0;
}

SingleRead函数写入的的地址没问题,读出的数据是错的。
请高手帮忙看一下,哪里错了?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:105653 发表于 2016-2-17 14:27 来自手机 | 只看该作者
同学,你的ReadByte()函数有问题,循环8次,所以右移8次,出问题。比如数据1000  0000,然后读取最高位时候tem=1000 0000,然后右移一位了,此时变成了0100  0000 了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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