新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR DS1302源程序

        AVR DS1302源程序

        作者: 時間:2016-11-18 來源:網絡 收藏
        //mega16 7.3728MHz石英晶體 iccavr6.31a

        //相關定義:

        本文引用地址:http://www.104case.com/article/201611/315731.htm

        #define uint unsigned int

        #define uchar unsigned char

        #define DS1302_RST 0 //pc0

        #define DS1302_SDA 1 //pc1

        #define DS1302_SCLK 6 //pc6

        //ds1302相關

        //DS1302_RST=1

        #define Set_DS1302_RST() PORTC|=1<

        //DS1302_RST=0

        #define Clr_DS1302_RST() PORTC&=~(1<

        //DS1302_SDA=1

        #define Set_DS1302_SDA() PORTC|=1<

        //DS1302_SDA=0

        #define Clr_DS1302_SDA() PORTC&=~(1<

        //DS1302_SCLK=1

        #define Set_DS1302_SCLK() PORTC|=1<

        //DS1302_SCLK=0

        #define Clr_DS1302_SCLK() PORTC&=~(1<

        //DS1302deSDA置為輸出腳

        #define Set_DS1302_DDRSDA() DDRC|=1<

        //DS1302deSDA置為輸入腳

        #define Clr_DS1302_DDRSDA() DDRC&=~(1<

        #define DS1302_SEC_Reg 0x80

        #define DS1302_MIN_Reg 0x82

        #define DS1302_HR_Reg 0x84

        #define DS1302_DATE_Reg 0x86

        #define DS1302_MONTH_Reg 0x88

        #define DS1302_DAY_Reg 0x8a

        #define DS1302_YEAR_Reg 0x8c

        #define DS1302_CONTROL_Reg 0x8e

        #define DS1302_CHARGER_Reg 0x90

        #define DS1302_CLKBURST_Reg 0xbe

        //全局變量

        //為了方便,我把個位和十位分開了

        uchar year1=0x88;

        uchar year0=0x88;

        uchar month1=0x88;

        uchar month0=0x88;

        uchar date0=0x88;

        uchar date1=0x88;

        uchar day=0x88;

        uchar hour1=0x88;

        uchar hour0=0x88;

        uchar minute1=0x88;

        uchar minute0=0x88;

        uchar second1=0x88;

        uchar second0=0x88;

        //自程序開始

        void DS1302_Write(uchar reg,uchar data)

        {

        uchar i;

        Set_DS1302_DDRSDA();

        Clr_DS1302_RST();

        asm("nop");

        asm("nop");

        Clr_DS1302_SCLK();

        asm("nop");

        asm("nop");

        Set_DS1302_RST();

        asm("nop");

        asm("nop");

        for(i=8;i>0;i--)

        {

        if(reg&0x01) Set_DS1302_SDA();

        else Clr_DS1302_SDA();

        asm("nop");

        asm("nop");

        Set_DS1302_SCLK();

        asm("nop");

        asm("nop");

        Clr_DS1302_SCLK();

        asm("nop");

        asm("nop");

        reg>>=1;

        }

        for(i=8;i>0;i--)

        {

        if(data&0x01) Set_DS1302_SDA();

        else Clr_DS1302_SDA();

        asm("nop");

        asm("nop");

        Set_DS1302_SCLK();

        asm("nop");

        asm("nop");

        Clr_DS1302_SCLK();

        asm("nop");

        asm("nop");

        data>>=1;

        }

        Clr_DS1302_RST();

        asm("nop");

        asm("nop");

        Clr_DS1302_DDRSDA();

        }

        uchar DS1302_Read(uchar reg)

        {

        uchar data=0,i;

        reg+=1;//讀標志

        Set_DS1302_DDRSDA();

        Clr_DS1302_RST();

        asm("nop");

        asm("nop");

        Clr_DS1302_SCLK();

        asm("nop");

        asm("nop");

        Set_DS1302_RST();

        asm("nop");

        asm("nop");

        for(i=8;i>0;i--)

        {

        if(reg&0x01) Set_DS1302_SDA();

        else Clr_DS1302_SDA();

        asm("nop");

        asm("nop");

        Set_DS1302_SCLK();

        asm("nop");

        asm("nop");

        Clr_DS1302_SCLK();

        asm("nop");

        asm("nop");

        reg>>=1;

        }

        Clr_DS1302_DDRSDA();

        for(i=8;i>0;i--)

        {

        data>>=1;

        if((PINC&(1<ta|=0x80;

        Set_DS1302_SCLK();

        asm("nop");

        asm("nop");

        Clr_DS1302_SCLK();

        asm("nop");

        asm("nop");

        }

        Clr_DS1302_RST();

        asm("nop");

        asm("nop");

        return(data);

        }

        uchar Check_DS1302(void)

        {

        DS1302_Write(DS1302_CONTROL_Reg,0x80);

        if(DS1302_Read(DS1302_CONTROL_Reg)==0x80) return 1;

        return 0;

        }

        void DS1302_Init(void)

        {

        DS1302_Write(DS1302_CONTROL_Reg,0x00);//關閉寫保護

        DS1302_Write(DS1302_SEC_Reg,0x80);//暫停

        DS1302_Write(DS1302_CHARGER_Reg,0xa9);//涓流充電

        DS1302_Write(DS1302_YEAR_Reg,0x04); //年

        DS1302_Write(DS1302_MONTH_Reg,0x12); //月

        DS1302_Write(DS1302_DATE_Reg,0x09); //日

        DS1302_Write(DS1302_DAY_Reg,0x04); //周

        DS1302_Write(DS1302_HR_Reg,0x10); //時

        DS1302_Write(DS1302_MIN_Reg,0x25); //分

        DS1302_Write(DS1302_SEC_Reg,0x00); //秒

        DS1302_Write(DS1302_CONTROL_Reg,0x80);//打開寫保護

        }

        void ReadTime(void)

        {

        uchar data;

        data=DS1302_Read(DS1302_YEAR_Reg);//年

        year0=data&0x0f;

        year1=data>>4;

        data=DS1302_Read(DS1302_MONTH_Reg);//月

        month0=data&0x0f;

        month1=(data>>4)&0x01;

        data=DS1302_Read(DS1302_DATE_Reg);//日

        date0=data&0x0f;

        date1=(data>>4)&0x03;

        data=DS1302_Read(DS1302_DAY_Reg);//周

        day=data&0x07;

        data=DS1302_Read(DS1302_HR_Reg);//時

        hour0=data&0x0f;

        hour1=(data>>4)&0x03;

        data=DS1302_Read(DS1302_MIN_Reg);//分

        minute0=data&0x0f;

        minute1=(data>>4)&0x07;

        data=DS1302_Read(DS1302_SEC_Reg);//秒

        second0=data&0x0f;

        second1=(data>>4)&0x07;

        }



        關鍵詞: AVRDS130

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 内江市| 大石桥市| 盘山县| 罗田县| 南安市| 武乡县| 冷水江市| 安达市| 吉林省| 平江县| 长寿区| 嘉荫县| 贵阳市| 海南省| 惠东县| 阿图什市| 沈阳市| 威信县| 寻甸| 澳门| 阜新市| 汽车| 临邑县| 柞水县| 顺义区| 阿拉尔市| 晋江市| 姜堰市| 涿州市| 古蔺县| 甘孜县| 五大连池市| 扎鲁特旗| 昌宁县| 柘城县| 通榆县| 林西县| 普定县| 华池县| 伊川县| 开江县|