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...