<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        PIC32 RTCC實時時鐘和日歷

        作者:未知   來源:手上青春飛翔的博客   點擊數:  更新時間:2014年08月08日   【字體:

         RTCC實時時間和日歷

         
        結構體定義:
         
        rtccDate dt;//日期結構體dt.year年,dt.mon月,dt.mday日,dt.wday星期幾,dt.l整體
         
        rtccTime tm;//時間結構體tm.hour時,tm.min分,tm.sec秒,tm.l整體
         
        rtccDate adt;//鬧鐘時間結構體定義
         
        rtccTime atm;
         
        一.RTCC模塊設置
         
        初始化RTCC
         
        RtccInit();           //禁止中斷,清除中斷標志,關閉鬧鐘Alarm,鎖寫,開啟RTCC ON
         
        等待穩定開啟RTCC
         
        While(RtccGetClkStat()!=RTCC_CLK_ON);
         
        寫入RTCC初始值
         
        RtccOpen(tm.l,da.l,Cal);              //寫入初始時間,設置校準偏移cal
         
        校準值CAL
         
        CAL=( 理想頻率(32,758)– 實際頻率) * 60 = 每分鐘誤差時鐘數
         
        RtccSetCalibration(10);//每分鐘加10時鐘數
         
         
         
        二.鬧鐘模塊設置
         
        鬧鐘時間設置
         
        RtccSetAlarmTimeDate(atm.l,adt.l);
         
        鬧鈴匹配周期        注意1
         
        RtccSetAlarmRpt(RTCC_RPT_TEN_SEC);   //10s一次匹配
         
        鬧鈴重復次數
         
        RtccSetAlarmRptCount(5);           //每發生一次鬧鐘時間遞減1即重復5+1次
         
        是否需要無限重復鬧鈴
         
        RtccChimeEnable();           //CHIME為1時rptcount能從0回到ff無限重復,反之
         
        鬧鐘使能
         
        RtccAlarmEnable();
         
         
         
        三.中斷模塊設置
         
        設置中斷優先級,使能事件中斷,系統中斷使能(詳見中斷)
         
        注  1:重復周期RPT即計時器與鬧鐘寄存器相匹配的周期。
         
           若在匹配周期內有鬧鐘時間,則中斷信號在此發出。隨后以此鬧鐘時間為基準延后一個匹配周期后
         
        發出中斷信號。
         
        若在匹配周期內無鬧鐘時間,中斷都將在匹配周期結束時發出,重復上面的情況。
         
                 例如  現在時間2014年7月19日星期六,0:05:30   
         
        設置鬧鐘時間2014年7月19日,0:05:59
         
        設置半秒:則每半秒都會產生中斷     設置10秒:前兩個中斷在40s,50s,然后59s,9s...
         
        設置1分:中斷發生在05:59,06:59...       設置10分:中斷在05:59,15:59…
         
         
         
        2:RTCC 器件可以產生一些中斷,反映在RTCC 定時器與鬧鐘寄存器匹配時發生的鬧鐘事件。模塊會根據AMASK位設置,與時間/ 日期寄存器的無掩碼部分進行匹配。每個鬧鐘事件發生時,都能產生中斷.
         
        3:ARPT<7:0>:鬧鐘重復計數器值位每當發生鬧鐘事件時計數器就遞減1。要提供無限重復鬧鐘,可以使用CHIME(RTCALRM<14>)位使能響鈴功能。當CHIME = 1 時,在執行最后一次重復之后,ARPT將從0x00計滿返回至0xFF,并繼續無限計數,而不是禁止鬧鐘。
         
        CHIME = 1,計數器能從00返回到FF,即可連續響鈴。
         
        CHIME = 0,計數器不能從00返回到FF,響鈴ARPT+1次。
         
         
         
        RtccSetAlarmRpt(rtccRepeat rpt);// 設定鬧鐘重復周期 
         
                   
         
          RTCC_RPT_HALF_SEC,          // repeat alarm every half second
         
        RTCC_RPT_SEC,                      // repeat alarm every second
         
        RTCC_RPT_TEN_SEC,            // repeat alarm every ten seconds
         
        RTCC_RPT_MIN,                    // repeat alarm every minute
         
        RTCC_RPT_TEN_MIN,     // repeat alarm every ten minutes
         
        RTCC_RPT_HOUR,                 // repeat alarm every hour
         
        RTCC_RPT_DAY,                // repeat alarm every day
         
        RTCC_RPT_WEEK,                 // repeat alarm every week
         
        RTCC_RPT_MON,                  // repeat alarm every month
         
        RTCC_RPT_YEAR         // repeat alarm every year (except when configured for Feb 29th.)
         
         
         
        例如
         
        RTCC鬧鐘中斷點亮led
         
        #include
         
        #pragma config JTAGEN = OFF             // JTAG Enable (JTAG Disabled)
         
        #pragma config FWDTEN = OFF             // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls))
         
        rtccDate dt;//日期結構體dt.year年,dt.mon月,dt.mday日,dt.wday星期幾,dt.l整體
         
        rtccTime tm;//時間結構體tm.hour時,tm.min分,tm.sec秒,tm.l整體
         
        rtccDate adt;//鬧鐘時間結構體定義
         
        rtccTime atm;
         
        int Alarmflag=0;
         
        int main()
         
        {
         
        PORTSetPinsDigitalOut(IOPORT_B,BIT_9);
         
        PORTSetBits(IOPORT_B,BIT_9);
         
        RtccInit();//實時時間日歷初始化,RTCC ON
         
        while(RtccGetClkStat()!=RTCC_CLK_ON);//等待振蕩器穩定
         
        tm.hour=0x22;
         
        tm.min=0x40;
         
        tm.sec=0x30;
         
        dt.year=0x14;
         
        dt.mon=0x07;
         
        dt.mday=0x17;
         
        dt.wday=0x04;
         
        RtccOpen(tm.l,dt.l,0);//初時間22:40:30,14年7月17日星期4,校準偏移0
         
        RtccGetTimeDate(&tm,&dt);//獲得實時時間和日期
         
        atm.l=tm.l;
         
        adt.l=dt.l;
         
        atm.sec=tm.sec+0x20;//延后20秒
         
        RtccChimeEnable();//無限重復鬧鈴允許
         
        RtccSetAlarmRptCount(0);//鬧鈴重復次數0+1,最高256,CHIME=1時次數無限
         
        RtccSetAlarmRpt(RTCC_RPT_MIN);//鬧鐘匹配周期1min  注意:1
         
        RtccSetAlarmTimeDate(atm.l,adt.l);//設置鬧鐘時間
         
        RtccAlarmEnable();//鬧鐘使能
         
        mRTCCSetIntPriority(2);
         
        mRTCCClearIntFlag();
         
        mRTCCIntEnable(1);
         
        INTEnableSystemMultiVectoredInt();
         
        while(1)
         
        {
         
        if(Alarmflag==1)
         
        {
         
        RtccSetAlarmRpt(RTCC_RPT_HALF_SEC);//若觸發鬧鐘則每半秒產生一中斷
         
        break;//跳出while
         
        }
         
        }
         
        void __ISR(_RTCC_VECTOR,ipl2) hander(void)
         
        {
         
         PORTBINV=(1<<9);
         
         Alarmflag=1;
         
         mRTCCClearIntFlag();
         
        }
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮