timer.c

来自「This is IR (Infra-Red) learn module for 」· C语言 代码 · 共 64 行

C
64
字号
/*
 *  FILE:
 *     timer.c (rev. 1.1 - 14.04.2006)
 *
 *  PROJECT:
 *     IR Learn System 
 *  
 *  DESCRIPTION:
 *     See "timer.h" for description
 *     
*/


#include <AT89C51ED2.h>
#include <timer.h>
#include <types.h>

volatile U16 TMP_Timer;   // General purposes Timer
volatile U16 SYS_Timer;   // System Timer
volatile U16 AUX_Timer;   // Auxilary Timer

// Initialize and start Timer 0
void TMR_Init(void) {
    SYS_Timer=0;
    TMP_Timer=0;
    AUX_Timer=10;

    TR0=0;
    TMOD&=0xF0;           // Timer 0 is used as a system timer
    TMOD|=0x01;           // Set Timer 0 to 16-bit mode
    TH0=TMR_Hi;           // Init high byte of reload value
    TL0=TMR_Lo;           // Init low byte of reload value
    EA=1; ET0=1;          // Enable Timer 0 interrupt
    IPH0|=2;              // Set medium priority for timer interrupt
    TR0=1;                // Run Timer 0
}

// Timer 0 Interrupt Routine
void TMR_Interrupt(void) interrupt 1 using 2{
    EA=0;
    TR0=0;                // Stop Timer 0
    SYS_Timer++;
    AUX_Timer--;
    if (AUX_Timer==0) {
       AUX_Timer=10;
       TMR_Timer();
    }  
    TH0=TMR_Hi;           // Init high byte of reload value
    TL0=TMR_Lo;           // Init low byte of reload value
    TR0=1;                // Run Timer 0
    IPLT0=1;              // Set priority for timer 0 interrupt
    EA=1;
}

// System Timer (resolution: 1 msec)
void TMR_Timer(void) {
    if (TMP_Timer) TMP_Timer--;
}

// Hardware delay (in 1/10 msec)
void TMR_Delay(U16 Delay) {
    SYS_Timer=0;
    while(SYS_Timer<Delay);
}

⌨️ 快捷键说明

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