DS1302不走,一直显示写入的时间,刚开始显示写入时间,但马上秒显示就一直165。

#ifndef_DS1302_H__#define_DS1302_H__#include<intrins.h>//DS1302管脚定义sbitT_IO=P2^1;//位定... #ifndef _DS1302_H__
#define _DS1302_H__
#include <intrins.h>
//DS1302管脚定义
sbit T_IO=P2^1; //位定义1302芯片的接口,数据输出端定义在P2.5引脚
sbit T_RST=P2^2; //位定义1302芯片的接口,复位端口定义在P2.6引脚
sbit T_CLK=P2^0; //位定义1302芯片的接口,时钟输出端口定义在P2.4引脚
//变量定义声明
unsigned char TableDs1302[7]={55,59,23,4,3,5,11}; //初始化时时间日期设置
//秒 分 时 日月 星期 年
//函数定义声明
void Write1302(unsigned char ); //向1302写一个字节数据
void WriteSet1302(unsigned char ,unsigned char );//根据命令字,向1302写一个字节数据
unsigned char Read1302(void);//从1302读一个字节数据
unsigned char ReadSet1302(unsigned char Cmd);//根据命令字从1302读取一个字节数据
void InitDS1302(void);//初始化1302
void GetTime(void);//获取1302的时间
void Delay2us() //@24.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 9;
while (--i);
}

void Write1302(unsigned char dat)
{
unsigned char i;
T_CLK=0;
Delay2us();
for(i=0;i<8;i++)
{
T_IO=dat&0x01;
Delay2us();
T_CLK=1;
Delay2us();
T_CLK=0;
dat>>=1;
}
}

void WriteSet1302(unsigned char Cmd,unsigned char dat)
{
T_RST=0;
T_CLK=0;
T_RST=1;
Delay2us();
Write1302(Cmd);
Write1302((dat/10<<4)|(dat%10));
T_CLK=1;
T_RST=0;
}

unsigned char Read1302(void)
{
unsigned char i,dat;
Delay2us();
for(i=0;i<8;i++)
{
dat>>=1;
if(T_IO==1)
dat|=0x80;
T_CLK=1;
Delay2us();
T_CLK=0;
Delay2us();
}
return dat;
}

unsigned char ReadSet1302(unsigned char Cmd)
{
unsigned char temp,dat1,dat2;
T_RST=0;
T_CLK=0;
T_RST=1;
Write1302(Cmd);
temp=Read1302();
T_CLK=1;
T_RST=0;
dat1=temp/16;
dat2=temp%16;
temp=dat1*10+dat2;
return (temp);
}

void InitDS1302(void)
{
unsigned char i,add;
add=0x80;
WriteSet1302(0x8e,0x00);
for(i=0;i<7;i++)
{
WriteSet1302(add,TableDs1302[i]);
add+=2;
}
WriteSet1302(0x90,0xa6);
WriteSet1302(0x8e,0x80);
}

void GetTime()
{
unsigned char i,add=0x81;
WriteSet1302(0x8e,0x00);
for(i=0;i<7;i++)
{
TableDs1302[i]=ReadSet1302(add);
add+=2;
}
WriteSet1302(0x8e,0x80);
}
#endif
展开
 我来答
随骑地稻趣23
2012-08-09 · TA获得超过843个赞
知道小有建树答主
回答量:896
采纳率:0%
帮助的人:643万
展开全部
先自查一下写入形式对不对...
ds1302是bcd码的
追问
谢谢,因为没上拉,以为在P2上不用上拉·······上拉之后解决
追答
你不是用51吗,51有些时候不上拉也能正常工作。

在这点上,有一个原因就是线路的长度,本身单片机内部的上拉能力就较弱,如果编程时通讯速度较快,那么当线路稍长,寄生电容就会导致问题。
所以建议还是10K上拉稳妥一点,线路很长请看示波器。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zg751009
2012-07-30
知道答主
回答量:2
采纳率:0%
帮助的人:3168
展开全部
全部分类
追问
已经完成了····虽然不知道你说了啥,但还是谢谢·····
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式