Proteus仿真51单片机DS1302遇到的问题总结

1. 无法初始化写入的时间值

void InitDS1302()
{
  unsigned char i = 0;
  unsigned char InitTime[7] = {0x23,
                               0x34,
                               0x10,
                               0x31,
                               0x05,
                               0x03,
                               0x23};
  DS1302_RST = 0;
  DS1302_SCLK = 0;
  // i = DS1302Read(0);
  // if ((i & 0x80) != 0)
  //{
  //  LCD_ShowString(0, 0, "hello");
  DS1302Write(7, 0x00);
  for (i = 0; i < 7; i++)
  {
    DS1302Write(i, InitTime[i]);
  }
}

读取寄存器0的值再进行判断,后面一直无法解除写保护,初值无法写入。目前没找到原因,只能把判断去掉,直接写入解除保护。

2. 调试发现读取初值一直有错误,比如读取0寄存器的秒数,一直是83或者85什么的。调试过程中发现,DS1302Read()函数局部变量dat未赋初值有影响。

unsigned char DS1302RedaByte()
{
  unsigned char mask;
  unsigned char dat = 0;//此处如果不赋值,读取的数据一直不对,其他函数如果局部变量未赋值,未发现影响。
  for (mask = 0x01; mask != 0; mask <<= 1)
  {
    if (DS1302_IO != 0)
    {
      dat |= mask;
    }
    DS1302_SCLK = 1;
    DS1302_SCLK = 0;
  }
  return dat;
}

3.定义的T0定时器,不工作,每隔200ms的设置一直未启动。

函数内部设置的局部变量数据类型有错误,应该设置为long,定时器中断内部计数值应该为int类型。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值