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

📄 tmr.c

📁 这是一个车用电机调速器的AVR单片机的整套C语言的源代码
💻 C
字号:
/********************************************************************************************************
* 文 件 名 : TMR.C
* 说    明 :
********************************************************************************************************/


#define  TMR_GLOBALS
#include "includes.h"

#if TMR_MODULE_EN > 0

/********************************************************************************************************
* 功 能 : 设置软定时器触发函数
* 入 口 : n    指定软定时 最大为 0..TMR_MAX_TMR-1
*         fnct 指向触发的函数的指针
*         arg  指向触发函数传人数据的指针
*         tenths 1/10秒的时间
* 返 回 : 无
********************************************************************************************************/

void  TmrCfgFnct (INT8U n, void (*fnct)(void), INT16U tenths)
{
    TMR *ptmr;


    if (n < TMR_MAX_TMR) {
        OS_ENTER_CRITICAL();
        ptmr          = &TmrTbl[n];
        ptmr->TmrFnct = fnct;
        ptmr->TmrInit = tenths;
        ptmr->TmrCtr  = tenths;
        OS_EXIT_CRITICAL();
    }
}


/********************************************************************************************************
* 功 能 : 设置1/10秒的时间
* 入 口 : n      指定的软定时器编号 0..TMR_MAX_TMR-1
*         tenths 1/10秒的时间
* 返 回 : None.
********************************************************************************************************/

void  TmrSetT (INT8U n, INT16U tenths)
{
    TMR *ptmr;


    if (n < TMR_MAX_TMR) {
        OS_ENTER_CRITICAL();
        ptmr          = &TmrTbl[n];
        ptmr->TmrInit = tenths;
        ptmr->TmrCtr  = tenths;
        OS_EXIT_CRITICAL();
    }
}


/*********************************************************************************************************
* 功 能 : 初始化软定时的工作环境
* 入 口 : 无
* 返 回 : 无
********************************************************************************************************/

void  TmrInit (void)
{
    INT8U  i;
    TMR   *ptmr;


    ptmr = &TmrTbl[0];
    for (i=0; i<TMR_MAX_TMR; i++) {
        ptmr->TmrEn   = FALSE;
        ptmr->TmrCtr  = 0;
        ptmr->TmrInit = 0;
        ptmr->TmrFnct = NULL;
        ptmr++;
    }
}


/********************************************************************************************************
* 功 能 : 启动一个软定时器
* 入 口 : n  指定的软定时器编号
* 返 回 : 无.
********************************************************************************************************/

void  TmrStart (INT8U n)
{
    if (n < TMR_MAX_TMR) {
        OS_ENTER_CRITICAL();
        TmrTbl[n].TmrEn = TRUE;
        OS_EXIT_CRITICAL();
    }
}


/********************************************************************************************************
* 功 能 : 停止一个正在工作的软定时器
* 入 口 : n  指定的软定时器编号
* 返 回 : 无
********************************************************************************************************/


void  TmrStop (INT8U n)
{
    if (n < TMR_MAX_TMR) {
        OS_ENTER_CRITICAL();
        TmrTbl[n].TmrEn = FALSE;
        OS_EXIT_CRITICAL();
    }
}


/********************************************************************************************************
* 功 能 : 这个是软件定时器的维护任务 要求中断中能处理1/10秒的时间
* 入 口 : None.
* 返 回 : None.
* 说明  : 1) 当一个软定时器计时到时 将触发一个外部的处理函数
********************************************************************************************************/

void  TmrTask (void )
{
    INT8U   i;
    void  (*pfnct)(void);
    TMR    *ptmr;

    pfnct = NULL;
    ptmr  = &TmrTbl[0];
    for (i=0; i <TMR_MAX_TMR; i++) {
        //OS_ENTER_CRITICAL();
        //cli();
        if (ptmr->TmrEn == TRUE) {
            if (ptmr->TmrCtr > 0) {
                ptmr->TmrCtr--;
                if (ptmr->TmrCtr == 0) {
                    ptmr->TmrCtr = ptmr->TmrInit; // 复位时间
                    pfnct        = ptmr->TmrFnct; // 功能函数
                }
            }
        }
        //OS_EXIT_CRITICAL();
        //sei();
        if (pfnct != NULL) {
           (*pfnct)();
            pfnct = NULL;
        }
        ptmr++;
    }
}



#endif
/********************************************************************************************************
*                                             End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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