MSP430单片机RTC-Real Time Clock
0 2023-01-28

RTC-Real Time Clock是430单片机的实时时钟模块,可以配置成实时时钟模式(万年历)或者一般目的的32位计数器模式,其中实时时钟模式提供了年月日、时分秒,可以选择BCD码或者二进制格式,并且具有可编程的闹钟。RTC模块支持中断。相关寄存器请参阅430系列单片机user's guide(我用的是5438A)。

1.计数器模式

实时时钟控制器寄存器1 RTCMODE位被重置时,计数器模式被选择,通过软件设置可以得到一个32位的计数器。从时钟模式切换到计数器模式是通过重置计数值:RTCNT1、RTCNT2、RTCNT3、RTCNT4 和 预换算计数器:RT0PS、RT1PS。

计数器的增量计数器来自ACLK、SMCLK或者分频之后的ACLK、SMCLK。分频系数来自分频除法器RT0PS、RT1PS。RT0PS的输出可以和RT1PS的输出级联构成32位计数器的时钟源。4个独立的8位计数器级联成为32位的计数器。这能提供计数时钟的8位、16位、24位、32位溢出中断。RTCTEV位选择各自的触发,通过设置RTCTEVIE位,一个RTCTEV能够触发一个中断。计数器RTCNT1到RTCNT4都可以单独访问,并可能被写入数值。

2.日历模式

当RTCMODE被置位时,万年历模式被选中。值得一提的是,万年历模式有能够计算能否被4整除的闰年算法,这个算法范围是1901年到2099年。

2.1预分频

分频器自动将RT0PS和RT1PS配置成为实时时钟提供一秒间隔的时钟,RT0PS源于ACLK,一般来说ACLK为32768Hz,是为了实时时钟的运行。从日历模式切换到计数器模式时,会将年月日、时分秒全部被置位1,RT0PS和RT1PS也会被置位。当RTCBCD=1时,日历寄存器会被选为BCD码,必须在时间设置之前选择好格式,改变RTCBCD的状态和切换到计数器模式影响一样。

2.2闹钟功能

用户可编程闹钟只有在日历模式下有效。每一个闹钟寄存器都包括都包括一个闹钟使能位,AE用来修改每一个闹钟寄存器,通过设置闹钟寄存器的AE位,可以产生多种闹钟。无效的闹钟不会通过硬件的检测,所以用户有必要检查所设闹钟是否正确。

2.3读写实时时钟寄存器

系统时钟和实时时钟的时钟源异步,因而读写实时时钟寄存器的时候要注意。此时实时时钟寄存器每秒钟更新一次,为了防止在更新的时候读取实时时钟数据而造成错误数据的读取,应该设置一个禁止进入的窗口,在禁止进入窗口和窗口外期间,只有RTCRDY复位有效才可以读取。在RTCRDY复位的时候,读取操作是错误的并且读取的时间数据也无效被忽略。

2.4时钟中断

由于我做的部分只涉及实时时钟显示,中断部分没有过多涉及,就不在讨论了。

RTC实时时钟显示部分程序结构如下:

//只是部分代码,远未完整,只是说明一下框架
void Init_RTC(void)//初始化RTC
{
  RTCCTL01 = RTCSSEL_0 + RTCMODE;          // 时钟模式,每分钟中断, BCD格式
  unsigned int hour,min,sec;
  
  hour=key[0]*10+key[1];
  min =key[2]*10+key[3];
  sec =key[4]*10+key[5];
  
  SetRTCYEAR(2012); 
  SetRTCMON(6);
  SetRTCDAY(1);
  SetRTCHOUR(hour);  //按键设定时间
  SetRTCMIN(min);
  SetRTCSEC(sec);
}

  while(key_C)   //扫描按键
  {
    
    if(key_stime_ok)
    {
      char str[4];
      key_stime_ok=0;
      key_temp=Read_Key();//读取按键数值
      if(key_temp != No_key)
      {
        key[key_C-1]=key_temp;
        sprintf(str,"%d",key_temp);
        PutStringEN24(60,k,str);
        k-=16;
        key_C--;
      }
    }
  }

void Show_Clock(void)
{
  unsigned int Hour ,Minute,Second;
  char p1[10],p2[10],p3[10];
  for(;RTCCTL01&RTCRDY;)        _NOP(); // 等待RTC有效
  for(;RTCCTL01&RTCRDY;)        _NOP(); 

   Hour = GetRTCHOUR();
   Minute = GetRTCMIN();
   Second = GetRTCSEC();
   
   sprintf(p1,"%02d",Hour);
   sprintf(p2,"%02d",Minute);
   sprintf(p3,"%02d",Second);
   
   PutStringEN24(1,2,p1); //用的TFT屏显示时钟
   PutStringEN24(1,34,":");
   PutStringEN24(1,50,p2);
   PutStringEN24(1,82,":");
   PutStringEN24(1,98,p3);
} 
声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • PS/2接口协议的的嵌入式软件编程及应用分析

    1、引言随着计算机工业的发展,作为计算机最常用输入设备的键盘也日新月异。1981年IBM推出了IBMpc/XT键盘及其接口标准。该标准定义了83键,采用5脚DI

    6小时前
  • 基于通用型单片机和以太网控制器实现嵌入式以太网接口的设计

    由于嵌入式技术和网络技术的迅速发展,以太网接口在嵌入式系统中的应用越来越广泛,以太网接口不仅通信速度快,传输可靠,使用和配置方便,而且不受地域限制(广域网和局域

    6小时前
  • ARM TrustZone的简介概念

    TrustZone是ARM对ARM6的扩展,其实只是增加了一条指令,一个配置状态位,以及一个新的有别于核心态和用户态的安全态。ARM并没有把TrustZone设

    12小时前
  • 主流ARM的分类介绍

    ARMCPU现在分为3种型号:A系列:主要是用在智能手机上,代表的系统是Andrios和IOS。R系列:和M系列一样,更注重实时功能,军工和航天的实时嵌入式设备

    12小时前
  • 如何用51单片机进行遥控解码

    遥控器使用方便,功能多.目前已广泛应用在电视机、VCD、DVD、空调等各种家用电器中,且价格便宜,市场上非常容易买到。如果能将遥控器上许多的按键解码出来.用作单

    03-28
  • Cortex-M3寄存器的11个知识点

    1.寄存器CM3拥有R0~R15通用寄存器和一些特殊功能寄存器R0~R12这些通用寄存器,复位初始值都是不可预料的2.CM3有R0到R15的通用寄存器组注:绝大

    03-28
  • MM32F0/L0/W0系列MCU之EXTI

    一、MM32嵌套向量中断控制器本文针对MM32F0/L0/W0系列MCU产品。特征 ○中断都可屏蔽(除了NMI) ○16个可编程的优先等级(使用了4位中断优先级

    03-28
  • 用库函数的方法来设置STM32 DAC

    STM32的DAC模块(数字/模拟转换模块)是12位数字输入,电压输出型的DAC。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在1

    03-28
  • PIC单片机设计引脚中断程序

    所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是

    03-28
  • EEPROM和FLASH的区别

    1、EEPROM介绍ElectricallyErasableProgrammableReadOnlyMemory电气可拭除可编程只读存储器发展过程:ROM–&g

    03-28
  • stm32之CMSIS标准、库目录、GPIO

    一、CMSIS标准ST公司的stm32采用的是cortex-m3内核,内核是整个微处理器的CPU。该内核是ARM公司设计的一种处理器体系架构。内核与外设的关系就

    03-28
  • uCOS-II下编写中断服务程序

    在uCOS-II实时内核下,对外设的访问接口没有统一完善,有很多工作需要用户自己去完成。串口通信是单片机测控系统的重要组成部分,异步串行口是一个比较简单又很具代

    03-28
下载排行榜
更多
广告