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

📄 pcf8563-0.c

📁 实时时钟芯片PCF8563 MSP430源程序
💻 C
字号:
#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]%10);
  }

        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); 
}

⌨️ 快捷键说明

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