📄 nedu_drive_rtc.c
字号:
/*
*********************************************************************************************************************
* 东软培训中心教学项目:基于ARM和uc/os-II的PDA系统
*
* (c) Copyright 2005, 东软培训中心
* All Rights Reserved
*
* 模块名称:驱动程序模块
* 文件名:NEDU_DRIVE_RTC.C
* 作者:朱成果
* 时间:2005年9月20日
* 版本:V0.01
**********************************************************************************************************************
*/
#include "44b.h"
#include "def.h"
#include "driven.h"
char intstr[9];
RTC_REG RTC_data;
U8 RTC[8];
#define INITYEAR 0x05
#define INITMONTH 0x10
#define INITDAY 0x22
#define INITDATE 0x06
#define INITHOUR 0x14
#define INITMIN 0x01
#define INITSEC 0x01
/*
**********************************************************************************************************************
* RTC_INIT
*
* 作者:朱成果
*
* 时间:2005年9月22日
*
* 描述:函数自动按初始值设定系统时间。
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void Rtc_Init(void)
{
rRTCCON = 0x01;
rBCDYEAR = INITYEAR;
rBCDMON = INITMONTH;
rBCDDAY = INITDAY;
rBCDDATE = INITDATE;
rBCDHOUR = INITHOUR;
rBCDMIN = INITMIN;
rBCDSEC = INITSEC;
rRTCCON = 0x0;
}
/*
**********************************************************************************************************************
* RTC_READ
*
* 作者:朱成果
*
* 时间:2005年9月22日
*
* 描述:函数自动读取RTC寄存器到数据结构RTC_data中。
*
* 参数:无
*
* 返回值:无,函数本身无返回值,返回结果在公共数据结构RTC_data中。
*
***********************************************************************************************************************
*/
void Rtc_Read(void)
{
rRTCCON = 0x01;
while(1)
{
if(rBCDYEAR == 0x99)
RTC_data.year = 0x1999;
else
RTC_data.year = 0x2000 + rBCDYEAR;
RTC_data.month = rBCDMON;
RTC_data.day = rBCDDAY;
RTC_data.week = rBCDDATE;
RTC_data.hour = rBCDHOUR;
RTC_data.min = rBCDMIN;
RTC_data.sec = rBCDSEC;
if(RTC_data.sec != 0)
break;
}
rRTCCON = 0x0;
}
/*
**********************************************************************************************************************
* RTC_SET
*
* 作者:朱成果
*
* 时间:2005年9月22日
*
* 描述:函数自动将公共数组RTC中的BCD数据写入到RTC寄存器中。
*
* 参数:无
*
* 返回值:无。
*
***********************************************************************************************************************
*/
void Rtc_Set(void)
{
int i;
rRTCCON = 0x01;
rBCDYEAR = RTC[0];
rBCDMON = RTC[1];
rBCDDAY = RTC[2];
rBCDDATE = RTC[3];
rBCDHOUR = RTC[4];
rBCDMIN = RTC[5];
rBCDSEC = RTC[6];
rRTCCON = 0x0;
for(i = 0;i < 7;i++)
RTC[i] = 0x00;
}
/*
**********************************************************************************************************************
* BCDU32toASC
*
* 作者:朱成果
*
* 时间:2005年10月26日
*
* 描述:函数将形参32位BCD数转换成ASCII码串。
*
* 参数:intnum:32位无符号BCD数
*
* 返回值:变换后的ASCII字符串,在全局变量数组intstr[]中,前导0被忽略。
*
***********************************************************************************************************************
*/
void BCDU32toAsc(U32 intnum)
{
int i,a,b;
U32 j;
U8 c;
b=0;
j=0xf0000000;
a=IntToHex(intnum);
for(i=7;i>=0;i--)
{
c= (a&j)>>(i*4);
if(c==0)
{}
else {
intstr[b]= c+0x30;
b += 1;
break;
}
j = j>>4;
}
j = j>>4;
while(i !=0)
{
i -= 1;
c= (a&j)>>(i*4);
intstr[b]= c+0x30;
b += 1;
j = j>>4;
}
intstr[b]= 0x0;
}
/*
**********************************************************************************************************************
* BCDU8toASC
*
* 作者:朱成果
*
* 时间:2005年10月26日
*
* 描述:函数将形参8位BCD数转换成ASCII码串。
*
* 参数:intnum:8位BCD数
*
* 返回值:变换后的ASCII字符串,在全局变量数组intstr[]中,前导0不忽略。
*
***********************************************************************************************************************
*/
void BCDU8toAsc(U8 intnum)
{
U8 a,c,b,d;
b=intnum/10;
d=intnum%10;
b=b<<4;
intnum=b+d;
a=intnum;
c= (a&0xf0)>>4;
intstr[0]= c+0x30;
c= a&0x0f;
intstr[1]= c+0x30;
intstr[2]= 0x0;
}
/*
**********************************************************************************************************************
* HexToInt
*
* 作者:胡仲华
*
* 时间:2007年7月4日
*
* 描述:函数将形参8位BCD数转换成ASCII码串。
*
* 参数:intnum:8位BCD数
*
* 返回值:变换后的ASCII字符串,在全局变量数组intstr[]中,前导0不忽略。
*
***********************************************************************************************************************
*/
U16 HexToInt(U16 intnum)
{
U16 a,c,b;
a=intnum;
c= (a&0xf000)>>12;
b= c*1000;
c= (a&0x0f00)>>8;
b+= c*100;
c= (a&0x00f0)>>4;
b+= c*10;
c= a&0x000f;
b+=c;
return b;
}
/*
**********************************************************************************************************************
* IntToHex
*
* 作者:胡仲华
*
* 时间:2007年7月4日
*
* 描述:函数将形参8位BCD数转换成ASCII码串。
*
* 参数:intnum:8位BCD数
*
* 返回值:变换后的ASCII字符串,在全局变量数组intstr[]中,前导0不忽略。
*
***********************************************************************************************************************
*/
U16 IntToHex(U16 intnum)
{
U16 a,c;
U16 b=0x0000;
a=intnum;
c=a/1000;
c=c<<12;
b= c|b;
a %= 1000;
c=a/100;
c=c<<8;
b= c|b;
a %= 100;
c=a/10;
c=c<<4;
b= c|b;
a %= 10;
b= a|b;
return b;
}
//This is the end of module
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -