打印

请大家帮忙看一下ds1302的读程序

[复制链接]
1719|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
东北小辉辉|  楼主 | 2012-10-19 21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IO, TE, ST, RS, AD
void write_ds1302_byte(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
  sclk=0;
  io=dat&0x01;
  dat=dat>>1;
  sclk=1;
}
}
这是写一个字节的程序
uchar read_ds1302(uchar add)
{
uchar dat,i;
rst=0;
sclk=0;
rst=1;
write_ds1302_byte(add);
for(i=0;i<8;i++)
{
  dat=dat>>1;
  sclk=0;
  if(io)
  {
   dat=dat|0x80;
  }
  sclk=1;
}
rst=0;
sclk=1;
io=1;
return dat;
}
这段程序就看不懂了
那个if(io)是什么意思呢?io现在不已经是一个数据了么 肯定是大于1啊 还有,教学视频里面说if那个判断要判断8次,但是dat移位要移位7次是怎么回事呢?希望大家能详细解答一下,跪求啊!
}

相关帖子

沙发
东北小辉辉|  楼主 | 2012-10-19 21:03 | 只看该作者
大家只需要帮我看一下if(io)那个位置和dat移位就可以了,时序什么的不用管,谢谢大家

使用特权

评论回复
板凳
注册H登录| | 2012-10-19 21:12 | 只看该作者
这是外部给管脚送数据

使用特权

评论回复
地板
darlin520| | 2012-10-20 11:56 | 只看该作者
for(i=0;i<8;i++)
{
  dat=dat>>1;              //如果IO不是1,则把dat右移一位,也就相当于读到的是0
  sclk=0;
  if(io)          //如果IO引脚是1,
  {
   dat=dat|0x80;      //向dat的最高位写1,即读到的是1
  }
  sclk=1;                //产生上升沿。
}

使用特权

评论回复
5
东北小辉辉|  楼主 | 2012-10-20 12:18 | 只看该作者
本帖最后由 东北小辉辉 于 2012-10-20 13:13 编辑

换句话说,判断io是按位判断的喽?是从低位开始判断?4# darlin520

使用特权

评论回复
6
darlin520| | 2012-10-20 15:12 | 只看该作者
dat|0x80放在最高位以后通过7次移位不就到最低位了吗

使用特权

评论回复
7
天风立马| | 2012-10-20 23:25 | 只看该作者
你的io定义呢?

使用特权

评论回复
8
小单片机| | 2012-12-7 20:34 | 只看该作者
1302读操作时,时钟信号时下降沿读取,为什么这里是上升沿?
它的读时序电平变化有什么作用??

使用特权

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

本版积分规则

13

主题

91

帖子

0

粉丝