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