一、ds1302报警?
DS1302时钟故障分析
使用DS1302,有1%左右的概率出现时钟问题:
设置时间后,掉电用电池给DS1302供电,一段日子后,重新上电发现DS1302的晶振停振,时间读出为2000年1月1日0时0分0秒,或停在断电时的时间值,重新设置时间后就正常了。
该现象在北方冬季和春季发生频率更高,怀疑是否与静电有关,但其它季节也有发生该现象。
另外,更换产品的外接开关电源后,出错概率降低,但没有彻底解决。
使用的晶体为32768HZ(负载电容为6p),后备电池电压为3V。
二、ds1302程序讲解?
DS1302是一款实时时钟芯片,可用于嵌入式系统中,下面介绍关于DS1302的程序讲解:
1.引脚定义:DS1302共8个引脚,其中RST(复位),IO(数据),CE(使能)三个引脚非常重要,需要单独定义。
```
#define rst 9
#define io 8
#define ce 7
```
2.写操作函数:DS1302的写入数据操作需要发送8位地址和8位数据两个参数,具体步骤如下:
```
void DS1302ByteWrite(unsigned char addr,unsigned char dat)
{
unsigned char i;
digitalWrite(rst, LOW);
digitalWrite(ce, LOW);
delay_us(4);
for(i=0;i<8;i++)//发送地址和数据
{
digitalWrite(io,addr&0x01);
addr>>=1;
digitalWrite(ce, HIGH);
delay_us(4);
digitalWrite(ce, LOW);
}
for(i=0;i<8;i++)
{
digitalWrite(io,dat&0x01);
dat>>=1;
digitalWrite(ce, HIGH);
delay_us(4);
digitalWrite(ce, LOW);
}
digitalWrite(rst, HIGH); //主机复位
}
```
3. 读操作函数:DS1302的读取需要先发送要读取的地址,然 后读取返回的8位数据。
```
unsigned char DS1302ByteRead(unsigned char addr)
{
unsigned char i,temp=0;
digitalWrite(rst, LOW);
digitalWrite(ce, LOW);
delay_us(4);
for(i=0;i<8;i++) //发送要读取的地址
{
digitalWrite(io,addr&0x01);
addr>>=1;
digitalWrite(ce, HIGH);
delay_us(4);
digitalWrite(ce, LOW);
}
pinMode(io,INPUT); //IO口设置为输入
delay_us(4);
for(i=0;i<8;i++)//读取数据
{
temp>>=1;
if(digitalRead(io)) temp|=0x80;
digitalWrite(ce,HIGH);
delay_us(4);
digitalWrite(ce,LOW);
}
pinMode(io,OUTPUT); //IO口设置为输出
digitalWrite(rst, HIGH); //主机复位
return temp;
}
```
4.设置时间函数:DS1302的时间设置需要依次设置秒、分、 时、日、月、周、年等信息。
```
void DS1302TimeSet(unsigned char year,unsigned char month,unsigned char day,unsigned char week,unsigned char hour,unsigned char minute,unsigned char second)
{
DS1302ByteWrite(0x8E,0x00);//使能写保护
DS1302ByteWrite(0x80,second); //设置秒
DS1302ByteWrite(0x82,minute);//设置分
DS1302ByteWrite(0x84,hour); //设置小时
DS1302ByteWrite(0x86,day);
DS1302ByteWrite(0x88,month);//设置月
DS1302ByteWrite(0x8A,week);
DS1302ByteWrite(0x8C,year);//设置年
DS1302ByteWrite(0x8E,0x80);//关闭写保护使能
}
```
5.读取时间函数:DS1302的时间读取也需要依次读取 秒、分、时、日、月、周、年等信息。
```
void DS1302TimeRead(unsigned char *year,unsigned char *month,unsigned char *day,unsigned char *week,unsigned char *hour,unsigned char *minute,unsigned char *second)
{
*second=DS1302ByteRead(0x81); //秒
*minute=DS1302ByteRead(0x83); //分
*hour=DS1302ByteRead(0x85);//时
*day=DS1302ByteRead(0x87); //日
*month=DS1302ByteRead(0x89); //月
*week=DS1302ByteRead(0x8B);//周
*year=DS1302ByteRead(0x8D); //年
}
```
以上是DS1302实时时钟芯片程序的基本说明,可以根据需要进一步优化和修改。
三、ds1302是什么?
DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。
该RAM简单说是用来存放时间数据与其它辅助内容的,可以通过写操作对其中的部分数据进行更换,如设置时间初始值等等,我们要想得到所要的时间数值,也只有通过读操作它内部的RAM中的数据才知
四、DS1302时钟为什么DS1302的时钟设?
简单说,DS1302是个产生实时时钟的芯片,通过她可以得到年、月、日、周日、时、分、秒等等数据;单片机可以通过编程,实现DS1302芯片功能,显然,需要编程,而使用DS1302芯片便可省去这个步骤了,至于你的单片机电路中是否需要DS1302芯片,就看你设计目的了;
五、小米手机需要跟换电源接口或电池需要先备份吗?
手机去手机售后点修理,最好将系统资料全部备份,回复出厂设置一下,原因是手机售后修理后,都要恢复出厂设置的,并进行系统测试的。
不用怀疑,立刻备份资料。
防止资料外泄。
六、ds1302如何设置闹钟?
ds1302是不带闹钟功能的。向楼上那位说的,在主程序放一个检测子程序,那样也不好。如果一上电,闹钟就没了。修改也很不方便,不能保存。
如果用单片机的话,单片机内部自带有EEROM,可以把闹钟数据写入EEROM中,那样即使掉电也不会丢失数据。这样是最好的办法~
七、Ds1302有几根总线?
DS1302 是时钟器件。 8 个引脚,各自具有特定的功能。 用两条线,即可与 MCU 实现通讯。 线路的名称,由你自己随便定义。
八、DS1302的优缺点?
DS1302 存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。
这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。
传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。
九、如何修改DS1302的时间?
根据DS1302的命令表,先取消写保护,在写入数据前先用0x80命令暂停时钟,再写命令修改时间,像修改分钟就是,先发送0x80暂停DS1302,再发送0x82写分钟寄存器命令,再把新的分钟数据写进去。
十、DS1302不走的原因?
系统是数码管+单片机89C51+DS1302吗?如果是:
查查DS1302的晶体有没有不振的情况,可以用示波器测量。如有,检查晶体电路,更换晶体。
查查单片机和DS1302之间的接口,有没有从DS1302中读取数据的操作,看看这些操作对不。
查查单片机和数码管之间的连接,是否有单片机没有更新显示的情况。
如果上面两处有问题,查查单片机的复位电路和时钟电路,如果都没有问题,查查程序,看看程序中什么地方有bug。
- 相关评论
- 我要评论
-