PIC32 RTCC實時時鐘和日曆

2021-08-01 22:32:50 字數 3837 閱讀 8330

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);

鬧鈴匹配週期 

注意1rtccsetalarmrpt(rtcc_rpt_ten_sec); 

//10s一次匹配

鬧鈴重複次數

rtccsetalarmrptcount(5); 

//每發生一次鬧鐘時間遞減1即重複5+1次

是否需要無限重複鬧鈴

rtccchimeenable(); 

//chime為1時rptcount能從0回到ff無限重複,反之

鬧鐘使能

rtccalarmenable();

三.中斷模組設定

設定中斷優先順序,使能事件中斷,系統中斷使能(詳見中斷)

注  1:重複週期rpt即計時器與鬧鐘暫存器相匹配的週期。

若在匹配週期內有鬧鐘時間,則中斷訊號在此發出。隨後以此鬧鐘時間為基準延後乙個匹配週期後

發出中斷訊號。

若在匹配週期內無鬧鐘時間,中斷都將在匹配週期結束時發出,重複上面的情況。

例如  現在時間2023年7月19日星期六,0:05:30 

設定鬧鐘時間2023年7月19日,0:05:59

設定半秒:則每半秒都會產生中斷  

設定10秒:前兩個中斷在40s,50s,然後59s,9s...

設定1分:中斷發生在05:59,06:59... 

設定10分:中斷在05:59,15:59…

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();

裝載請說明出處 

輸出比較(pwm)由於這是本次暑假作業,等作業驗收後再發,學習了pwm就可以完成電子琴的發音了。

CMOS 記憶體和實時時鐘

第15章 cmos 記憶體和實時時鐘 筆記 簡介 系統帶有乙個小型的cmos記憶體,其中儲存著系統斷電時的資料。該記憶體用來記錄軟盤的型別和數目 硬碟大小資訊 記憶體大小以及其他重要的系統資料。cmos晶元還含有乙個實時時鐘 rtc 用來保持當前時間。關掉電源時,rtc由計算機內部的電池供電。電池保...

STM32之實時時鐘和備份暫存器介紹

在本文中主要講述rtc暫存器的配置問題。在配置rtc暫存器的時候必須配置rtc crl暫存器中的cnf位,使得rtc進入配置模式之後,才能寫入rtc prl,rtc cnt,ptr alr暫存器。另外很重要的是,在對rtc任何暫存器的寫操作,都必須在前一次寫操作結束後進行,可以通過查詢rtc cr暫...

STM32F10x晶元RTC實時時鐘

系統復位後,對後備暫存器和 rtc的訪問被禁止,這是為了防止對後備區域 bkp 的意外寫操作。執行以下操作將使能對後備暫存器和 rtc的訪問 l設定暫存器 rcc apb1enr 的pwren 和bkpen 位,使能電源和後備介面時鐘 呼叫 rcc apb1periphclockcmd rcc ap...