微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 如何让DS1302启动起来,让它开始计时?

如何让DS1302启动起来,让它开始计时?

时间:10-02 整理:3721RD 点击:
如何让DS1302启动起来,让它开始计时?我的程序如下:
void write_byte(uchar add)
{uchar i;
for(i=0;i<8;i++)
{SCLK=0;
SDA=(bit)add&0x01;
add>>=1;
SCLK=1;
}
}
uchar read_byte()
{uchar i;
uchar value;
for(i=0;i<8;i++)
{value>>=1;
SDA=1;
if(SDA)
{value=value|0x80;}
SCLK=1;        
_nop_();
}
SCLK=0;
RST=0;
_nop_();
return value;
}
void write_1302(uchar DS_add,uchar DS_dat) //DS1302写数据
{RST=0;         //拉低RST,芯片禁止读写
_nop_();
SCLK=0;//SCLK为低电平时,才能把RST为高电平,时钟下降沿读取
_nop_();
RST=1;        //芯片开启读写
_nop_();
write_byte(DS_add);
write_byte(DS_dat);
RST=0;
_nop_();
SDA=1;
SCLK=1;
}
uchar read_1302(uchar DS_add)
{uchar timedata;
RST=0;
SCLK=0;
RST=1;
write_byte(DS_add);
timedata=read_byte();
RST=0 ;
_nop_();
SCLK=1;
_nop_();
SDA=1;
return timedata;
}
void set_time()
{uchar i,j,k;
for(i=0;i<7;i++)
{j=TIME/10;
k=TIME%10;
TIME=k+j*16;         //将数组转化成BCD码
}
write_1302(0x8e,0x00);
for(i=0;i<7;i++)
{write_1302(write_add,TIME); //将转化后的值写入芯片
}
write_1302(0x8e,0x80);
}
void read_time()
{
miao=read_1302(0x81);   //秒寄存器   
fen=read_1302(0x83);   //读分  
shi=read_1302(0x85);    //读时  
week=read_1302(0x8B);    //读星期   
ri=read_1302(0x87);    //日   
yue=read_1302(0x89);   //月   
nian=read_1302(0x8d);    //年   
}

没玩过

没看见主函数吗?

大概看了一下程序,没发现什么问题.把1302的操作流程简单介绍下,希望对您有帮助:
//操作步骤:
//1.通过设置芯片0x8E地址处的值,将芯片的写保护关掉,以便可以设置日期的初始值;
//2.依次对芯片的0x80\0x82\0x84\0x86\0x88\0x8A\0x8C地址进行初值的写入;
//3.设置芯片开始计时;
//4.在芯片的0x8E地址处打开写保护,防止误操作;
//5.不断读取芯片0x80-0x8C地址的值,得到计时的数据,做你想要的事情.

好好读读数据手册  有寄存器地址

学习中,,,,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top