timer.C
上传用户:shyuanyi
上传日期:2008-05-24
资源大小:69k
文件大小:3k
源码类别:

RFID编程

开发平台:

C/C++

  1. #include   "My_head.h"
  2. /**************************************************/
  3. #define  TIMER_SIZE   6
  4. TIMER_EVENT   idata   Timer_s[TIMER_SIZE];
  5. BYTE    Timer_Count=0;      //for main and other.
  6. extern  BYTE   enble_send_count;
  7. extern  BYTE  receive_timer;//for uart!
  8. void  timer0_int(void) interrupt  1  using  1
  9. {
  10.    register BYTE  i;
  11.    TR0 = 0;
  12.    TH0 = 0x70;//0xB8;//0x3C; //0x40  //0x3f
  13.    TL0 = 0x00;//0x00;//0xB0; //0x40  //0x7f
  14.    TR0 = 1;
  15.    /**************************************/
  16.    if(Timer_Count)Timer_Count--;
  17.    /**************************************/
  18.    if(receive_timer)if(--receive_timer==0)REN=TRUE;
  19.    if(enble_send_count)enble_send_count--;
  20.    /**************************************/
  21.    for(i=0;i<TIMER_SIZE;i++)
  22.      if((Timer_s[i].event & 0x80))
  23.       {
  24.         if(Timer_s[i].time)Timer_s[i].time--;
  25.         else{
  26.      Timer_s[i].event &= 0x7f; 
  27.  Timer_s[i].event |= 0x40;
  28. }
  29.       }
  30. }
  31. /*--------------------------------------------------*/
  32. void  Stop_Timer(BYTE evt)
  33. {
  34.    BYTE  i;
  35.    for(i=0;i<TIMER_SIZE;i++)
  36.      if(evt == (Timer_s[i].event & 0x3F))
  37.        {
  38.         Timer_s[i].event = NULL;
  39. Timer_s[i].time  = 0;
  40.    }
  41. }
  42. /*--------------------------------------------------*/
  43. void Stop_All_Timer(void)
  44. {
  45.    BYTE i=TIMER_SIZE;
  46.    while(i--)
  47.      {
  48.       Timer_s[i].event = NULL;
  49.   Timer_s[i].time  = 0;
  50.  }
  51. }
  52. /*--------------------------------------------------*/
  53. #define  MAX_TIMER_EVENT  0x3f
  54. bit Set_TimerEvent(BYTE  event,WORD  times_20ms)
  55. {
  56.    BYTE  i;
  57.    if(event>MAX_TIMER_EVENT)return(FALSE);
  58.    for(i=0;i<TIMER_SIZE;i++)
  59.      if(!(Timer_s[i].event & 0xC0))
  60.       {
  61.         Timer_s[i].time   = times_20ms;//time*50-1;
  62.         Timer_s[i].event  = event|0x80;
  63.         return TRUE;
  64.       }
  65.    return  FALSE;
  66. }
  67. /*--------------------------------------------------*/
  68. BYTE   Check_Timer_Event(void)
  69. {
  70.    BYTE  i;
  71.    for(i=0;i<TIMER_SIZE;i++)
  72.      if((Timer_s[i].event & 0x40))
  73.       {
  74.        PostMessage(TIMER_COMED_EVENT,(Timer_s[i].event & 0x3f));
  75.         Timer_s[i].event = NULL;
  76.     Timer_s[i].time  = 0;
  77.       }
  78.    return(0);
  79. }
  80. /*--------------------------------------------------*/
  81. void  Init_Timer0(void)
  82. {
  83.    EA    = 0;
  84.    ET0   = 0;
  85.    TR0   = 0;          //(定时器0运行控制位,1表开启0表关闭)
  86.    TMOD &= 0xF0;       //(定时器T0)
  87.    TMOD |= 0x01;       // Mode 1
  88.    TH0  =  0x70;       // 11.0592MHZ: 50ms--3ce1 (3ce1到ffff时大概为50ms)
  89.    TL0  =  0x00;       // 11.0592MHZ: 40MS--9C42 ,B800--20ms
  90.    //Open_Timer0();
  91.    ET0  =  1;          //(定时器0的中断允许位,1表示允许0表示禁止)
  92.    TR0  =  1;          // TCON |= 0x10;ǘㄊ逼