普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2273|回复: 1

DS1302为什么掉电后所有寄存器都清零了

 关闭 [复制链接]

3

主题

7

帖子

34

积分

新手上路

Rank: 1

积分
34
发表于 2019-7-26 00:38:12 | 显示全部楼层 |阅读模式
DS1302程序是按照视频上写的,也把初始化程序注释了,为什么我掉电重新上电后所有寄存器都重0开始,是硬件问题吗,备用电池没点吗?
主程序
/*************************************************************************************
*
实验现象:下载程序后,数码管显示时钟
   
接线说明: (具体接线图可见开发攻略对应实验的“实验现象”章节)
     1,单片机-->DS1302时钟模块
       P34-->DIO
    P35-->CE
    P36-->CLK
     2,单片机-->动态数码管模块
       J22-->J6
    P22-->J9(A)
    P23-->J9(B)
    P24-->J9(C)

注意事项:         
            
**************************************************************************************
*/
#include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器
#include "ds1302.h"
typedef unsigned int u16;   //对数据类型进行声明定义
typedef unsigned char u8;
sbit LSA=P1^0;
sbit LSB=P1^1;
sbit LSC=P1^2;

char num=0;
u8 DisplayData[8];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*******************************************************************************
* 函 数 名         : delay
* 函数功能     : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}

/*******************************************************************************
* 函 数 名         : datapros()
* 函数功能     : 时间读取处理转换函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void datapros()   
{
    Ds1302ReadTime();
DisplayData[0] = smgduan[TIME[2]/16];    //时
DisplayData[1] = smgduan[TIME[2]&0x0f];     
DisplayData[2] = 0x40;
DisplayData[3] = smgduan[TIME[1]/16];    //分
DisplayData[4] = smgduan[TIME[1]&0x0f];
DisplayData[5] = 0x40;
DisplayData[6] = smgduan[TIME[0]/16];    //秒
DisplayData[7] = smgduan[TIME[0]&0x0f];
}

/*******************************************************************************
* 函数名         igDisplay()
* 函数功能   :数码管显示函数
* 输入           : 无
* 输出           : 无
*******************************************************************************/
void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
  switch(i)  //位选,选择点亮的数码管,
  {
   case(0):
    LSA=0;LSB=0;LSC=0; break;//显示第0位
   case(1):
    LSA=1;LSB=0;LSC=0; break;//显示第1位
   case(2):
    LSA=0;LSB=1;LSC=0; break;//显示第2位
   case(3):
    LSA=1;LSB=1;LSC=0; break;//显示第3位
   case(4):
    LSA=0;LSB=0;LSC=1; break;//显示第4位
   case(5):
    LSA=1;LSB=0;LSC=1; break;//显示第5位
   case(6):
    LSA=0;LSB=1;LSC=1; break;//显示第6位
   case(7):
    LSA=1;LSB=1;LSC=1; break;//显示第7位
  }
  P3=DisplayData[i];//发送数据
  delay(100); //间隔一段时间扫描
  P3=0x00;//消隐
}  
}
/*******************************************************************************
* 函 数 名       : main
* 函数功能   : 主函数
* 输    入       : 无
* 输    出      : 无
*******************************************************************************/
void main()
{
//Ds1302Init();    //第一次初始化后就可以注释该条语句,这样下次重启就不会再次初始化了
while(1)
{
  datapros();  //数据处理函数
  DigDisplay();//数码管显示函数  
}  
}


回复

使用道具 举报

3

主题

7

帖子

34

积分

新手上路

Rank: 1

积分
34
 楼主| 发表于 2019-7-26 00:38:48 | 显示全部楼层
#include"ds1302.h"
//---DS1302д?????????????????---//
//---???????????? ???λ??дλ;-------//
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
//---DS1302???????2016??5??7????????12??00??00??---//
//---?洢?????????????????,?洢???????BCD??---//
uchar TIME[7] = {0, 0, 0x12, 0x07, 0x05, 0x06, 0x16};
/*******************************************************************************
* ?? ?? ??         : Ds1302Write
* ????????     : ??DS1302???????+?????
* ??    ??         : addr,dat
* ??    ??         : ??
*******************************************************************************/
void Ds1302Write(uchar addr, uchar dat)
{
uchar n;
RST = 0;
_nop_();
SCLK = 0;//???SCLK???????
_nop_();
RST = 1; //???RST(CE)???????
_nop_();
for (n=0; n<8; n++)//????????λ???????
{
  DSIO = addr & 0x01;//??????λ???????
  addr >>= 1;
  SCLK = 1;//???????????????DS1302???????
  _nop_();
  SCLK = 0;
  _nop_();
}
for (n=0; n<8; n++)//д??8λ????
{
  DSIO = dat & 0x01;
  dat >>= 1;
  SCLK = 1;//???????????????DS1302???????
  _nop_();
  SCLK = 0;
  _nop_();
}
   
RST = 0;//???????????
_nop_();
}
/*******************************************************************************
* ?? ?? ??         : Ds1302Read
* ????????     : ???????????????
* ??    ??         : addr
* ??    ??         : dat
*******************************************************************************/
uchar Ds1302Read(uchar addr)
{
uchar n,dat,dat1;
RST = 0;
_nop_();
SCLK = 0;//???SCLK???????
_nop_();
RST = 1;//???RST(CE)???????
_nop_();
for(n=0; n<8; n++)//????????λ???????
{
  DSIO = addr & 0x01;//??????λ???????
  addr >>= 1;
  SCLK = 1;//???????????????DS1302???????
  _nop_();
  SCLK = 0;//DS1302????????????????
  _nop_();
}
_nop_();
for(n=0; n<8; n++)//???8λ????
{
  dat1 = DSIO;//?????λ???????
  dat = (dat>>1) | (dat1<<7);
  SCLK = 1;
  _nop_();
  SCLK = 0;//DS1302????????????????
  _nop_();
}
RST = 0;
_nop_(); //?????DS1302??λ????????,??????
SCLK = 1;
_nop_();
DSIO = 0;
_nop_();
DSIO = 1;
_nop_();
return dat;
}
/*******************************************************************************
* ?? ?? ??         : Ds1302Init
* ????????     : ?????DS1302.
* ??    ??         : ??
* ??    ??         : ??
*******************************************************************************/
void Ds1302Init()
{
uchar n;
Ds1302Write(0x8E,0X00);   //???д????????????д????????
for (n=0; n<7; n++)//д??7??????????????????????????
{
  Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);
}
Ds1302Write(0x8E,0x80);   //??д????????
}
/*******************************************************************************
* ?? ?? ??         : Ds1302ReadTime
* ????????     : ?????????
* ??    ??         : ??
* ??    ??         : ??
*******************************************************************************/
void Ds1302ReadTime()
{
uchar n;
for (n=0; n<7; n++)//???7??????????????????????????
{
  TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
}
  
}

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-5-15 06:16 , Processed in 0.102948 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表