新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > AVR單片機的DS1302操作程序

        AVR單片機的DS1302操作程序

        作者: 時間:2011-02-18 來源:網(wǎng)絡(luò) 收藏

        變成浪子
        //mega16 7.3728MHz石英晶體 iccavr6.31a
        //相關(guān)定義:
        #define uint unsigned int
        #define uchar unsigned char
        #define DS1302_RST 0 //pc0
        #define DS1302_SDA 1 //pc1
        #define DS1302_SCLK 6 //pc6
        //ds1302相關(guān)
        //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//DS1302的SDA置為輸出腳
        #define Set_DS1302_DDRSDA() DDRC|=1//DS1302的SDA置為輸入腳
        #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(reg0x01) 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(data0x01) 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(reg0x01) 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(1Set_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);//關(guān)閉寫保護
        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=data0x0f;
        year1=data>>4;
        data=DS1302_Read(DS1302_MONTH_Reg);//月
        month0=data0x0f;
        month1=(data>>4)0x01;
        data=DS1302_Read(DS1302_DATE_Reg);//日
        date0=data0x0f;
        date1=(data>>4)0x03;
        data=DS1302_Read(DS1302_DAY_Reg);//周
        day=data0x07;
        data=DS1302_Read(DS1302_HR_Reg);//時
        hour0=data0x0f;
        hour1=(data>>4)0x03;
        data=DS1302_Read(DS1302_MIN_Reg);//分
        minute0=data0x0f;
        minute1=(data>>4)0x07;
        data=DS1302_Read(DS1302_SEC_Reg);//秒
        second0=data0x0f;
        second1=(data>>4)0x07;
        }



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 莱州市| 盘锦市| 霍城县| 平南县| 天气| 肇庆市| 通许县| 蒙自县| 蕉岭县| 白玉县| 枣阳市| 大英县| 西畴县| 鲜城| 嘉荫县| 莱阳市| 鹤山市| 措美县| 临桂县| 杨浦区| 闸北区| 体育| 合作市| 博白县| 闵行区| 班玛县| 东乡县| 高雄市| 临颍县| 彩票| 栾川县| 霍城县| 瓦房店市| 大邑县| 清河县| 罗源县| 南康市| 洛南县| 宝鸡市| 崇信县| 东乌珠穆沁旗|