Chinaunix首页 | 论坛 | 博客
  • 博客访问: 408721
  • 博文数量: 61
  • 博客积分: 2138
  • 博客等级: 大尉
  • 技术积分: 882
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-07 11:58
文章分类

全部博文(61)

文章存档

2012年(1)

2011年(8)

2010年(12)

2009年(6)

2008年(34)

我的朋友

分类:

2008-10-06 00:00:51

         RTCTimer和普通的Timer相比可以定时的范围更大 而且它可以当作一个实时钟使用
可以到 年,月,时,分,秒,但是注意它的精度 只能达到秒 也就是说它的精确度和Timer相比是很低的
但各有各的用吧  如果使用RTC则CPU就不能进入掉电模式 因为RTC没有独立的时钟源 它的频率是由Fplck分频得到的
   一下就说一下实时钟的使用设置
 
   RTC的初始化
/****************************************************************************
* 名称:RTCIni()
* 功能:初始化实时时钟。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  RTCIni(void)
 
   PREINT = Fpclk / 32768 - 1;   // 设置基准时钟分频器
   PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
  
   YEAR = 2004;           // 初始化年
   MONTH = 2;          // 初始化月
   DOM = 19;          // 初始化日
   HOUR = 8;
   MIN = 30;
   SEC = 0;      
   CIIR = 0x01;          // 设置秒值的增量产生一次中断
   CCR = 0x01;          // 启动RTC
}
 
 
struct DATE
{
     uint16      year;
     uint8       mon;
     uint8       day;
     uint8       dow;
};
struct TIME
{
     uint8       hour;
     uint8       min;
     uint8       sec;
};
/****************************************************************************
*  名称:GetTime()
*  功能:读取RTC 的时钟值。
*  入口参数:d            保存日期的DATE 结构变量的指针
*             t      保存时间的TIME 结构变量的指针
*  出口参数:无
****************************************************************************/
void  GetTime(struct DATE *d,   struct TIME *t)
{
     d->year = YEAR;
     d->mon = MONTH;
     d->day = DOM;
     t->hour = HOUR;
     t->min = MIN;
     t->sec = SEC;
}
     按读完整时间寄存器方式读取RTC 时钟程序如程序清单5.42 所示,其中DATA、TIME
结构与程序
               读取 RTC 时钟值—完整时间寄存器
/****************************************************************************
*  名称:GetTime()
*  功能:读取RTC 的时钟值。
*  入口参数:d       保存日期的DATE 结构变量的指针
*         t     保存时间的TIME 结构变量的指针
* 出口参数:无
****************************************************************************/
void GetTime(struct DATE *d, struct TIME *t)
{   uint32 times, dates;
    times = CTIME0;
    dates = CTIME1;
    d->year = (dates>>16)&0xFFF;   // 取得年的值
    d->mon = (dates>>8)&0x0F;      // 取得月的值
    d->day = dates&0x1F;           // 取得日的值
    t->hour = (times>>16)&0x1F;    // 取得时的值
    t->min = (times>>8)&0x3F;      // 取得分的值
    t->sec = times&0x3F;           // 取得秒的值
}
根据下面的这个表 看懂上面的程序应该就和简单了吧
CTIME0    功能     描述
  31:27    保留     保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
  26:24    星期     星期值    该值的范围为0~6。
  23:21    保留     保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
  20:16    小时     小时值  该值的范围为0~23。
  15:14    保留     保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
   13:8     分     分值   该值的范围为0~59。
   7:6     保留     保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
   5:0      秒     秒值   该值的范围为0~59。
 
 
在做时钟时 如何设置时间 
有了上面的程序这个问题似乎变得很简单了
只要在GetTime里面的到值之后 别的不用变 直接修改你要修改的那项的就可以了
比如把年设置为2010年 YEAR=2010 就可以了

 
阅读(7741) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~