注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
billbot501的个人空间 https://home.eeworld.com.cn/space-uid-274536.html [收藏] [复制] [分享] [RSS]
日志

分享ARM7学习经验—RTC实时时钟(八)

已有 2280 次阅读2011-4-12 08:44 |个人分类:LPC21XX

常用的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);

    }

显示的效果:

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章