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

📄 osdlyt.h

📁 这是一个车用电机调速器的AVR单片机的整套C语言的源代码
💻 H
字号:
/*******************************************************************************************************/
/* 文件信息 : 这关系到软件的修改 维护等必须得相关信息                                                  */
/* 文 件 名 : osdlyt.h                                                                                 */
/* 创 建 人 : 蔡 杰 (CaiJie) hnzjjcj@hotmail.com                                                       */
/* 创建日期 : 2004-04-12                                                                               */
/* 原始版本 : V 1.0.3                                                                                  */
/* 说    明 :                                                                                          */
/* 修改版本 :                                                                                          */
/* 修改日期 :                                                                                          */
/* 说    明 :                                                                                          */
/* 描    述 : osdlyt.h 源代码 用在OS 级定时用                                                          */
/* (c) Copyright 2004-2004, CaiJie                                                                     */
/* All Rights Reserved                                                                                 */
/*******************************************************************************************************/


#ifndef _OSTIMER_H_
#define _OSTIMER_H_


/*  MCU的定时时间 相关的定义 和计算公式                                                                */
/*  计算公式 如下                                                                                      */
/*                                                                                                     */
/*  1/OS_TICKS_PER_SEC  = (2^MCU_T0 - OSINTCLK) * 1/MCU_Fosc * Fclk                                    */
/*                                                                                                     */
/*  所以OSINTCLK 的计算公式如下                                                                        */
/*  OSINTCLK = 2^MCU_T0 - (Fosc / (OS_TICKS_PER_SEC * Fclk))                                           */
/*  加上相应误差 公式修正为                                                                            */
/*  OSINTCLK = 2^MCU_T0 - (Fosc / (OS_TICKS_PER_SEC * Fclk)) + Ferr                                    */ 
/*  最终的计算公式为                                                                                   */
/*  OSINTCLK = 2^MCU_TO - (Fosc / (OS_TICKS_PER_SEC * Fclk)) +Ferr                                     */

#define OS_TICKS_PER_SEC        100L      // 声明1秒系统系统节拍数 也就是在MCU中的定时器的转换定时频率
#define TICK_TIMER_SHARING      1L        // 定义进入多少次硬件中断为一次系统定时器软中断
#define MCU_Fosc                16000000L // MCU的晶振的频率 单位HZ
#define EXT_MCU_Fosc            16000000L // MCU的晶振的频率 单位HZ
#define MCU_Fclk                1L        // MCU的时钟周期 RD+ 6clk / 89c51/ 12clk 等看芯片资料
#define MCU_TSEC                2         // 选择OS定时的计算方法 默认是 2
#define MCU_Terr                0         // MCU的中断相应误差值 默认是 12M 39  24M 38
#define MCU_T0                  16        // T0 的工作方式方式定时 这里不用改更,改这里 TMOD要一起更改
#define MCU_Tmax                0

/*  标准计算公式 但占太多的资源  只参考                                                                */
#if MCU_TSEC == 1
    #define OSINTCLK   (INT16U)((pow(2,MCU_T0)) - (MCU_Fosc / (OS_TICKS_PER_SEC\
                        * TICK_TIMER_SHARING * MCU_Fclk)) + MCU_Terr)
#endif

/*  简化后的计算公式 有些要自己手动计算  (pow(2,MCU_T0) 的值                                           */
#if MCU_TSEC == 2

  #if ((MCU_Fosc / (OS_TICKS_PER_SEC * TICK_TIMER_SHARING * MCU_Fclk) + MCU_Terr) >= 0xFFFF)
    #error "系统节拍太慢了" 
  #endif
    #define OSINTCLK   (INT16U)(0xffff - (MCU_Fosc / (OS_TICKS_PER_SEC * TICK_TIMER_SHARING * MCU_Fclk) + MCU_Terr))
#endif

/*  采用辅助软件计算的定义                                                                             */
#if MCU_TSEC == 3
    #define  OSINTCLK  (INT16U)(0xec78 + MCU_Terr)   // 定时时间加上误差
#endif




/*  时间定义的常数 在应用中使用 便于理解                                                               */
/*  计算公式 如下                                                                                      */
/*  T = 1/F = 1 / OS_TICKS_PER_SEC                                                                     */
/*                                                                                                     */
#define T  OS_TICKS_PER_SEC/1000

#define OSDLY5MS           (5 * T)
#define OSDLY10MS          (10 * T)
#define OSDLY15MS          (15 * T)
#define OSDLY20MS          (20 * T)
#define OSDLY30MS          (30 * T)
#define OSDLY40MS          (40 * T)
#define OSDLY50MS          (50 * T)
#define OSDLY60MS          (60 * T)
#define OSDLY70MS          (70 * T)
#define OSDLY80MS          (80 * T)
#define OSDLY90MS          (90 * T)
#define OSDLY100MS         (100 * T)
#define OSDLY110MS         (110 * T)
#define OSDLY120MS         (120 * T)
#define OSDLY130MS         (130 * T)
#define OSDLY140MS         (140 * T)
#define OSDLY150MS         (150 * T)
#define OSDLY160MS         (160 * T)
#define OSDLY170MS         (170 * T)
#define OSDLY180MS         (180 * T)
#define OSDLY190MS         (190 * T)
#define OSDLY200MS         (200 * T)
#define OSDLY210MS         (210 * T)
#define OSDLY220MS         (220 * T)
#define OSDLY230MS         (230 * T)
#define OSDLY240MS         (240 * T)
#define OSDLY250MS         (250 * T)
#define OSDLY300MS         (300 * T)
#define OSDLY400MS         (400 * T)
#define OSDLY500MS         (500 * T)
#define OSDLY600MS         (600 * T)
#define OSDLY700MS         (700 * T)
#define OSDLY750MS         (750 * T)
#define OSDLY800MS         (800 * T)
#define OSDLY820MS         (820 * T)
#define OSDLY840MS         (840 * T)
#define OSDLY900MS         (900 * T)
#define OSDLY960MS         (960 * T)
#define OSDLY1000MS        (1000 * T)
#define OSDLY1100MS        (1100 * T)
#define OSDLY1200MS        (1200 * T)


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


⌨️ 快捷键说明

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