关于ds1302复位的稳定时间的问题

89C52用来控制DS1302时出现的问题?? - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
89C52用来控制DS1302时出现的问题??
19:07:47  
小白用DS1302来做时钟时给89c52接线时没有对DS1302的sclk io rest三个引脚接上上啦电阻时出现数据不稳定,然后我就接上上拉电阻,DS1302读出的数据就好好的了,这时怎么回事???请大侠帮忙解答一下,谢谢。。。
下面才是重要问题:
& && && &:为什么DS1303的datasheet说的是要下拉40K的电阻,我们怎么都是用上啦了???
& && && &&&资料上说到的&&DC 电气特性&&跟AC电气特性是怎么回事???
& && && & 我做单片机外围设计时用哪个特性来考虑我所用的主芯片(如stc89c52)的电气特性是否满足DS1302所需要的电气特性。。
& && && & 麻烦大侠帮忙解答下。谢谢!!!
(40.76 KB, 下载次数: 5)
19:06 上传
(119.44 KB, 下载次数: 4)
19:06 上传
(147.6 KB, 下载次数: 4)
19:06 上传
19:07 上传
点击文件名下载附件
下载积分: 积分 -1 分
217.31 KB, 下载次数: 7, 下载积分: 积分 -1 分
从你发的表格看,AC是它的电气特性,平时好像很少关心这些参数,倒是DC是时序图里的时间特性,关系到指令延迟问题,但这里基本都是纳秒级的,52一条指令的周期远超过这个时间,所以也不用考虑
19:07:48  
从你发的表格看,AC是它的电气特性,平时好像很少关心这些参数,倒是DC是时序图里的时间特性,关系到指令延迟问题,但这里基本都是纳秒级的,52一条指令的周期远超过这个时间,所以也不用考虑
19:09:53  
哦,那个是说DS1302本身rest&&sclk IO三线就有一个40k的下来电阻了。。。。。那么为什么我们还要上啦????大侠在哪里啊啊啊啊啊
22:22:57  
23:02:28  
你好,其实我遇到的问题是解决了。但是就是存在疑问,为什么那DS1302的三根线为什么要上拉?DS1302的DATASHEET手册里面的DC电气特性和AC电气特性,我在为主芯片选型的时候要考虑的外围设备的电气特性应该要考虑的是DC的?还是AC的?
12:27:12  
从你发的表格看,AC是它的电气特性,平时好像很少关心这些参数,倒是DC是时序图里的时间特性,关系到指令延迟问题,但这里基本都是纳秒级的,52一条指令的周期远超过这个时间,所以也不用考虑
是哦,谢谢啦
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司请教关于DS1302时钟程序设计的问题_百度知道
请教关于DS1302时钟程序设计的问题
我有更好的答案
因为32.768KHz的晶振误差不一样,你先不加电容,看看一天的误差有多少,是快还是慢,再加6pF电容
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。DS1302注意问题_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
DS1302注意问题
&&注意事项
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢关于DS1302时钟总是显示乱码问题 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
关于DS1302时钟总是显示乱码问题
16:43:12  
不知道为什么,用DS1302显示时钟,数字老是出现乱码,不知道为什么,里边注释的是另一块学习板的引脚,我把我写的代码发上来,还望大神能帮帮忙,嘻嘻,谢谢啦哈
16:40 上传
点击文件名下载附件
下载积分: 积分 -1 分
55.61 KB, 下载次数: 6, 下载积分: 积分 -1 分
已退回1积分
17:36:09  
我这有个万年历的包,你可以看看有用没有?链接: 密码:kitm
09:34:33  
我这有个万年历的包,你可以看看有用没有?链接:http://pan.baidu.com/s/1c0mz1fU 密码:kitm ...
好的&&谢谢& &我想知道我代码哪里出错了&&要知道错误&&学到的更深
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司查看: 3089|回复: 4
关于DS1302的数据处理问题
程序是读DS1302,数码管显示
现在遇到的问题是读取的数据在数码管显示的时候只要前一个数据是双数,后一个数据就会变乱码
例如aa-bb-cc,如果AA是双数,BB就会乱码
二楼贴程序,是我数据处理错了吗?为什么我一直找不出来= =
这是DS1302的驱动文件
#include &ds1302.h&
unsigned char time_buf1[8] = {20,15,3,27,18,15,00,5};//空年月日时分秒周
unsigned char time_buf[8]; //空年月日时分秒周
/*------------------------------------------------
向DS1302写入一字节数据
------------------------------------------------*/
void Ds1302_Write_Byte(unsigned char addr, unsigned char d)
//写入目标地址:addr
addr = addr & 0xFE; //最低位置零
for (i = 0; i & 8; i ++)
if (addr & 0x01)
addr = addr && 1;
//写入数据:d
for (i = 0; i & 8; i ++)
if (d & 0x01)
d = d && 1;
RST_CLR;//停止DS1302总线
/*------------------------------------------------
从DS1302读出一字节数据
------------------------------------------------*/
unsigned char Ds1302_Read_Byte(unsigned char addr)
//写入目标地址:addr
addr = addr | 0x01;//最低位置高
for (i = 0; i & 8; i ++)
if (addr & 0x01)
addr = addr && 1;
//输出数据:temp
for (i = 0; i & 8; i ++)
temp = temp && 1;
temp |= 0x80;
temp &= 0x7F;
RST_CLR;//停止DS1302总线
/*------------------------------------------------
向DS1302写入时钟数据
------------------------------------------------*/
void Ds1302_Write_Time(void)
unsigned char i,
for(i=0;i&8;i++)
{ //BCD处理
tmp=time_buf1[i]/10;
time_buf[i]=time_buf1[i]%10;
time_buf[i]=time_buf[i]+tmp*16;
Ds1302_Write_Byte(ds1302_control_add,0x00);//关闭写保护
Ds1302_Write_Byte(ds1302_sec_add,0x80);//暂停
//Ds1302_Write_Byte(ds1302_charger_add,0xa9);//涓流充电
Ds1302_Write_Byte(ds1302_year_add,time_buf[1]);//年
Ds1302_Write_Byte(ds1302_month_add,time_buf[2]);//月
Ds1302_Write_Byte(ds1302_date_add,time_buf[3]);//日
Ds1302_Write_Byte(ds1302_day_add,time_buf[7]);//周
Ds1302_Write_Byte(ds1302_hr_add,time_buf[4]);//时
Ds1302_Write_Byte(ds1302_min_add,time_buf[5]);//分
Ds1302_Write_Byte(ds1302_sec_add,time_buf[6]);//秒
Ds1302_Write_Byte(ds1302_day_add,time_buf[7]);//周
Ds1302_Write_Byte(ds1302_control_add,0x80);//打开写保护
/*------------------------------------------------
从DS1302读出时钟数据
------------------------------------------------*/
void Ds1302_Read_Time(void)
unsigned char i,
time_buf[1]=Ds1302_Read_Byte(ds1302_year_add);//年
time_buf[2]=Ds1302_Read_Byte(ds1302_month_add);//月
time_buf[3]=(Ds1302_Read_Byte(ds1302_date_add)); //日
time_buf[4]=Ds1302_Read_Byte(ds1302_hr_add);//时
time_buf[5]=Ds1302_Read_Byte(ds1302_min_add);//分
time_buf[6]=(Ds1302_Read_Byte(ds1302_sec_add))&0x7F;//秒
time_buf[7]=Ds1302_Read_Byte(ds1302_day_add);//周
for(i=0;i&8;i++)
{ //BCD处理
tmp=time_buf[i]/16;
time_buf1[i]=time_buf[i]%16;
time_buf1[i]=time_buf1[i]+tmp*10;
/*------------------------------------------------
DS1302初始化
------------------------------------------------*/
void Ds1302_Init(void)
RST_CLR;//RST脚置低
SCK_CLR;//SCK脚置低
Ds1302_Write_Byte(ds1302_sec_add,0x00);
main函数在这
#include&stc15f2k60s2.h&
#include&ds1302.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
sbit Wr=P3^6;
#define rst573 P2&=0x1f//关闭选中
#define smgY6C P2|=0xc0 //位选
#define smgY7C P2|=0xe0 //段选
#define ledY4C P2|=0x80 //选中LED
#define beeY5C P2|=0xa0 //选中蜂鸣器+继电器
sbit k0=P3^0;
sbit k1=P3^1;
sbit k2=P3^2;
sbit k3=P3^3;
sbit k4=P3^4;
sbit k5=P3^5;
sbit k6=P4^2;
sbit k7=P4^4;
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
// 全灭+ 1~8wei
uchar code wei[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码
uchar num=0,
void CHS_BEEP_close() //关闭蜂鸣器继电器
void delay(uint z)//ms延时函数
for(x=z;x&0;x--)
for(y=1100;y&0;y--);
void display(uchar adt1,uchar adt2,uchar adt3)
P0=0x00; //消影
Wr=0; //位选
P0=wei[1];
smgY7C; //段选
P0=duan[adt1/10];
Wr=0; //位选
P0=wei[2];
smgY7C; //段选
P0=duan[adt1%10];
Wr=0; //位选
P0=wei[3];
smgY7C; //段选
Wr=0; //位选
P0=wei[4];
smgY7C; //段选
P0=duan[adt2/10];
Wr=0; //位选
P0=wei[5];
smgY7C; //段选
P0=duan[adt2%10];
Wr=0; //位选
P0=wei[6];
smgY7C; //段选
Wr=0; //位选
P0=wei[7];
smgY7C; //段选
P0=duan[adt3/10];
Wr=0; //位选
P0=wei[8];
smgY7C; //段选
P0=duan[adt3%10];
void keyscan()
if(k0==0){delay(50);if(k0==0)num=0;while(!k0);}
if(k1==0){delay(50);if(k1==0)num=1;while(!k1);}
void init_time()
TMOD=0x00; //16位自动重装定时器
TH0=0 //定时5MS
void main()
init_time();
CHS_BEEP_close();
Ds1302_Init();
Ds1302_Write_Time();
Ds1302_Read_Time();
keyscan();
if(num)display(time_buf1[1],time_buf1[2],time_buf1[3]);//显示年月日
else display(time_buf1[4],time_buf1[5],time_buf1[6]);//显示时分秒
void timer_0() interrupt 1
if(time==20) //定时读数据
Ds1302_Read_Time();
Powered by}

我要回帖

更多关于 ds1302与ds1307的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信