機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
程序范例-DS1302 時(shí)鐘芯片的程序
程序范例-DS1302 時(shí)鐘芯片的程序
 更新時(shí)間:2010-1-28 13:03:32  點(diǎn)擊數(shù):0
【字體: 字體顏色
#include

sbit     T_CLK      = P2^7;   /*實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 */
sbit     T_IO       = P1^4;   /*實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 */
sbit     T_RST      = P1^5;   /*實(shí)時(shí)時(shí)鐘復(fù)位線引腳 */

sbit  ACC0 = ACC^0;
sbit  ACC7 = ACC^7;


void   RTInputByte(uchar);       /* 輸入 1Byte */
uchar  RTOutputByte(void);       /* 輸出?1Byte */
void   W1302(uchar, uchar);
uchar  R1302(uchar);
void   Set1302(uchar *);         /* 設(shè)置時(shí)間 */
void   Bcd2asc(uchar,uchar *);
void   Get1302(uchar curtime[]); /* 讀取1302當(dāng)前時(shí)間 */

/********************************************************************
函 數(shù) 名:RTInputByte()
功    能:實(shí)時(shí)時(shí)鐘寫入一字節(jié)
說(shuō)    明:往DS1302寫入1Byte數(shù)據(jù) (內(nèi)部函數(shù))
入口參數(shù):d 寫入的數(shù)據(jù)
返 回 值:無(wú)  
設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
void RTInputByte(uchar d)
{
    uchar i;
    ACC = d;
    for(i=8; i>0; i--)
    {
        T_IO = ACC0;           /*相當(dāng)于匯編中的 RRC */
        T_CLK = 1;
        T_CLK = 0;
        ACC = ACC >> 1;
    }
}

/********************************************************************
函 數(shù) 名:RTOutputByte()
功    能:實(shí)時(shí)時(shí)鐘讀取一字節(jié)
說(shuō)    明:從DS1302讀取1Byte數(shù)據(jù) (內(nèi)部函數(shù))
入口參數(shù):無(wú)  
返 回 值:ACC
設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
uchar RTOutputByte(void)
{
    uchar i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;         /*相當(dāng)于匯編中的 RRC */
        ACC7 = T_IO;
        T_CLK = 1;
        T_CLK = 0;
    }
    return(ACC);
}

/********************************************************************
函 數(shù) 名:W1302()
功    能:往DS1302寫入數(shù)據(jù)
說(shuō)    明:先寫地址,后寫命令/數(shù)據(jù) (內(nèi)部函數(shù))
調(diào)    用:RTInputByte() , RTOutputByte()
入口參數(shù):ucAddr: DS1302地址, ucData: 要寫的數(shù)據(jù)
返 回 值:無(wú)
設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
void W1302(uchar ucAddr, uchar ucDa)
{
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);       /* 地址,命令 */
    RTInputByte(ucDa);       /* 寫1Byte數(shù)據(jù)*/
    T_CLK = 1;
    T_RST = 0;
}

/********************************************************************
函 數(shù) 名:R1302()
功    能:讀取DS1302某地址的數(shù)據(jù)
說(shuō)    明:先寫地址,后讀命令/數(shù)據(jù) (內(nèi)部函數(shù))
調(diào)    用:RTInputByte() , RTOutputByte()
入口參數(shù):ucAddr: DS1302地址
返 回 值:ucData :讀取的數(shù)據(jù)
設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
uchar R1302(uchar ucAddr)
{
    uchar ucData;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);             /* 地址,命令 */
    ucData = RTOutputByte();         /* 讀1Byte數(shù)據(jù) */
    T_CLK = 1;
    T_RST = 0;
    return(ucData);
}

/********************************************************************
函 數(shù) 名:BurstW1302T()
功    能:往DS1302寫入時(shí)鐘數(shù)據(jù)(多字節(jié)方式)
說(shuō)    明:先寫地址,后寫命令/數(shù)據(jù)
調(diào)    用:RTInputByte()
入口參數(shù):pWClock: 時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年 控制
                            8Byte (BCD碼)1B 1B 1B 1B 1B  1B  1B 1B
返 回 值:無(wú)
設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
void BurstW1302T(uchar *pWClock)
{
    uchar i;
    W1302(0x8e,0x00);         /* 控制命令,WP=0,寫操作?*/
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(0xbe);        /* 0xbe:時(shí)鐘多字節(jié)寫命令 */
    for (i = 8; i>0; i--)     /*8Byte = 7Byte 時(shí)鐘數(shù)據(jù) + 1Byte 控制*/
    {
        RTInputByte(*pWClock); /* 寫1Byte數(shù)據(jù)*/
        pWClock++;
    }
    T_CLK = 1;
    T_RST = 0;
}

/********************************************************************
函 數(shù) 名:BurstR1302T()
功    能:讀取DS1302時(shí)鐘數(shù)據(jù)
說(shuō)    明:先寫地址/命令,后讀數(shù)據(jù)(時(shí)鐘多字節(jié)方式)
調(diào)    用:RTInputByte() , RTOutputByte()
入口參數(shù):pRClock: 讀取時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年
                               7Byte (BCD碼)1B 1B 1B 1B 1B  1B  1B
返 回 值:無(wú)
設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
void BurstR1302T(uchar *pRClock)
{
    uchar i;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(0xbf);             /* 0xbf:時(shí)鐘多字節(jié)讀命令 */
    for (i=8; i>0; i--)
    {
       *pRClock = RTOutputByte();   /* 讀1Byte數(shù)據(jù) */
       pRClock++;
    }
    T_CLK = 1;
    T_RST = 0;
}

/********************************************************************
函 數(shù) 名:BurstW1302R()
功    能:往DS1302寄存器數(shù)寫入數(shù)據(jù)(多字節(jié)方式)
說(shuō)    明:先寫地址,后寫數(shù)據(jù)(寄存器多字節(jié)方式)
調(diào)    用:RTInputByte()
入口參數(shù):pWReg: 寄存器數(shù)據(jù)地址
返 回 值:無(wú)
設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
void BurstW1302R(uchar *pWReg)
{
    uchar i;
    W1302(0x8e,0x00);         /* 控制命令,WP=0,寫操作*/
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(0xfe);         /* 0xbe:時(shí)鐘多字節(jié)寫命令 */
    for (i=31; i>0; i--)       /* 31Byte 寄存器數(shù)據(jù) */
    {
        RTInputByte(*pWReg);    /* 寫1Byte數(shù)據(jù)*/
        pWReg++;
    }
    T_CLK = 1;
    T_RST = 0;
}

/********************************************************************
函 數(shù) 名:BurstR1302R()
功    能:讀取DS1302寄存器數(shù)據(jù)
說(shuō)    明:先寫地址,后讀命令/數(shù)據(jù)(寄存器多字節(jié)方式)
調(diào)    用:RTInputByte() , RTOutputByte()
入口參數(shù):pRReg: 寄存器數(shù)據(jù)地址
返 回 值:無(wú)
設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
void BurstR1302R(uchar *pRReg)
{
    uchar i;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(0xff);            /* 0xff:時(shí)鐘多字節(jié)讀命令 */
    for (i=31; i>0; i--)          /*31Byte 寄存器數(shù)據(jù) */
    {
        *pRReg = RTOutputByte();  /* 讀1Byte數(shù)據(jù) */
        pRReg++;
    }
    T_CLK = 1;
    T_RST = 0;
}

/********************************************************************
函 數(shù) 名:Set1302()
功    能:設(shè)置初始時(shí)間
說(shuō)    明:先寫地址,后讀命令/數(shù)據(jù)(寄存器多字節(jié)方式)
調(diào)    用:W1302()
入口參數(shù):pClock: 設(shè)置時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年
                               7Byte (BCD碼)1B 1B 1B 1B 1B  1B  1B
返 回 值:無(wú)
設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
void Set1302(uchar *pClock)
{
    uchar i;
    uchar ucAddr = 0x80;
    W1302(0x8e,0x00);           /* 控制命令,WP=0,寫操作?*/
    for(i =7; i>0; i--)
    {
        W1302(ucAddr,*pClock);  /* 秒 分 時(shí) 日 月 星期 年 */
        pClock++;
        ucAddr +=2;
    }
    W1302(0x8e,0x80);           /* 控制命令,WP=1,寫保護(hù)?*/
}

/********************************************************************
函 數(shù) 名:Get1302()
功    能:讀取DS1302當(dāng)前時(shí)間
說(shuō)    明:
調(diào)    用:R1302()
入口參數(shù):ucCurtime: 保存當(dāng)前時(shí)間地址。當(dāng)前時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年
                                        7Byte (BCD碼)   1B 1B 1B 1B 1B  1B  1B
返 回 值:無(wú)
設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
void Get1302(uchar ucCurtime[])
{
    uchar i;
    uchar ucAddr = 0x81;
    for (i=0; i<7; i++)
    {
        ucCurtime = R1302(ucAddr);/*格式為: 秒 分 時(shí) 日 月 星期 年 */
        ucAddr += 2;
    }
}
/*//////////////////////////////////////////////////////////////////////*/
                 
  • 上一篇: 程序范例-適合AT24C01~AT24C256讀寫的通用程序
  • 下一篇: 沒有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1