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

📄 timer0.c

📁 TQ公司的STK16x开发系统的源码
💻 C
字号:
/* File: TIMER0.C */

/****************************************************************************
*
* STK16XSW.TIMER0
* ===============
*
* Routines for the Acces to the stepper motor and the LCD-Display
*                 
* TQ-Systems GmbH                                                         
* ---------------                                                         
* Customer: TQ-Components
* Project : TQMX16xU
* Tools   : uVision 2.37
*
* 
* Rev: Date:     Name:            Modification:
* ----+---------+----------------+------------------------------------------
* 100  16.05.03  Volker Jung      changes for XC16x Controller
* 251  29.07.03  Volker Jung	  Anpassung an TQ_Select 
*****************************************************************************/

/****************************************************************************
*
*                            availability summary
*
* available for Starterkit: STK16XU
* conformed for Starterkit: STK16XU 
* available for Modul     : TQMX16XU
*                           
* conformed for Modul     : TQMX16XU
*****************************************************************************/

/*==========================================================================*
* pragmas:
*===========================================================================*/

/*=========================================================================*
* include files (#INCLUDE):
*==========================================================================*/
/*-------------------------------------------------------------------------*
* standard include files:
*--------------------------------------------------------------------------*/
#include <stdio.h>              /* standard I/O functions    */
#include <ctype.h>              /* typecast functions        */
#include <string.h>             /* String functions          */
#include <setjmp.h>             /* global jump functions     */
#include <absacc.h>             /* absolute accesss          */
#include <intrins.h>            /* intrinsic functions       */
#include <xc161.h>              /* Special function register */

/*-------------------------------------------------------------------------*
* project specific include files:
*--------------------------------------------------------------------------*/
#include "timer0.h"              /* timer functions           */

/*=========================================================================*
* modul internal definitions (#DEFINE):
*==========================================================================*/

#define PERIOD     -100                  /* 1 msec interrupt period        */
/*=========================================================================*
* modul internal type definitions(TYPEDEF):
*==========================================================================*/

/*=========================================================================*
* modul internal constants (CONST):
*==========================================================================*/

/*=========================================================================*
* extern available constants (CONST):
*==========================================================================*/

/*=========================================================================*
* modul internal variables:
*==========================================================================*/
TIMER_COUNTER idata timer_counter;      /* 10 ms counter variable          */
TIMER_COUNTER idata timer_counter_20us; /* 20 us counter variable          */
unsigned int idata inc_counter;
/*=========================================================================*
* global extern available variables (EXTERN):
*==========================================================================*/

/*=========================================================================*
* modul internal functions:
*==========================================================================*/

/*-------------------------------------------------------------------------*
* void timer3_int(void) interrupt 0x23
*--------------------------------------------------------------------------*
* FT: interrupt service routine for timer 0
* EP: -
* RW: -
*
*--------------------------------------------------------------------------*/
static void timer0(void) interrupt 0x20 using INTREGS
/* Int Vector at 0080H, other Reg Bank */
{
  // P2 |= 0x8000;
  timer_counter_20us++;
  inc_counter++;
  if (inc_counter >= 500)
  {
    timer_counter++;
    inc_counter = 0;
  }

  // P2 &= 0x7FFF;
}





/*=========================================================================*
* extern available functions:
*==========================================================================*/

/* ------------------------------------------------------------------------
* BOOL timer_init(void)
---------------------------------------------------------------------------
*
*FT: init timer0
*
--------------------------------------------------------------------------- */
BOOL timer_init(void)
{

 timer_counter = TIMER_MIN;		/* init 10 ms timer */
 timer_counter_20us = TIMER_MIN;
 inc_counter = 0;
 								/* setup the timer 0 interrupt */
 CC1_T0REL = PERIOD;   			/* set reload value */
 CC1_T0    = PERIOD;
 CC1_T0IC  = 0x44;     			/* set T0IE and ILVL = 1 */
 PSW_IEN   = 1;        			/* set global interrupt enable flag */
 CC1_T01CON = 0x40;    			/* start timer 0 */


  return (TRUE);
}

/* ------------------------------------------------------------------------
* void timer_reset(void)
---------------------------------------------------------------------------
*
*
*
--------------------------------------------------------------------------- */
void timer_reset(void)
{
 PSW_IEN   = 0;					/* disable global interrupt enable flag */

 timer_counter = TIMER_MIN;
 timer_counter_20us = TIMER_MIN;
 inc_counter = 0;

 PSW_IEN   = 1;					/* set global interrupt enable flag */

}


/* ------------------------------------------------------------------------
* TIMER_COUNTER timer_get_10ms(TIMER_COUNTER t)
---------------------------------------------------------------------------
*
*
*
--------------------------------------------------------------------------- */
TIMER_COUNTER timer_get_10ms(TIMER_COUNTER t)
{
  TIMER_COUNTER val;
  // t = t * 50;

  PSW_IEN   = 0;					/* disable global interrupt enable flag */

  val = timer_counter - t;

 PSW_IEN   = 1;						/* set global interrupt enable flag */

 // val = val /50;
 return (val);

}

/* ------------------------------------------------------------------------
* TIMER_COUNTER timer_get_20us(TIMER_COUNTER t)
---------------------------------------------------------------------------
*
*
*
--------------------------------------------------------------------------- */
TIMER_COUNTER timer_get_20us(TIMER_COUNTER t)
{
  TIMER_COUNTER val;

  PSW_IEN   = 0;					/* disable global interrupt enable flag */

  val = timer_counter_20us - t;

 PSW_IEN   = 1;						/* set global interrupt enable flag */

 return (val);

}
/* ------------------------------------------------------------------------
* TIMER_COUNTER timer_delay_10ms(TIMER_COUNTER len)
---------------------------------------------------------------------------
*
*
*
--------------------------------------------------------------------------- */
void timer_delay_10ms(TIMER_COUNTER len)
{
  TIMER_COUNTER base_time;
 base_time = timer_get_10ms(0);
 while (timer_get_10ms(base_time) < len);

}

/* ------------------------------------------------------------------------
* TIMER_COUNTER timer_delay_10ms(TIMER_COUNTER len)
---------------------------------------------------------------------------
*
*
*
--------------------------------------------------------------------------- */
void timer_delay_20us(TIMER_COUNTER len)
{
  TIMER_COUNTER base_time;
  
  base_time = timer_get_20us(0);
  while (timer_get_20us(base_time) < len);

}


⌨️ 快捷键说明

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