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

📄 rtc.c

📁 单片机实现消息队列的例子
💻 C
字号:
/*************************************************/

/****************实时时钟********************/

/*************2003年4月16日*********************/

/************WROTE BY WANGSW********************/
#include "reg52x2.h"
#include "define.h"

#include "lcd.h"
#include "iic.h"
#include "rtc.h"


static RTCType eRTCType;

byte data g_RTCPool[4];

RTCMember g_RTCMember;


static byte code Pcf8563Init[16] =				/*实时时钟初始化数据*/
{
	0x00,			/*控制状态寄存器TEST|0	|STOP|	0	|TTESTC|0	 |0	   |0	     */
	0x00,			/*控制状态寄存器  0	| 0	|  0	  |  TI/TP|  AF	|  TF |AIE  |TIE   */

	0x30,			/*second 		D7=VL(voltage low)*/
	0x29,			/*minute*/
	0x00,			/*hour*/
	0x00,			/*day*/
	0x00,			/*week*/
	0x00,			/*month  		D7=centruy*/
	0x00,			/*year*/

	0x80,			/*minute alarm	D7=alarm enable 低电平有效*/
	0x80,			/*hour alarm		D7=alarm enable*/
	0x80,			/*day alarm		D7=alarm enable*/
	0x80,			/*week alarm		D7=alarm enable*/

	0x83,			/*D7=FE:clkout enable		D1,D0:
											00:  32.768KHz
											01:1024
											10:32
											11:1
											*/
	0x00,			/*D7=TE:timer enable		D1,D0:
											00:4096Hz
											01:64
											10:1
											11:1/60
											*/
	0x00			/*timer back data倒计数值*/
};


#ifndef SOFT_RTC			/*r如果定义了外围硬件实时时钟计数*/
/******************************************************************************************
*函数名:		Int1RTC
*参数:			无
*返回值:		无
*描述:			
*编写:			王绍伟
*版本信息:		V1.0			2003年8月15日
******************************************************************************************/
static void Int1RTC(void) interrupt 2
{
	EA = 0;		/*r关闭所有中断*/
	msg_queue_in(MSG_RTC, NONE);
	EA = 1;
}
#endif

extern void rtc_pcf8563_init(void)
{
	while(!iic_send_str(PCF8563, 0x00, Pcf8563Init, 16))
	{
		delay(0x200);
	}
	iic_rcv_str(PCF8563, 0x02, g_RTCPool, 2);
}

/******************************************************************************************
*函数名:		rtc_init
*参数:			hour		
				minute
				second
*返回值:		无
*描述:			实时软件时钟计数器初始化
*编写:			王绍伟
*版本信息:		V1.0			2003年8月15日
******************************************************************************************/
extern void rtc_soft_init(byte hour, byte minute, byte second)
{
	g_RTCMember.hour = hour;
	g_RTCMember.minute = minute;
	g_RTCMember.second = second;
	g_RTCPool[0] = g_DAA[g_RTCMember.second];
	g_RTCPool[1] = g_DAA[g_RTCMember.minute];
	g_RTCPool[2] = g_DAA[g_RTCMember.hour];
}


/******************************************************************************************
*函数名:		rtc_process
*参数:			无
*返回值:		无
*描述:			定义时钟从秒->分钟->小时的进位规则,并抛出已过一秒时
				钟的消息
*编写:			王绍伟
*版本信息:		V1.0			2003年8月15日
******************************************************************************************/
extern void rtc_soft_routine(void)
{
#ifdef SOFT_RTC
	if(++g_RTCMember.second > 59)
	{
		g_RTCMember.second = 0;
		g_RTCMember.minute++;
	}
	
	if(g_RTCMember.minute > 59)
	{
		g_RTCMember.minute = 0;
		g_RTCMember.hour++;
	}
	msg_queue_in(MSG_RTC, RTC_SECOND);
#endif
}


/******************************************************************************************
*函数名:		rtc_read
*参数:			无
*返回值:		g_RTC		时钟结构体
*描述:			读取当前时钟结构体内容
*编写:			王绍伟
*版本信息:		V1.0		2003年8月15日
******************************************************************************************/
extern RTCMember rtc_soft_read(void)
{
	return(g_RTCMember);
}


extern void rtc_pcf8563_process(RTCType eRTCType)
{
	eRTCType = eRTCType;
	iic_rcv_str(PCF8563, 0x02, g_RTCPool, 2);
}

extern void rtc_soft_process(RTCType eRTCType)
{
	eRTCType = eRTCType;			/*以备今后用*/
	g_RTCPool[0] = g_DAA[g_RTCMember.second];
	g_RTCPool[1] = g_DAA[g_RTCMember.minute];
	g_RTCPool[2] = g_DAA[g_RTCMember.hour];
}

/**************************应用程序*********************************/



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -