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

📄 timer.lst

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 LST
字号:
C51 COMPILER V7.07   TIMER                                                                 12/06/2003 18:49:09 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN timer.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\timer.c LARGE BROWSE ORDER NOAREGS DEBUG OBJECTEXTEND PRINT(.\timer.
                    -lst) OBJECT(timer.obj)

stmt level    source

   1          //////////////////////////////////////////////
   2          //  timer.c                                 //
   3          //  1毫秒系统时钟                           //
   4          //  自定义时间长度中断调用                  //
   5          //  预定义时间长度中断调用                  //
   6          //  design by: 刘俐训                       //
   7          //////////////////////////////////////////////
   8          
   9          #include<reg52.h>
  10          #include"timer.h"
  11          #include <c51rx2.h>
  12          
  13          #ifndef enable
              #define enable()     EA=1
              #define disable()    EA=0
              #endif
  17          
  18          #ifndef CLK
              #define CLK
              #define CLK11M0592 0
              #define CLK12M0000 1
              #define CLK14M7456 3
              #define CLK24M0000 2
              #endif
  25          
  26          #ifndef BZFRQ
              #define BZFRQ
              #define BZFRQ2K         0
              #define BZFRQ4K         1
              #endif
  31          
  32          #ifndef NULL
              #define NULL    (void *)0
              #endif
  35          
  36          #define USER_TIMER  TL0
  37          #define SYS_TIMER   TH0
  38          #define TF_USER     TF0
  39          #define TF_SYS      TF1
  40          
  41          unsigned int data MS;           //整型,长时间
  42          unsigned char data MSbyte;      //字节型,外部调用时提高速度
  43          
  44          static unsigned char SysClk;
  45          static unsigned char data UserLoop;
  46          static unsigned char data UserReload;
  47          static unsigned char data SysLoop = 3;
  48          static unsigned char data SysReload = 104;
  49          static bit UserTimerMode = 0;
  50          
  51          static unsigned int data bztime;
  52          static bit bzstart;
  53          /*
  54          unsigned char TimerGetMSbyte(void)
C51 COMPILER V7.07   TIMER                                                                 12/06/2003 18:49:09 PAGE 2   

  55          {
  56              static unsigned char data loops=0;
  57              if(!TF_SYS) return MSbyte;
  58              TF_SYS = 0;
  59              loops++;
  60              if(loops<=SysLoop) return MSbyte;
  61              TH0 += SysReload;                   //重装TH0
  62              loops=0;
  63              MSbyte++;
  64              return MSbyte;
  65          }
  66          */
  67          void IntUserTimer(void) interrupt TF0_VECTOR    using 2
  68          {
  69   1          static unsigned char data loops=0;
  70   1          loops++;
  71   1          if(loops<=UserLoop) return;
  72   1          TL0 += UserReload; //重装TL0
  73   1          loops=0;
  74   1      
  75   1      #ifdef BUZZER
  76   1      #ifdef FRQBUZZER
                      if(bzstart)
                              BUZZER = ~BUZZER;
                      else
              #endif
  81   1      #endif
  82   1          if(UserTimerMode)
  83   1              TimerEvent();
  84   1      }
  85          
  86          void IntSysTimer( void ) interrupt TF1_VECTOR   using 1
  87          {
  88   1          static unsigned char data loops=0;
  89   1          loops++;
  90   1          if(loops<=SysLoop) return;
  91   1          TH0 += SysReload;   //重装TH0
  92   1          loops=0;
  93   1          MS++;
  94   1          MSbyte++;
  95   1      
  96   1          SysTimerEvent();//调用户程序
  97   1      
  98   1              if(bzstart)
  99   1              {
 100   2                      if(bztime)
 101   2                              bztime --;
 102   2                      else
 103   2                              buzzerstop();
 104   2              }
 105   1      }
 106          
 107          bit InitTimer( unsigned char clk ) //use TH0
 108          {
 109   1          if((TMOD & 0xf0) != 0x03)
 110   1          {
 111   2              TMOD &= 0xf0;
 112   2              TMOD |= 0x03;       //方式3,两个8位定时器
 113   2          }
 114   1          SysClk=clk;
 115   1          switch(clk)
 116   1          {
C51 COMPILER V7.07   TIMER                                                                 12/06/2003 18:49:09 PAGE 3   

 117   2              case CLK11M0592:        // for 6clk/cyl, double 
 118   2                  SysLoop=7;
 119   2                  SysReload=206;  //256-153+1 //3*256+153=11059200/12000
 120   2                  break;
 121   2              case CLK12M0000:
 122   2                  SysLoop=3;
 123   2                  SysReload=25;   //256-232+1 //3*256+232=12000000/12000
 124   2                  break;
 125   2              case CLK14M7456:        // for 6clk/cyl, double 
 126   2                  SysLoop=9;
 127   2                  SysReload=103;   //256-205+1 //3*256+205=14745600/12000
 128   2                  break;
 129   2              case CLK24M0000:
 130   2                  SysLoop=7;
 131   2                  SysReload=49;   //256-208+1 //7*256+208=24000000/12000
 132   2                  break;
 133   2              default:
 134   2                  return 0;
 135   2          }
 136   1          PT1=0;
 137   1          
 138   1          #ifdef C51RX2
 139   1          IPH = IP;   ////////////////////////////////////
 140   1          PT1 = 1;                // 优先级1
 141   1          #endif
 142   1          
 143   1          TH0=SysReload;          // reset system timer
 144   1          TR1=1;                  // TH0 run
 145   1          enable();               // enable global interrupt
 146   1          ET1=1;                  // enable TH0 interrupt
 147   1      
 148   1          return 1;
 149   1      }
 150          
 151          void InitUserTimer( unsigned int cycles, bit flag) //reentrant //use TL0
 152          {
 153   1          unsigned char i;
 154   1          unsigned int tmp;
 155   1      
 156   1      #ifdef FRQBUZZER
                      bzstart = 0;                                                    // stop buzzer for user use timer
              #endif
 159   1          if(flag == 0)
 160   1          {
 161   2              UserTimerMode = 0;
 162   2              TL0 = 0 - cycles;                   // RESET TL0
 163   2              TF0 = 0;                            // 防止意外中断
 164   2              TR0 = 1;                            // user timer run
 165   2              ET0 = 0;                            // disable interrupt
 166   2          }
 167   1          else
 168   1          {
 169   2              UserTimerMode = 1;
 170   2              tmp=cycles;                         //cycles
 171   2              for(i=0;tmp>256;i++)    tmp -= 256;
 172   2              UserLoop=i;
 173   2              UserReload=1-tmp;                   //(unsigned char)(256-tmp+1);
 174   2      
 175   2              PT0=1;                              // 高优先级
 176   2              #ifdef C51RX2
 177   2              IPH = IP;   ////////////////////////////////////
 178   2              #endif                              // 优先级 3
C51 COMPILER V7.07   TIMER                                                                 12/06/2003 18:49:09 PAGE 4   

 179   2          
 180   2              TL0=UserReload;                     // reset user timer
 181   2              TR0=1;                              // start user timer
 182   2              TF0=0;                              // 防止意外中断
 183   2              ET0=1;                              // enable interrupt
 184   2                  enable();
 185   2          }
 186   1      }
 187          
 188          void delay( unsigned int time )
 189          {
 190   1          unsigned int data tmp;
 191   1          tmp = MS;
 192   1          while(MS - tmp < time)
 193   1              {
 194   2                      //ResetWDT();   // reset watchdog
 195   2              }
 196   1      }
 197          
 198          void dummy(void){}       // 空操作
 199          
 200          #ifdef BUZZER
 201          #ifdef FRQBUZZER
              void buzzer(unsigned char bzfrq, unsigned int time)
              {
                      switch(bzfrq)
                      {
                              case BZFRQ2K:
                                      switch(SysClk)
                                      {
                                              case CLK11M0592:
                                                      InitUserTimer(461, 1);
                                                      break;
                                              case CLK14M7456:
                                                      InitUserTimer(614, 1);
                                                      break;
                                              case CLK12M0000:
                                                      InitUserTimer(500, 1);
                                                      break;
                                              default:
                                                      break;
                                      }
                                      break;
              
                              case BZFRQ4K:
                                      switch(SysClk)
                                      {
                                              case CLK11M0592:
                                                      InitUserTimer(230, 1);
                                                      break;
                                              case CLK14M7456:
                                                      InitUserTimer(307, 1);
                                                      break;
                                              case CLK12M0000:
                                                      InitUserTimer(250, 1);
                                                      break;
                                              default:
                                                      break;
                                      }
                                      break;
                              
                              default:
C51 COMPILER V7.07   TIMER                                                                 12/06/2003 18:49:09 PAGE 5   

                                      break;
                      }
                      bztime = time;
                      bzstart = 1;
              }
              
              void buzzerstop(void)
              {
                      DiUserTimer();
                      bzstart = 0;
                      bztime = 0;
                      BUZZER = 1;
              }
              #else
 255          void buzzer(unsigned int time)
 256          {
 257   1              bztime = time;
 258   1              bzstart = 1;
 259   1              BUZZER = 0;
 260   1      }
 261          
 262          void buzzerstop(void)
 263          {
 264   1              bztime = 0;
 265   1              bzstart = 0;
 266   1              BUZZER = 1;
 267   1      }
 268          #endif  //def frqbuzzer
 269          #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    319    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      1    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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