视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
DS1302程序
2025-09-28 20:55:00 责编:小OO
文档

实时时钟DS1302读写程序(C51)

//打开DS1302

void TimeSpiOpen(void)

{

  TIMECLK = 0;

  TIMERST = 0;//禁止DS1302

  TIMEIO  = 1;//释放数据总线

  TIMERST = 1;//使能DS1302

}

//关闭DS1302

void TimeSpiClose(void)

{

  TIMERST = 0;//禁止DS1302

  TIMEIO  = 1;//释放数据总线

  TIMECLK = 1;

}

//读写DS1302

unsigned char TimeSpiReadWrite(unsigned char val)

{

unsigned char i;

  ACC = val;//取8位数据

  for (i = 8;i > 0; i--)

  {

    TIMECLK = 0;//时钟下降沿输入数据(DS1302读)

    _nop_();//延时

    CY = TIMEIO;//接收串行数据到CY

    _rrca_();//右移一位数据到CY(先存后取)

    TIMEIO = CY;//发送串行数据

    TIMECLK = 1;//时钟上升沿打入数据(DS1302写)

    TIMEIO  = 1;//释放数据总线

  }

  val = ACC;

  return val;

}

//读DS1302字节

unsigned char TimeByteRead(unsigned char address)

{

  TimeSpiOpen();//打开DS1302

  TimeSpiReadWrite(address);//写入DS1302命令

  address = TimeSpiReadWrite(0xff);//读入DS1302数据

  TimeSpiClose();//关闭DS1302

  return address;//返回数据

}

//读DS1302RAM字节

unsigned char TimeRamByteRead(unsigned char address)

{

  TimeSpiOpen();//打开DS1302

  TimeSpiReadWrite((address << 1) | 0xc1);//写入DS1302命令

  address = TimeSpiReadWrite(0xff);//读入DS1302数据

  TimeSpiClose();//关闭DS1302

  return address;//返回数据

}

//写DS1302字节

void TimeByteWrite(unsigned char address, unsigned char val)

{

  TimeSpiOpen();//打开DS1302

  TimeSpiReadWrite(address);//写地址

  TimeSpiReadWrite(val);//写数据

  TimeSpiClose();//关闭DS1302

}

//写DS1302字节

void TimeRamByteWrite(unsigned char address, unsigned char val)

{

  TimeSpiOpen();//打开DS1302

  TimeSpiReadWrite((address << 1) | 0xc0);//写地址

  TimeSpiReadWrite(val);//写数据

  TimeSpiClose();//关闭DS1302

}

//使能DS1302写保护

void TimeWriteEnable(void)

{

  TimeByteWrite(timewriteregall, timewriteseg);//使能DS1302写保护

}

//开放DS1302写保护

void TimeWrieDisbale(void)

{

  TimeByteWrite(timewriteregall, 0);//开放DS1302写保护

}

//DS1302工作开始

void TimeWorkStart(void)

{

unsigned char val;

  val = TimeByteRead(timereadseg);//读秒数据

  val &= 0x7f;//打开晶振

  TimeWrieDisbale();//开放DS1302写保护

  TimeByteWrite(timewriteseg, val);//打开晶振

  TimeByteWrite(tricklewrite, 0xa5);//打开充电二极管

  TimeWriteEnable();//使能DS1302写保护

}下载本文

显示全文
专题