📄 systick.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 + -