ARM7單片機(jī)(學(xué)習(xí)ing)—(五)、實(shí)時(shí)時(shí)鐘(RTC)—02
掃描二維碼
隨時(shí)隨地手機(jī)看文章
五、實(shí)時(shí)時(shí)鐘(RTC)
五—(02)、1s定時(shí)控制(通過(guò)查詢法實(shí)現(xiàn)~~)
注意:后面的程序有操作步驟~~
~~
然后就是程序了:
MDK5_1.c
//------------------------------------------------------------------------------
//1s定時(shí)控制(查詢方式~~)
//RTC我也不想有太多的介紹~~不管是查詢方式,還是中斷方式~~其實(shí)都是一樣的~~
//現(xiàn)在我也是只想結(jié)束ARM7的學(xué)習(xí)~~
//注意:
//預(yù)分頻寄存器的計(jì)數(shù)如下:
//PREINT=int(Fpclk/32768)-1;預(yù)分頻整書(shū)寄存器
//PREFPAC=Fpclk-((PREINT+1)*32768);預(yù)分頻小數(shù)寄存器
//RTC的基本操作方式:
//1)設(shè)置RTC預(yù)分頻器(PREINT、PREFRAC);
//2)初始化RTC時(shí)鐘源,如:YEAR、MONTH、DOM等~~
//3)報(bào)警終端設(shè)置,如CIIR、AMR等~~
//4)啟動(dòng)RTC,既CCR等的CLKEN位置位
//5)讀取完整時(shí)間寄存器值或者等待中斷
//------------------------------------------------------------------------------
//利用RTC的增量功能進(jìn)行1s的定時(shí),當(dāng)定時(shí)時(shí)間到,取反LED控制~~
//------------------------------------------------------------------------------
#include"lpc210x.h"
#include"bit.h"
#include"macroandconst.h"
//------------------------------------------------------------------------------
#define RTCCIF0//中斷位置寄存器ILR[0];為1時(shí)計(jì)數(shù)器增量中斷模塊產(chǎn)生中斷。向該位寫(xiě)入1來(lái)清除計(jì)數(shù)器增量中斷
#define LED 10//P0.10口為L(zhǎng)ED控制口,高電平點(diǎn)亮
#define Fpclk 15000000L//定義Fpclk的值,用于設(shè)置串口波特率
//------------------------------------------------------------------------------
//rtc_init()
//RTC初始化函數(shù)
void rtc_init()
{
PREINT=Fpclk/32768-1;//設(shè)置預(yù)分頻器
PREFRAC=Fpclk-(PREINT+1)*32768;
YEAR=2012;//初始化年
MONTH=2;//初始化月
DOM=3;//初始化日
CIIR=0x01;//設(shè)置秒針的增量產(chǎn)生一次中斷
CCR=0x01;//啟動(dòng)RTC
}
//------------------------------------------------------------------------------
//main
int main()
{
PINSEL0=0x00000000;//引腳連接設(shè)置
PINSEL1=0x00000000;
SET_BIT(IODIR,LED);//設(shè)置LED口為輸出
rtc_init();
while(1)
{
SET_BIT(IOSET,LED);//點(diǎn)亮LED
while(GET_BIT(ILR,RTCCIF)==0);//等待RTC增量中斷標(biāo)志
SET_BIT(ILR,RTCCIF);//清除中斷標(biāo)志
SET_BIT(IOCLR,LED);//熄滅LED
while(GET_BIT(ILR,RTCCIF)==0);//等待RTC增量中斷標(biāo)志
SET_BIT(ILR,RTCCIF);//清除中斷標(biāo)志
}
}