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 就可以了
阅读(7822) | 评论(0) | 转发(0) |