📄 time.c
字号:
/*
*********************************************************************************************************
* System(Sys)
* System Management
*
* (c) Copyright 2005, Zou Jiahao, , Huizhou, Guangdong
* All Rights Reserved
*
* V1.0.0
*
*--------------文件信息--------------------------------------------------------------------------------
* 文 件 名: Time.c
* 创 建 人: 邹家浩
* 最后修改日期: 2005年 月 日
* 描 述: 定义延时功能
*
*--------------历史版本信息----------------------------------------------------------------------------
* 创建人: 邹家浩
* 版 本: V1.0.0
* 日 期: 2005年8月31日
* 描 述: 原始版本
*
*------------------------------------------------------------------------------------------------------
* 修改人:
* 版 本:
* 日 期:
* 描 述:
*
*------------------------------------------------------------------------------------------------------
* 修改人:
* 版 本:
* 日 期:
* 描 述:
*
*--------------当前版本修订-----------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 2005年8月31日
* 描 述: 原始版本
*
*------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#include "System.h"
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
//struct CLOCK XDATA TimeClock; //保存时钟的当前值
/*********************************************************************************************************
* 函数名称: TimeDelay5US
* 功能描述: 延时5us
* 输入参数: 无
*
* 返 回 值: 无
*
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if MACH_CYC <= 1
void TimeDelay5US (void) //调用函数:2个机器周期
{
#if MACH_CYC == 1 //1个机器周期为1us
_nop_(); //空操作:1个机器周期
#elif MACH_CYC == 1/2 //1个机器周期为0.5us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
#endif
return; //RET:2个机器周期
}
#endif
/*********************************************************************************************************
* 函数名称: TimeDelay10US
* 功能描述: 延时10us
* 输入参数: 无
*
* 返 回 值: 无
*
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*void TimeDelay10US (void) //调用函数:2个机器周期
{
#if MACH_CYC == 1/2
INT8U i;
#endif
#if MACH_CYC==1 //1个机器周期为1us
_nop_(); //空操作:1个机器周期
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
#elif MACH_CYC == 1/2
i = 6;
_nop_();
_nop_();
_nop_();
while(--i);
#endif
return; //RET:2个机器周期
}
/*********************************************************************************************************
* 函数名称: TimeDelay15US
* 功能描述: 延时15us
* 输入参数: 无
*
* 返 回 值: 无
*
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*void TimeDelay15US (void) //调用函数:2个机器周期
{
INT8U i;
#if MACH_CYC==1 //1个机器周期为1us
i = 5; //1个机器周期
while(--i); //每一次循环2个机器周期
#elif MACH_CYC == 1/2
i = 12;
_nop_();
while(--i);
#endif
return; //RET:2个机器周期
}
/*********************************************************************************************************
* 函数名称: TimeDelayOn5US
* 功能描述: 以5us为单位的延时
* 输入参数: 无
*
* 返 回 值: 无
*
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*void TimeDelayOn5US (INT8U time)
{
#if MACH_CYC == 1/2
INT8U i;
#endif
do
{
#if MACH_CYC == 1
_nop_();
_nop_();
_nop_();
#elif MACH_CYC == 1/2
i = 3;
_nop_();
while(--i);
#endif
time--;
}while(time);
}
/*********************************************************************************************************
* 函数名称: TimeDelayOn10US
* 功能描述: 以10us为单位的延时
* 输入参数: 无
*
* 返 回 值: 无
*
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void TimeDelayOn10US (INT8U time)
{
#if MACH_CYC == 1/2
INT8U i;
#endif
do
{
#if MACH_CYC == 1
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
#elif MACH_CYC == 1/2
i = 8;
_nop_();
while(--i);
#endif
time--;
}while(time);
}
/*********************************************************************************************************
* 函数名称: TimeDelayOn15US
* 功能描述: 以15us为单位的延时
* 输入参数: 无
*
* 返 回 值: 无
*
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void TimeDelayOn15US (INT8U time)
{
INT8U i;
do
{
#if MACH_CYC == 1
i = 6;
while(--i);
#elif MACH_CYC == 1/2
i = 12;
_nop_();
_nop_();
_nop_();
while(--i);
#endif
time--;
}while(time);
}
/*********************************************************************************************************
* 函数名称: TimeDelayUS
* 功能描述: 通用微秒级延时函数,此函数不适合50us以下的延时
* 输入参数: time:微秒级延时时间
*
* 返 回 值: 无
*
* 全局变量: 无
* 调用模块:
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*
说明:
调用函数,返回和赋值操作共38个机器周期,因此计数值先减去38
每执行一次循环需要8个机器周期,因此计数值除以8
*/
/*void TimeDelayUS (INT16U time) //调用函数:4个机器周期
{
INT16U t = (INT16U)(((time - 38) / 8) / MACH_CYC); //调用除法模块:共25个机器周期,其他赋值操作:共8个机器周期
do
{
t--; //自减:1个机器周期;
}while(t); //跳转:共7个机器周期
} //返回:1个机器周期
/*********************************************************************************************************
* 函数名称: TimeDelayMS
* 功能描述: 通用毫秒级延时函数
* 输入参数: time:毫秒级延时时间
*
* 返 回 值: 无
*
* 全局变量: 无
* 调用模块:
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*说明:
在毫秒级延时内,调用函数,返回和赋值操作的几个机器周期可忽略不计
*/
void TimeDelayMS (INT16U time)
{
INT8U j;
//if(!time)
// return;
do
{
#if MACH_CYC==1 //1个机器周期为1us
j = 250; //1个机器周期
while (--j); //每一次循环2个机器周期
j = 245; //1个机器周期;=(1000-(8+1+1))/2-250
while (--j); //每一次循环2个机器周期
#elif MACH_CYC == 1/2
j = 250; //1个机器周期
while (--j); //每一次循环2个机器周期
j = 250; //1个机器周期
while (--j); //每一次循环2个机器周期
j = 250; //1个机器周期
while (--j); //每一次循环2个机器周期
j = 244; //1个机器周期;=(1000-250-250-250-(8+1+1+1+1)/2)
while (--j); //每一次循环2个机器周期
#endif
}while(--time); //共8个机器周期
}
/*********************************************************************************************************
* 函数名称: TimeClockIncs
* 功能描述: 时钟向前跳动
* 输入参数: 无
*
* 返 回 值: 无
*
* 全局变量: 无
* 调用模块:
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*void TimeClockIncs (void)
{
if (++TimeClock.Second >= 60)
{
TimeClock.Second = 0;
if (++TimeClock.Minute >= 60)
{
TimeClock.Minute = 0;
if (++TimeClock.Hour >= 24)
{
TimeClock.Hour = 0;
}
}
}
}
/*********************************************************************************************************
* 函数名称: TimeInit
* 功能描述: 初始化有关时间的信息
* 输入参数: 无
*
* 返 回 值: 无
*
* 全局变量: 无
* 调用模块: System
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*void TimeInit (void)
{
TimeClock.Hour = 0;
TimeClock.Minute = 0;
TimeClock.Second = 0;
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -