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

📄 systick.c

📁 proteus电子钟(带闹钟数码管显示)
💻 C
字号:
/*------------------------------------------------------------------------------------------------*-

	SysTick.C (V1.00)

	这里是系统的时标.
	
	 
-*------------------------------------------------------------------------------------------------*/

/*
 * Copyright (c) 2007
 * All rights reserved
 * 
 * 文件名称: SysTick.C  
 * 文件标识: 
 * 摘	 要: 系统的时标(20mS)
 * 
 * 当前版本: 1.0		 * 取代版本:
 * 作	 者: wsl		 * 原作者  : 
 * 完成日期: 2007-07-31	 * 完成日期:
/*------------------------------------------------------------------------------------------------*/


#include "main.h"
#include "SysTick.h"
#include "DisplayDir.h"
#include "key.h"
#include "RTC.h"
#include "OS_Basic_Func.H"


#define TC1_PRELOAD_HIGH	0xfe	// 500us定时常数
#define TC1_PRELOAD_LOW		0x33

#define RTC_ONE_SEC_CONT	(1000 / TIMEROUT)
	

bool ftick = 0;



 /*------------------------------------------------------------------------------------------------*-
 * 函数名称: Timer0_init()
 * 入	 口: xx
 * 出	 口: xx
 * 函数功能: T0初始化
 * 
 * 说	 明: 为了时标的准确性,系统采用T0模式1,16位加载模式.
 *			 将T0的低位计数器设计为自动加载.
 * 			 
 * 当前版本: 1.0		 * 取代版本:
 * 作	 者: wsl		 * 原作者  : 
 * 完成日期: 2007-07-31	 * 完成日期:
-*------------------------------------------------------------------------------------------------*/
void Timer0_init(void)
{
	TMOD &= 0xf0;
	TMOD |= 0x01;
	TL0 = 0;
	TH0 = PRELOAD_mS_H;
	ET0 = 1;
	TR0 = 1;
}
/*------------------------------------------------------------------------------------------------*-
 * 函数名称: Timer1_init()
 * 入	 口: xx
 * 出	 口: xx
 * 函数功能: T1初始化
 * 
 * 说	 明: 为了时标的准确性,系统采用T1模式1,16位加载模式.
 * 			 
 * 当前版本: 1.0		 * 取代版本:
 * 作	 者: wsl		 * 原作者  : 
 * 完成日期: 2007-07-31	 * 完成日期:
-*------------------------------------------------------------------------------------------------*/
void Timer1_init(void)
{
	TMOD &= 0x0f;
	TMOD |= 0x10;
	TL1 = TC1_PRELOAD_LOW;
	TH1 = TC1_PRELOAD_HIGH;
	ET1 = 1;
	TR1 = 1;
}


/*------------------------------------------------------------------------------------------------*-
 * 函数名称: SystemTick()
 * 函数功能: 系统时标.任何任务执行时间都不能大于系统时标.
 * 说	 明: T0的低位计数器为自动加载.		
 *
 * 当前版本: 1.0		 		* 取代版本:
 * 作	 者: wsl		 		* 原作者  : 
 * 完成日期: 2007-07-31		 	* 完成日期:
-*------------------------------------------------------------------------------------------------*/
void SystemTick(void) interrupt 1 
{
   	static uint8_t m_sec;			// 毫秒心跳
	TH0 = PRELOAD_mS_H;	 	
	ftick = 1;

	if (++m_sec >= RTC_ONE_SEC_CONT)
	{
	 	m_sec = 0;
		RTC_Soft_clock();
	}
	// 程序经测试,1小时快1秒
	if (ClockReviseTemp >= 60)  	// 1小时到(60分钟等于1小时)
	{
		if (Rtc.sec >= 1)  			// 秒大于等于1
		{
			Rtc.sec -= 1;	 		// 减1校正时间
			ClockReviseTemp = 0;   	// 复位校正计时器
			// 在此加入时钟12小时所造成的误差调整代码
			ClockReviseTemp1++;
		}
	}
	// 12小时快又1秒
	if (ClockReviseTemp1 >= 12)
	{
		if (Rtc.sec >= 1)  			// 秒大于等于1
		{
			Rtc.sec -= 1;	 		// 减1校正时间
			ClockReviseTemp1 = 0;   // 复位校正计时器
		}	
	}
}

/*------------------------------------------------------------------------------------------------*-
 * 函数名称: UpdateDisplayTick()
 * 函数功能: 
 * 说	 明: 500uS	 
 *
 * 当前版本: 1.0		 		* 取代版本:
 * 作	 者: wsl		 		* 原作者  : 
 * 完成日期: 2007-07-31		 	* 完成日期:
-*------------------------------------------------------------------------------------------------*/
void UpdateDisplayTick(void) interrupt 3 
{	
	static uint8_t i;
	TR1 = 0;
	// 数码显示
	if (++i >= 8)
	{	// 4ms
		i = 0;		
		LedDisplay();
	}
	// 蜂呜器
	BUZZER_PRO();

	TL1 = TC1_PRELOAD_LOW;
	TH1 = TC1_PRELOAD_HIGH;
	TR1 = 1;
}

⌨️ 快捷键说明

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