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

[复制链接]
 楼主| 东北小辉辉 发表于 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;                //产生上升沿。
}
 楼主| 东北小辉辉 发表于 2012-10-20 12:18 | 显示全部楼层
本帖最后由 东北小辉辉 于 2012-10-20 13:13 编辑

换句话说,判断io是按位判断的喽?是从低位开始判断?4# darlin520
darlin520 发表于 2012-10-20 15:12 | 显示全部楼层
dat|0x80放在最高位以后通过7次移位不就到最低位了吗
天风立马 发表于 2012-10-20 23:25 | 显示全部楼层
你的io定义呢?
小单片机 发表于 2012-12-7 20:34 | 显示全部楼层
1302读操作时,时钟信号时下降沿读取,为什么这里是上升沿?
它的读时序电平变化有什么作用??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

91

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

13

主题

91

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部