新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機讀寫DS1302

        PIC單片機讀寫DS1302

        作者: 時間:2018-08-01 來源:網絡 收藏

        本文介紹了讀寫DS1302程序

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

        #i nclude

        #define uchar unsigned char

        #define T_CLK RC3

        #define T_IO RC4

        #define T_RST RC5

        unsigned char TDATA;

        int js;

        int Order[3];

        bit sci_sign=0;

        int buf[2];

        void Get1302(uchar *);

        void RTInputByte(uchar);

        uchar RTOutputByte(void) ;

        void W1302(uchar , uchar );

        uchar R1302(uchar);

        void Set1302(uchar*);

        void sciint(void);

        void sci(int);

        void int_to_asc(int);

        //*SCI部件接收初始化子程序*/

        void sciint()

        {

        TRISC7= 1 ;// |= 0xc0;//設置為輸入

        TRISC6= 0 ;

        BRGH = 1 ; //高波特率選擇位

        SPBRG = 25 ; //((20000000/9600)/16)-1

        SYNC = 0 ;//異步

        SPEN = 1 ;//串口使能

        RCIE = 1 ;// USART數據接收中斷使能位

        TXIE = 0 ;//USART數據發送中斷使能位

        TXEN = 1 ;//發送

        CREN = 1 ;//連續接收使能位

        RCIF=0;

        PEIE= 1 ; //開中斷

        GIE=1;

        }

        void sci(int tran)

        {

        while(!TXIF);

        TXREG=tran; //*發出一個字符*/

        TXIF=0;

        }

        void RTInputByte(uchar d)

        {

        uchar i;

        TDATA = d;

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

        {

        T_IO =(bit)(TDATA0X80); //*相當于匯編中的 RRC

        T_CLK = 1;

        T_CLK = 0;

        TDATA = TDATA >> 1;

        }

        }

        uchar RTOutputByte(void)

        {

        uchar i;

        TRISC4=1;

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

        {

        TDATA = TDATA >>1;

        if(T_IO)

        {

        TDATA=0X80;

        }

        T_CLK = 1;

        T_CLK = 0;

        }

        TRISC4=0;

        return(TDATA);

        }

        void W1302(uchar ucAddr, uchar ucDa)

        {

        T_RST = 0;

        T_CLK = 0;

        T_RST = 1;

        RTInputByte(ucAddr); //* 地址,命令

        RTInputByte(ucDa); //* 寫1Byte數據

        T_CLK = 1;

        T_RST = 0;

        }

        uchar R1302(uchar ucAddr)

        {

        uchar ucData;

        T_RST = 0;

        T_CLK = 0;

        T_RST = 1;

        RTInputByte(ucAddr); //* 地址,命令

        ucData = RTOutputByte(); //* 讀1Byte數據

        T_CLK = 1;

        T_RST = 0;

        return(ucData);

        }

        void Set1302(uchar *pClock)

        {

        uchar i;

        uchar ucAddr = 0x80;

        W1302(0x8e,0x00); //* 控制命令,WP=0,寫操作?

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

        {

        W1302(ucAddr,*pClock); //* 秒 分 時 日 月 星期 年

        pClock++;

        ucAddr +=2;

        }

        W1302(0x8e,0x80); //* 控制命令,WP=1,寫保護

        }

        void Get1302(uchar *ucCurtime)

        {

        uchar i;

        uchar ucAddr = 0x81;

        for (i=0; i7; i++)

        {

        ucCurtime[i] = R1302(ucAddr);//*格式為: 秒 分 時 日 月 星期 年

        ucAddr += 2;

        }

        }

        void interrupt SCI_Admit(void)

        {

        if(RCIFRCIE) //判斷是否是接收中斷

        {

        if(Order[0]=='$')

        {

        js++;

        Order[js]=RCREG;

        if(js==2)

        sci_sign=1;

        }

        else

        {

        Order[0]=RCREG;

        sci_sign=0;

        js=0;

        }

        }

        }

        void int_to_asc(int dat)

        {

        buf[0]=(dat/10)+'0';

        buf[1]=(dat%10)+'0';

        }

        void main()

        {

        uchar str[]={30,10,9,20,8,1,7};

        uchar dtime[]={0,0,0,0,0,0,0};

        TRISC3=1;

        TRISC4=1;

        TRISC5=1;

        sciint();

        ei();

        // Get1302(st);

        // sci('E');

        while(1)

        {

        if(sci_sign)

        {

        Get1302(dtime);

        if(Order[1]=='R'Order[2]=='T')

        {

        sci('Y');

        int_to_asc(dtime[6]);

        sci(buf[0]);

        sci(buf[1]);

        sci('M');

        int_to_asc(dtime[4]);

        sci(buf[0]);

        sci(buf[1]);

        sci('T');

        int_to_asc(dtime[3]);

        sci(buf[0]);

        sci(buf[1]);

        sci('h');

        int_to_asc(dtime[2]);

        sci(buf[0]);

        sci(buf[1]);

        sci('m');

        int_to_asc(dtime[1]);

        sci(buf[0]);

        sci(buf[1]);

        sci('s');

        int_to_asc(dtime[0]);

        sci(buf[0]);

        sci(buf[1]);

        sci('W');

        int_to_asc(dtime[5]);

        sci(buf[0]);

        sci(buf[1]);

        sci(' ');

        }

        else if(Order[1]=='R'Order[2]=='S')

        {

        Set1302(str);

        }

        Order[0]=0;

        Order[1]=0;

        Order[2]=0;

        sci_sign=0;

        }

        }

        }



        關鍵詞: PIC單片機

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 那曲县| 赣州市| 南昌县| 大悟县| 惠水县| 鱼台县| 维西| 宁津县| 资阳市| 怀来县| 上饶县| 叙永县| 北海市| 瑞丽市| 定边县| 且末县| 嘉义县| 贡觉县| 当雄县| 水城县| 扶沟县| 鹿邑县| 来安县| 张家川| 当雄县| 京山县| 育儿| 筠连县| 和平县| 正定县| 阳东县| 麻阳| 禹州市| 皋兰县| 高邑县| 乌拉特前旗| 富锦市| 兖州市| 龙南县| 贵溪市| 大悟县|