(16)月数据寄存器(BCDMON)
月数据寄存器(BCDMON)是可读/写的,用来存储当前日期的月数据(合并BCD码格式)。其地址为:0x57000084,复位后的初值不确定。BCDMON寄存器的具体格式如表7-19所示。
表7-19 BCDMON寄存器的格式
符号 位 描述 初始状态
Reserved [7:5] 保留
MONDATA [4] 月数据十位的BCD码值,范围为0~1 -
[3:0] 月数据个位的BCD码值,范围为0~9 -
(17)年数据寄存器(BCDYEAR)
年数据寄存器(BCDYEAR)是可读/写的,用来存储当前日期的年数据(合并BCD码格式)。其地址为:0x57000088,复位后的初值不确定。BCDYEAR寄存器的具体格式如表7-20所示。
表7-20 BCDYEAR寄存器的格式
符号 位 描述 初始状态
YEARDATA [7:0] 年数据的BCD码值,范围为00~99 -
7.3.3 编程实例
RTC部件的主要功能是产生实时时间,提供年、月、日、时、分、秒等信息。在使用RTC部件之前,需要对其进行初始化。下面程序段完成的是对RTC内部寄存器初始化的工作。
//*****************************************************************
//**函数名:rtcinit()
//**功 能:初始化RTC,同时可以在此设定当前时间,但是需要用户写入
//*****************************************************************
volatile char year,month,day ,wkday ,hour, minute ,second,flag ;
void rtcinit(void)
{
//**用变量记录当前时间:2006-9-10 14:48:28
year =6;
month =9;
day =10;
wkday =7;
hour =14;
minute =48;
second =28;
//**初始化设置,首先使能RTC读写操作
rRTCCON=(INT8U)(rRTCCON|0x01);
//**关闭提醒设置
rRTCALM=(INT8U)0x00;
//**关闭复位操作
rRTCRST=(INT8U)0x00;
//**关闭定时中断
rTICINT=(INT8U)0x00;
//**关闭RTC读写操作
rRTCCON=(INT8U)(rRTCCON&0xfe);
}
下面一段程序完成的是对RTC内部寄存器写入操作。
//***************************************************************
//**函数名:rtcwrite()
//**功 能:将当前时间写到RTC
//***************************************************************
void rtcwrite(void )
{
//**为了快速写好RTC,定义部分中间变量,首先完成转换格式的工作
INT8U Y,MO,D,W,H,MI,S;
//**完成十进制数到合并BCD码的转换工作
if (year >1999) year= year-2000;
Y =(INT8U) ( year /10*16 + year%10) ;
MO=(INT8U) ( month/10*16 + month%10) ;
D =(INT8U) ( day /10*16 + day %10 ) ;
W =(INT8U) ( wkday) ;
H =(INT8U) ( hour /10*16 +hour%10 ) ;
MI=(INT8U) ( minute/10*16+minute%10);
S =(INT8U) ( second/10*16+second%10);
//**使能RTC读/写操作
rRTCCON =(INT8U)(rRTCCON|0x01);
//**将当前时间写入RTC对应的寄存器中
rBCDYEAR =Y ;
rBCDMON =MO;
rBCDDAY =D ;
rBCDDATE =W ;
rBCDHOUR =H;
rBCDMIN =MI;
rBCDSEC =S;
//**关闭RTC读写操作
rRTCCON =(INT8U)(rRTCCON&0xfe);
}
下面程序段完成的是对RTC内部寄存器读取操作。
//***************************************************************
//**函数名:rtcread()
//**功 能:读取RTC的当前值
//***************************************************************
void rtcread(void)
{
//**为了快速读到数据,定义部分中间变量,转换格式的工作就放在了后面
INT8U Y,MO,D,W,H,MI,S;
//**使能RTC读写操作
rRTCCON=(INT8U)(rRTCCON|0x01);
//**读取日期和时间值
Y =rBCDYEAR;
MO =rBCDMON;
D =rBCDDAY;
W =rBCDDATE;
H =rBCDHOUR;
MI =rBCDMIN;
S =rBCDSEC;
//**关闭RTC读写操作