📄 ds1302c.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 + -