在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430和實(shí)時(shí)時(shí)鐘HT1381的接口程序

            MSP430和實(shí)時(shí)時(shí)鐘HT1381的接口程序

            作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
            HT1381是臺(tái)灣HT公司的一款串行實(shí)時(shí)時(shí)鐘IC,工作電壓:2.0V~5.5V,最大輸入串行時(shí)鐘500kHz(VDD=2V),2MHz(VDD=5V) ;工作電流:2V時(shí)小于300nA,5V時(shí)小于1mA。串行I/O傳送,二種數(shù)據(jù)傳送方式:單字節(jié)或多字節(jié)(Burst方式),所有寄存器以BCD碼格式存儲(chǔ)
            具有接口簡單、功耗低、工作電壓范圍寬、計(jì)時(shí)精確、功能全、成本低等優(yōu)點(diǎn),
            因此在實(shí)際應(yīng)用中被廣泛采用。
            該芯片提供秒、分、時(shí)、日、日期、月和年的信息。
            對(duì)于小于31天的月的月末日期能自動(dòng)進(jìn)行調(diào)整,還包括閏年校正功能。低功耗設(shè)計(jì)且時(shí)鐘的運(yùn)行可以采用24小時(shí)格式或帶AM/PM指示的12小時(shí)的格式。

            以下是接口程序,430測(cè)試頻率為4M.
            #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];

            voidTimer_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);
            }
            #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];

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


            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉