• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 實時時鐘ISL1208原理與應用

    實時時鐘ISL1208原理與應用

    作者: 時間:2012-02-03 來源:網絡 收藏


    #include reg51.h>
    #define ISLwr 0xde /*寫辨識字節*/
    #define ISLrd 0xdf /*讀辨識字節*/
    /*--------ISL1208管腳配置---------*/
    sbit ISLSCL=P1^6; /*時鐘*/
    sbit ISLSDA=P1^7; /*數據*/
    void sdelay(); /*短延時*/
    void ISLstart(); /*I2C起始位*/
    void ISLstop(); /*I2C停止位*/
    void GetACK(); /*主機等待應答(GACK)*/
    void OutACK(); /*主機應答(OACK)*/
    /*--------讀/寫ISL1208函數--------*/
    unsigned char readISL1208();
    void writeISL1208(unsigned char datas);
    /*-----------讀/寫寄存器-------------*/
    void writeREG(unsigned char adds,unsigned char datas);
    unsigned char readREG(unsigned char adds);
    bit flag=0; /*啟動時鐘報警標志位*/
    unsigned char alarm=0; /*報警時間參數*/
    main()
    { ……………….. /*初始化*/
    for(;;) /*等待上位機發送命令*/
    { if(flag = =1)
    break; }
    /*寫狀態寄存器,寫RTC使能,報警自動復位*/
    writeREG(0x07,0x90);
    /*寫中斷寄存器,單事件報警,中斷使能*/
    writeREG(0x08,0x60);
    /*寫報警寄存器,報警使能*/
    writeREG(0x0c,0x81);
    /*寫時鐘寄存器,啟動RTC*/
    writeREG(0x00,0x00);
    for(;;); /*等待*/ }
    void writeREG(unsigned char adds,unsigned char datas)
    { ISLstart();
    writeISL1208(ISLwr);
    GetACK();
    writeISL1208(adds); /*寫地址*/
    GetACK();
    writeISL1208(datas); /*寫命令/數據*/
    GetACK();
    ISLstop(); }
    unsigned char readREG(unsigned char adds)
    { unsigned char reg;
    ISLstart();
    writeISL1208(ISLwr);
    GetACK();
    writeISL1208(adds); /*寫地址*/
    GetACK();
    ISLstart();
    writeISL1208(ISLrd);
    GetACK();
    reg=readISL1208(); /*讀就寄存器值*/
    OutACK();
    ISLstop();
    return (reg); }
    unsigned char readISL1208()
    { unsigned char i,k=0;
    ISLSDA=1;
    for(i=0;i8;i++)
    { ISLSCL=1;
    k=k*2;
    if(ISLSDA==1)
    k=k+1;
    ISLSCL=0; }
    return (k); }
    void writeISL1208(unsigned char datas)
    { unsigned char data i;
    ISLSCL=0;
    for(i=0;i8;i++)
    { ISLSDA=(bit)(datas0x80);
    datas=datas1;
    sdelay();
    ISLSCL=1;
    sdelay();
    ISLSCL=0; } }
    void int0() interrupt 0 using 1 /*外部中斷0處理函數*/
    { unsigned char temp=0,reg;
    /*單報警模式,5秒/次報警時間算法*/
    alarm=(alarm+5)%60;
    temp=alarm/10;
    temp=4;
    temp=(temp+alarm%10)|0x80;
    /*讀狀態寄存器清除報警標志*/
    reg=readREG(0x07);
    /*寫報警寄存器,確定下次報警時間*/
    writeREG(0x0c,temp);


    }

    4.3 后背電容器的使用

    具體電路結構如圖3。電容器的大小通過計算得出:若后背電容供電時間為兩個月且Vcc=5.0V,Vbat電壓從4.7V下降到1.8V(時鐘最低工作電壓)。假定二極管漏電流ILKG很小并可忽略。則電容充電/放電方程為:IBAT=CBAT*dV/dT,整理后得后備供電時間:dT=CBAT*dV/ IBAT。由于IBAT隨VBAT基本上呈線性變化,這樣IBAT可近似取兩點之間的平均值。IBAT與VBAT之間的典型線性關系方程式為:IBAT=1.031E-7* VBAT +1.036E-7 A

    若已給出兩點電壓,則平均電流IBATAVG=5.155E-8*(VBAT2+VBAT1)+1.036E-7 A

    結合以上方程整理后得后備供電時間TBACKUP=CBAT*(VBAT2 -VBAT1)/IBATAVG s

    將上述方程改寫為:CBAT=TBACKUP* IBATAVG /(VBAT2 -VBAT1)

    其中:TBACKUP=60天*86400秒/天=5.18E6 s,IBATAVG=4.387E -7 A,VBAT2=4.7V,VBAT1=1.8V.則CBAT=5.18E6* 4.387E-7 / 2.9 =0.784 F,如果要包括30%的容度,則最壞情況下的電容值應為CBAT=1.3*0.784=1.02 F.

    5. 小結

    ISL1208是一種小巧(SOIC封裝)、低功耗、低成本的實時時鐘芯片,集時鐘、日歷、RAM、電源故障檢測、報警功能由于一身,硬件結構簡單、編成簡便、精度高,在多功能電表、HVAC設備、音頻/視頻元件、尋呼機/PDA、家用電器及其它工業/醫療/汽車電子產品中都有十分廣泛的應用前景。

    參考文獻

    1. INTERSIL I2C Real Time Clock/Calendar ISL1208 Data Sheet. October 29,2004.

    2.徐愛鈞,彭秀華. 高級語言C51應用程序. 電子工業出版社,1998年6月.

    3.張道明,郝繼飛. 基于MATLAB的MCU串行通信. 信息技術與信息化,2004(5).

    分頻器相關文章:分頻器原理

    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 牡丹江市| 房山区| 德化县| 兰溪市| 遂昌县| 中方县| 宁城县| 沾益县| 都江堰市| 平定县| 和平区| 高邮市| 呼图壁县| 新宾| 铁岭市| 六枝特区| 油尖旺区| 福安市| 萨迦县| 应用必备| 习水县| 临泽县| 伊金霍洛旗| 四平市| 平顶山市| 四平市| 马边| 城市| 武强县| 曲阳县| 鹿泉市| 拉孜县| 盐池县| 阜阳市| 社会| 扶沟县| 商都县| 嘉禾县| 开江县| 海淀区| 左权县|