⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302c.c

📁 芯片ds1302的驱动和应用
💻 C
字号:
/***************************************************************************/
/* DS1302.C                                                                */
/***************************************************************************/
/**********include file***************/

#include <msp430x14x.h>

#define nop _NOP()
#define uchar unsigned char
#define uint  unsigned int

//-------------------------------------
#define IOSCLH 0x80		//SCK_DS	P2.7 1000 0000
#define IOSCLL 0x7f
#define SCK_DSL P2OUT&=IOSCLL
#define SCK_DSH P2OUT|=IOSCLH

#define IOSDAH 0x01		//SDA_DS	P3.0 0000 0001
#define IOSDAL 0xFE
#define SDA_DSL P3OUT&=IOSDAL
#define SDA_DSH P3OUT|=IOSDAH

#define IOSRSH 0x02		//SRS_DS	P3.1 0000 0010
#define IOSRSL 0xFD
#define SRS_DSL P3OUT&=IOSRSL
#define SRS_DSH P3OUT|=IOSRSH

#define SDA_IN	P3DIR&=IOSDAL
#define SDA_OUT	P3DIR|=IOSDAH
#define SDA_DS	(P3IN&IOSDAH)==IOSDAH


#define CKADDR	0x80
#define CKCTRL	0x8E

//-------------------------------------------------
void fDs1302Init(void)
{
 P2SEL=0x00;
 P2DIR=0x80;
 P3SEL=0x00;
 P3DIR=0x03;
}

//-------------------------------------------------
void ResetDs(void)
{
 SCK_DSL;
 SRS_DSL;
 SRS_DSH;
}

//-------------------------------------------------
// Output one byte data
//-------------------------------------------------
void OutByte(uchar outdata)
{
 uchar i;
 for(i=0;i<8;i++)
  {

   if(outdata&0x01)
    SDA_DSH;
   else
    SDA_DSL;
   SCK_DSL;
   SCK_DSH;
   outdata>>=1;
  }
}

//-------------------------------------------------
//Get one byte of data
//-------------------------------------------------
uchar InByte(void)
{
 uchar indata,i;
 SDA_IN;
 SDA_DSH;
 for(i=0,indata=0;i<8;i++)
  {
   SCK_DSH;
   SCK_DSL;
   indata>>=1;
   if(SDA_DS)
    {indata|=0x80;}
  }
 SDA_OUT;
 return indata;
}

//----------------------------------------
// Wrirte one byte to pointed addr
//-----------------------------------------------
void WriteByteDs(uchar addr,uchar outdata)
{
 ResetDs();
 OutByte(addr);
 OutByte(outdata);
 ResetDs();
}

//-------------------------------------------------
// Read one byte from pointed addr
//-------------------------------------------------
uchar ReadByteDs(uchar addr)
{
 uchar indata;
 ResetDs();
 OutByte(addr);
 indata=InByte();
 ResetDs();
 return indata;
}


//-------------------------------------------------
//Read time from ds1302
//-------------------------------------------------
void ReadTime(uchar * time)
{
 uchar i;
 ResetDs();
 OutByte(0xbf);
 for(i=0;i<8;i++)
   *(time++)=InByte();
  ResetDs();
  *(time-8)=*(time-8)&0x7f;
}

//-------------------------------------------------
//Write new time to ds1302
//-------------------------------------------------
void WriteTime(uchar * time)
{
 uchar i;
 ResetDs();
 OutByte(0xbe);
 for(i=0;i<8;i++)
 OutByte(*(time++));
 ResetDs();
}

//-------------------------------------------------
//Read ram from ds1302
//-------------------------------------------------
void ReadRam(uchar * data,uchar datalength)
{
 uchar i;
 ResetDs();
 OutByte(0xff);
 for(i=0;i<datalength;i++)
   *(data++)=InByte();
  ResetDs();
}

//-------------------------------------------------
void WriteRam(uchar * data,uchar datalength)
{
 uchar i;
 ResetDs();
 OutByte(0xfe);
 for(i=0;i<datalength;i++)
 OutByte(*(data++));
 ResetDs();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -