当前位置:首页 > 单片机 > 单片机
[导读]  RTC-Real Time Clock是430单片机的实时时钟模块,可以配置成实时时钟模式(万年历)或者一般目的的32位计数器模式,其中实时时钟模式提供了年月日、时分秒,可以选择BCD码或者二进制格式,并且具有可编程的闹钟。

  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实时时钟显示部分程序结构如下:


1 //只是部分代码,远未完整,只是说明一下框架

2 void Init_RTC(void)//初始化RTC

3 {

4 RTCCTL01 = RTCSSEL_0 + RTCMODE; // 时钟模式,每分钟中断, BCD格式

5 unsigned int hour,min,sec;

6

7 hour=key[0]*10+key[1];

8 min =key[2]*10+key[3];

9 sec =key[4]*10+key[5];

10

11 SetRTCYEAR(2012);

12 SetRTCMON(6);

13 SetRTCDAY(1);

14 SetRTCHOUR(hour); //按键设定时间

15 SetRTCMIN(min);

16 SetRTCSEC(sec);

17 }

18

19 while(key_C) //扫描按键

20 {

21

22 if(key_stime_ok)

23 {

24 char str[4];

25 key_stime_ok=0;

26 key_temp=Read_Key();//读取按键数值

27 if(key_temp != No_key)

28 {

29 key[key_C-1]=key_temp;

30 sprintf(str,"%d",key_temp);

31 PutStringEN24(60,k,str);

32 k-=16;

33 key_C--;

34 }

35 }

36 }

37

38 void Show_Clock(void)

39 {

40 unsigned int Hour ,Minute,Second;

41 char p1[10],p2[10],p3[10];

42 for(;RTCCTL01&RTCRDY;) _NOP(); // 等待RTC有效

43 for(;RTCCTL01&RTCRDY;) _NOP();

44

45 Hour = GetRTCHOUR();

46 Minute = GetRTCMIN();

47 Second = GetRTCSEC();

48

49 sprintf(p1,"%02d",Hour);

50 sprintf(p2,"%02d",Minute);

51 sprintf(p3,"%02d",Second);

52

53 PutStringEN24(1,2,p1); //用的TFT屏显示时钟

54 PutStringEN24(1,34,":");

55 PutStringEN24(1,50,p2);

56 PutStringEN24(1,82,":");

57 PutStringEN24(1,98,p3);

58 }


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Holtek隆重推出全新一代32-bit Arm® Cortex®-M0+ 5V CAN MCU - HT32F53231/HT32F53241/HT32F53242/HT32F53252。这一系列单片机带有来自Bosc...

关键字: MCU 工业自动化 单片机

Holtek精益求精,宣布推出全新5V宽电压Arm® Cortex®-M0+ 32-bit MCU系列HT32F50431/HT32F50441/HT32F50442/HT32F50452。此系列MCU经多方位升级能满...

关键字: 单片机 智能家居 工业控制

单片机小精灵是一款针对单片机开发者的辅助工具,它集成了代码编辑、编译、调试等多项功能,旨在帮助开发者更加高效地进行单片机项目的开发。本文将详细介绍单片机小精灵的使用方法,帮助读者快速掌握这款工具,提高开发效率。

关键字: 单片机 代码编辑 辅助工具

单片机和PLC将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对二者的相关情况以及信息有所认识和了解,详细内容如下。

关键字: PLC 单片机

在这篇文章中,小编将对单片机的相关内容和情况加以介绍以帮助大家增进对单片机的了解程度,和小编一起来阅读以下内容吧。

关键字: 单片机 芯片 集成电路

一直以来,单片机都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来单片机的相关介绍,详细内容请看下文。

关键字: 单片机 控制器

今天,小编将在这篇文章中为大家带来STM32单片机最小系统的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 单片机 单片机最小系统 STM32

51单片机将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对51单片机的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 单片机 51单片机

在这篇文章中,小编将对单片机最小系统的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: 单片机 单片机最小系统

一直以来,单片机都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来单片机的相关介绍,详细内容请看下文。

关键字: 单片机 芯片
关闭
关闭