我用51单片机,学习读取DS1302并在LCD1602上显示。但现在程序编好后发现不能初始化。初始化函数如下:
void rtc_init(){
uchar i;
if(rtc_r_data(0x81) == 0x80){
rtc_w_data(0x8E,0x00);
rtc_w_data(0x8C,0x11);
rtc_w_data(0x8A,0x03);
rtc_w_data(0x88,0x06);
rtc_w_data(0x86,0x15);
rtc_w_data(0x84,0x16);
rtc_w_data(0x82,0x50);
rtc_w_data(0x80,0x00);
rtc_w_data(0x90,0xA5);
for(i=0; i<60; i=i+2){
rtc_w_data(0xC0+i,0x00);
}
rtc_w_data(0x8E,0x80);
}
}
读和写的函数是没有问题的,这和杜洋老师的程序比较过,除了变量名外基本一致。
现在状态是LCD能显示出读取的数值,也就是00年01月01日00时00分礼拜1,并不是初始化函数里定义的时间,而且也不走时。
芯片没有问题,已经在其他电路里测试过。只是不知道晶振是否完好。
另外,使用内部带10k上拉的P2口驱动SPI总线,还需要再加上拉吗?一般出现这样的问题是什么原因呢?
DS1302 不能初始化
答案:2 悬赏:20 手机版
解决时间 2021-02-12 16:13
- 提问者网友:你给我的爱
- 2021-02-11 17:17
最佳答案
- 五星知识达人网友:杯酒困英雄
- 2021-02-11 17:53
void DS1302_Initial(void) //初始化ds1302
{
unsigned char Second=Read1302(DS1302_Second);
if(Second&0x80)
DS1302_SetTime(DS1302_Second,0);
DS1302_SetTime(DS1302_Minute,0);
DS1302_SetTime(DS1302_Hour,20);
DS1302_SetTime(DS1302_Day,15);
DS1302_SetTime(DS1302_Month,6);
DS1302_SetTime(DS1302_Year,11);
DS1302_SetTime(DS1302_Week,3);
}
我这里有一小段初始化函数、读地址先前已经宏定义了的,确定1302是否起振了没有是很重要的。硬件电路也要检查。希望能帮到你。
{
unsigned char Second=Read1302(DS1302_Second);
if(Second&0x80)
DS1302_SetTime(DS1302_Second,0);
DS1302_SetTime(DS1302_Minute,0);
DS1302_SetTime(DS1302_Hour,20);
DS1302_SetTime(DS1302_Day,15);
DS1302_SetTime(DS1302_Month,6);
DS1302_SetTime(DS1302_Year,11);
DS1302_SetTime(DS1302_Week,3);
}
我这里有一小段初始化函数、读地址先前已经宏定义了的,确定1302是否起振了没有是很重要的。硬件电路也要检查。希望能帮到你。
全部回答
- 1楼网友:人间朝暮
- 2021-02-11 19:12
ds1302不用初始化,编写一段程序拷进去,把你需要的初试时间写进去就可以了。ds1302可以接一个纽扣电源,即使断电ds1302内部依然计时
ds1302的在实时显示时间中的应用。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。
关键词:时钟电路;实时时钟;单片机;
现在流行的串行时钟电路很多,如ds1302、 ds1307、pcf8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。本文介绍的实时时钟电路ds1302是dallas公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768khz晶振。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯