|
常用的RTC芯片有DS1302使用的I2C总线,LPC2148内部集成RTC功能,无需外部连线,更加稳定可靠.只需外接32768HZ的晶振,选择这个数值晶振的原因是,它刚好是一个15位数据,下面是这个功能的框图
实现的方法有两种,一是:时钟的选择能够使用外设时钟VPB分频得到32K时钟,代码如下:
/* RTC初始化 */
PREINT = Fpclk / 6554 - 1; // 设置基准时钟分频器
PREFRAC = Fpclk - (Fpclk / 6554) * 6554;
YEAR = 2011; // 初化年
MONTH = 4; // 初化月
DOM = 7; // 初化日
HOUR=10;
MIN=10;
SEC=0;
CIIR = 0x01; // 设置秒值的增量产生一次中断
CCR = 0x01; // 启动RTC
获取时钟采取查询的方法:
unsigned char hour,min,sec;
unsigned long times;
while(0==(ILR&0x01)); //等待RTC增量中断标志
ILR=0x01; //清除中断标志
times=CTIME0;
hour=(times>>16)&0x1f;
min=(times>>8)&0x3f;
sec=times&0x3f;
time[0]=hour/10+0x30;
time[1]=hour%10+0x30;
time[2]='-';
time[3]=min/10+0x30;
time[4]=min%10+0x30;
time[5]='-';
time[6]=sec/10+0x30;
time[7]=sec%10+0x30;
第二种方法是选择外部低速晶振,只需按照下面的方法设置就可以
程序当中使用到秒中断来延时:
while(0==(ILR&0x01)); //等待RTC增量中断标志
ILR=0x01; //清除中断标志
也可以采用查询秒的值是否相等的方法:
second = TM.second;
while(TM.second == second) //等待
{
RTC_GetTime(&TM);
}
显示的效果: