导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→我的成功代码

* 8379: C51编程:请教斑竹DS1302的C51源程序

   huangyan 
huangyan发表的帖子 

 我的成功代码
void ds1302_open()
{
  DS1302_SCLK=0;
  DS1302_RST=1;
}

void ds1302_close()
{
  DS1302_RST=0;
  DS1302_SCLK=0;
}

/********
void ds1302_twbyte(uchar c)
{
  uchar i;
  for(i=0;i<8;i++)
  {
    DS1302_IO=(bit)(c & 0x01);
    c=c>>1;
    DS1302_SCLK=0;
    DS1302_SCLK=1;
  }
}
*************/
void ds1302_twbyte(uchar c)
{
  uchar i;
  for(i=0;i<8;i++)
  {
    DS1302_IO=0;
    if(c & 0x01 !=0)  DS1302_IO=1;
    c=c >>1;
    DS1302_SCLK=0;
    DS1302_SCLK=1;
  }
}

uchar ds1302_trbyte()
{
  uchar i,ret;
  DS1302_IO=1;
  ret=0;
  for(i=0;i<8;i++)
  {
    DS1302_SCLK=0;
    ret=ret>>1;
    if(DS1302_IO==1) ret=ret | 0x80;
    DS1302_SCLK=1;
  }
  return ret;
}

void ds1302_init()
{
  ds1302_close();
  ds1302_open();
  ds1302_twbyte(0xbe);      /* write all */
  rtc.second=rtc.second &0x7f;
  ds1302_twbyte(rtc.second);
  ds1302_twbyte(rtc.minute);
  ds1302_twbyte(rtc.hour);
  ds1302_twbyte(rtc.date);
  ds1302_twbyte(rtc.month);
  ds1302_twbyte(rtc.week);
  ds1302_twbyte(rtc.year);
  ds1302_twbyte(0x00);     /* control */
  ds1302_twbyte(0xa5);    /* charge mode */
  ds1302_close();
}

void read_rtc()
{
  ds1302_close();
  ds1302_open();
  ds1302_twbyte(0xbf);
  rtc.second=ds1302_trbyte();
  rtc.minute=ds1302_trbyte();
  rtc.hour=ds1302_trbyte();
  rtc.date=ds1302_trbyte();
  rtc.month=ds1302_trbyte();
  rtc.week=ds1302_trbyte();
  rtc.year=ds1302_trbyte();
  ds1302_close();
}

void write_rtc()
{
  ds1302_close();
  ds1302_open();
  ds1302_twbyte(0xbe);    /* write all */
  ds1302_twbyte(rtc.second);
  ds1302_twbyte(rtc.minute);
  ds1302_twbyte(rtc.hour);
  ds1302_twbyte(rtc.date);
  ds1302_twbyte(rtc.month);
  ds1302_twbyte(rtc.week);
  ds1302_twbyte(rtc.year);
  ds1302_close();
}

uchar get_ds1302_ram(uchar address_ds1302)  /*地址范围: 00--30 */
{
  uchar c;
  address_ds1302=address_ds1302<<1;
  address_ds1302=address_ds1302 | 0x0c1;
  ds1302_open();
  ds1302_twbyte(address_ds1302);
  c=ds1302_trbyte();
  ds1302_close();
  return c;
}

void put_ds1302_ram(uchar address_ds1302, uchar value)   /*地址范围: 00--30 */
{
  address_ds1302=address_ds1302<<1;
  address_ds1302=address_ds1302 | 0x0c0;
  ds1302_open();
  ds1302_twbyte(address_ds1302);
  ds1302_twbyte(value);
  ds1302_close();
}


发表时间:2002年6月20日13:57:00

  
回复该帖

本主题共有 3 帖,分页:>>>>>该主题的所有内容[3]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:C51编程:我新来的,我是新来的,喜欢单片机,希望大家多帮助一下我
[下一篇帖子]:硬件:关于16位ISA卡求救各位大侠,有做过16位的ISA卡的吗?请教一个问题,我现在做了一块16位