单片机/MCUwilliam hill官网
直播中

12年用户 30经验值
擅长:操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件 操作系统/软件 基础元器件
私信 关注
[问答]

DS1302时钟芯片不能读取数据

本帖最后由 hegspring 于 2013-2-25 11:04 编辑

用Keil单步运行程序时,往DS1302里写数据正常,但是读数据时IO口一直保持高电平不变,主要代码如下:



求助!!!  在线等……QQ:137223811



#include "reg51.h"
#include "intrins.h"

***it rst=P2^5;
***it sck=P2^6;
***it io=P2^7;
***it acc7=ACC^7;

typedef unsigned char   uchar;
typedef unsigned int    uint;

void write_ds1302_byte(uchar dat)
{
        uchar i;        
        for(i=8;i>0;i--)
        {
                sck=0;               
                io=dat&0x01;
                dat=dat>>1;
                sck=1;
        }
}
/*写多字节到DS1302*/
void write_ds1302(uchar add,uchar dat)
{
        rst=0;
        _nop_();
        sck=0;_nop_();
        rst=1;_nop_();
        write_ds1302_byte(add);
        write_ds1302_byte(dat);
        rst=0;_nop_();
        io=1;
        sck=1;
        
}
/*读DS1302的1Byte*/
uchar read_ds1302(uchar add)
{
        uchar i;
        rst=0;
        _nop_();
        sck=0;
        _nop_();
        rst=1;
        _nop_();
        write_ds1302_byte(add);
        
        for(i=0;i<8;i++)
        {
                                
                sck=1;
                sck=0;
               
               
               
                acc7=io;
                ACC>>=1;
        }
        rst=0;
        _nop_();
        sck=0;
        _nop_();
        sck=1;
        io=1;
        ACC=(ACC/16*10)+ACC%16;
        return ACC;
}

回帖(2)

2013-2-25 14:15:47
引用: yatoo 发表于 2013-2-25 10:45
https://bbs.elecfans.com/jishu_295866_1_1.html

还是不行呃

举报

更多回帖

发帖
×
20
完善资料,
赚取积分