⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nedu_drive_rtc.c

📁 一个基于单片机的小型操作系统
💻 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 + -