首页 > 新闻中心 > > 正文

时钟芯片DS1302的C语言驱动

更新时间: 2006-03-02 14:50:08来源: 粤嵌教育浏览量:2749

  评论:本程序为时钟芯片DS1302的C语言驱动,任何单片机,MCU都适用,只要修改下RTC_SCLK,RTC_IO,RTC_CS等位的高低电平的,以及中断禁止、使能的定义即可。

void SendByte_DS1302(char SendData)
{
 char clkserialbyte=7;

  RTC_SCLK=LOW;  

   _NOP();
   _NOP();
   _NOP();
   _NOP();
 _NOP();
   _NOP();
   do
   {
      if(SendData&0x01)
        RTC_IO=HIGH;
     else
       RTC_IO=LOW;
 
      SendData=SendData>>1;
  
     RTC_SCLK=HIGH;
 
     _NOP();
     _NOP();
     _NOP();
     _NOP();
     _NOP();
     _NOP();
     _NOP();

        RTC_SCLK=LOW;
    
   }while(clkserialbyte--);      /* 发送一字节*/
}
/*---------------------------------------------------------- */
RecByte_DS1302()
{
 char clkserialbyte=7;
    char ReadData=0;

   RTC_SCLK=LOW;

    _NOP();
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    do
   {
     ReadData=ReadData>>1;
     if(RTC_IO==1)
     RTC_SCLK=HIGH;
 
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   _NOP();

    RTC_SCLK=LOW;
     
 }while(clkserialbyte--);   // 接收一字节
   return(ReadData);
}
char Read_DS1302(char clk_command)

        _DINT();
 
 RTC_CS=LOW;
 
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   _NOP();

   RTC_SCLK=LOW;
 
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   SendByte_DS1302(clk_command);
   clk_command=RecByte_DS1302();
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   
 RTC_CS=HIGH;

   return(clk_command);
}
void Write_DS1302(char clk_command,char clk_data)
{
   
        _DINT();
 
  RTC_CS=LOW;

  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();

  RTC_SCLK=LOW;
  
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();

  SendByte_DS1302(clk_command);
  SendByte_DS1302(clk_data);

  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  
 RTC_CS=HIGH;

}


// 初始化DS1302芯片
void IniDS1302()
{
 Write_DS1302(CmdWrControl,0);       /* 打开写保护*/
 Write_DS1302(CmdWrSec,0);           /* 打开晶振*/

}

免费预约试听课