微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MSP430单片机的PCF8563时钟芯片C语言驱动程序

MSP430单片机的PCF8563时钟芯片C语言驱动程序

时间:11-27 来源:互联网 点击:
#define NOP _NOP();_NOP()

#define NowSec cNowTime[0]

#define NowMin cNowTime[1]

#define NowHour cNowTime[2]

#define NowDate cNowTime[3]

#define NowMonth cNowTime[4]

#define NowYear cNowTime[5]

#define SetSec cSetTime[0]

#define SetMin cSetTime[1]

#define SetHour cSetTime[2]

#define SetDate cSetTime[3]

#define SetMonth cSetTime[4]

#define SetYear cSetTime[5]

uchar Temp_Count;

uchar cSetTime[6];

uchar cNowTime[6];

void Timer_Out_Byte(uchar OutByte);

uchar Timer_In_Byte(void);

void ReadRealtime(void)

{

NOP;

HT1381_OUTPORT &=~Timer_SCL; //Timer_SCL=0;

NOP;

HT1381_OUTPORT |= Timer_Rest; //Timer_Rest=1;

Timer_Out_Byte(0xBF); //Read, Burst Mode

for(TimeCount=0;TimeCount<6;TimeCount++)

{

if (TimeCount==5)

Timer_In_Byte(); //dummy read.

cNowTime[TimeCount]=Timer_In_Byte();

//change BCD to uchar

cNowTime[TimeCount]=(cNowTime[TimeCount]/0x10)*10+(cNowTime[TimeCount]%0x10);

}

NOP;

HT1381_OUTPORT &=~Timer_Rest; //Timer_Rest=0;

}

void WriteRealtime(void)

{

NOP;

HT1381_OUTPORT &=~Timer_Rest; //Timer_Rest=0; //for sure to close rest.

NOP;

HT1381_OUTPORT &=~Timer_SCL; //Timer_SCL=0;

NOP;

HT1381_OUTPORT |= Timer_Rest; //Timer_Rest=1;

Timer_Out_Byte(0x8E); //Write,Single Mode

Timer_Out_Byte(0x00); //Write, Protect Byte=0, Disable protect

NOP;

HT1381_OUTPORT &=~Timer_Rest; //Timer_Rest=0;

NOP;

HT1381_OUTPORT |= Timer_Rest; //Timer_Rest=1;

Timer_Out_Byte(0x80); //Write,Single Mode

Timer_Out_Byte(0x00); //Write, OSC enalbe, old second distroied

NOP;

HT1381_OUTPORT &=~Timer_Rest; //Timer_Rest=0;

for(TimeCount=0;TimeCount<6;TimeCount++)

{

//change uchar to BCD

cSetTime[TimeCount]=(cSetTime[TimeCount]/10)*0x10+(cSetTime[TimeCount]);

}

NOP;

HT1381_OUTPORT |= Timer_Rest; //Timer_Rest=1;

Timer_Out_Byte(0XBE); //Write,Burst Mode

Timer_Out_Byte(SetSec & 0x7F); //OSC enable for sure.

Timer_Out_Byte(SetMin);

Timer_Out_Byte(SetHour & 0x7F); //24 Hour Mode

Timer_Out_Byte(SetDate);

Timer_Out_Byte(SetMonth);

Timer_Out_Byte(0x00);

Timer_Out_Byte(SetYear);

Timer_Out_Byte(0x00);

NOP;

HT1381_OUTPORT &=~Timer_Rest; //Timer_Rest=0;

NOP;

HT1381_OUTPORT |= Timer_Rest; //Timer_Rest=1;

Timer_Out_Byte(0x8E); //Write,Single Mode

Timer_Out_Byte(0x80); //Write, Protect Byte=0, enable protect

NOP;

HT1381_OUTPORT &=~Timer_Rest; //Timer_Rest=0;

}

void Timer_Out_Byte(uchar OutByte)

{

uchar Timer_Count;

for (Timer_Count=0;Timer_Count<8;Timer_Count++)

{

HT1381_DIRPORT |= Timer_SDA; //output

if ((OutByte & 0x01) == 0)

HT1381_OUTPORT &=~Timer_SDA;

else

HT1381_OUTPORT |= Timer_SDA;

NOP;

HT1381_OUTPORT |= Timer_SCL;

NOP;

HT1381_OUTPORT &=~Timer_SCL; //Timer_SCL=0;

OutByte = OutByte >> 1;

}

}

uchar Timer_In_Byte(void)

{

uchar InByte,Timer_Count;

InByte=0x00;

HT1381_DIRPORT &=~Timer_SDA; //Timer_SDA=1;//input

for (Timer_Count=0;Timer_Count<8;Timer_Count++)

{

InByte >>= 1;

NOP;

HT1381_OUTPORT |= Timer_SCL;

if(HT1381_INPORT&Timer_SDA)

InByte |= 0x80;

else

InByte &= 0x7F;

NOP;

HT1381_OUTPORT &=~Timer_SCL; //Timer_SCL=0;

}

return(InByte);

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top