[MCU] LPC210X的实时时钟操作程序

[复制链接]
720|1
 楼主| 李香兰 发表于 2015-8-30 10:13 | 显示全部楼层 |阅读模式
  1. /********************初始化实时时钟*******************************************/
  2. void  RTCInit(void)
  3. {
  4.   YEAR = 2011;        // 初化年
  5.   MONTH = 12;        // 初化月
  6.   DOM = 6;        // 初化日
  7.   HOUR = 12;
  8.   MIN = 59;
  9.   SEC = 50;
  10. //如果用到星期,则在这里正确初始化:DOW =(值为0~6)

  11.   CIIR = 0x01;        // 设置秒值的增量产生一次中断
  12.   CCR = 0x11;        // 使用独立振荡器,启动RTC. (0x01,0x10,0x13都不显示)
  13. }

  14. void  SendTimeRtc(void)//取星期不对
  15. {
  16.   U32  times;
  17.   U8  bak;
  18.   times = CTIME0;   // 读取完整时钟寄存器0

  19. /*
  20.   bak = (times>>24)&0x07;  // 取得星期的值
  21.   Send_BUF[2] = bak/10+'0';
  22.   Send_BUF[3] = bak%10+'0';  
  23. // Send_BUF[4] = ':';

  24.   DataDisp(bak/10,2,0);                 //显示星期  为什么取的星期不对呢?
  25.   Delay(4);
  26.   DataDisp(bak%10,3,0);
  27.   Delay(2);*/
  28.   bak = (times>>8)&0x3F;  // 取得分的值
  29.   Send_BUF[0] = bak/10+'0';
  30.   Send_BUF[1] = bak%10+'0';  
  31.   Send_BUF[2] = ':';

  32.   DataDisp(bak/10,0,0);                 //显示分钟
  33.   Delay(4);
  34.   DataDisp(bak%10,1,1);
  35.   Delay(2);

  36.   bak = times&0x3F;   // 取得秒的值
  37.   Send_BUF[3] = bak/10+'0';
  38.   Send_BUF[4] = bak%10+'0';  
  39.   Send_BUF[5] = '\n';

  40.   DataDisp(bak/10,2,0);                 //显示分钟
  41.   Delay(4);
  42.   DataDisp(bak%10,3,0);
  43.   Delay(2);
  44. }

操作了半天,取的星期老是不对。最后搞明白了,原来在RTCInit()中没有初始化时钟。
切记:如果要取星期,对星期的寄存器要初始化,然后ARM会自动计算某天的星期数据。

小狗爱吃骨头 发表于 2015-8-31 20:50 | 显示全部楼层
RTC用的是片内的还是外接的呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

248

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部