stimer.lst

来自「mifarea卡程序mifarea卡程序mifarea卡程序」· LST 代码 · 共 316 行

LST
316
字号
C51 COMPILER V8.00   STIMER                                                                04/23/2009 15:56:16 PAGE 1   


C51 COMPILER V8.00, COMPILATION OF MODULE STIMER
OBJECT MODULE PLACED IN .\out_sst89e564\stimer.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\stimer.c LARGE BROWSE ORDER NOAREGS DEBUG OBJECTEXTEND PRINT(.\stime
                    -r.lst) OBJECT(.\out_sst89e564\stimer.obj)

line level    source

   1          //////////////////////////////////////////////
   2          //  timer.c                                 //
   3          //  1毫秒系统时钟                           //
   4          //  自定义时间长度中断调用                  //
   5          //  预定义时间长度中断调用                  //
   6          //  design by: 刘俐训                       //
   7          //////////////////////////////////////////////
   8          
   9          #include <reg52.h>
  10          #include "stimer.h"
  11          #include <v51rx2.h>
  12          #include "t_event.h"
  13          #include "intrsc.h"
  14          //#include "wdt.h"
  15          
  16          #ifndef enable
              #define enable()     EA=1
              #define disable()    EA=0
              #endif
  20          
  21          #ifdef  BUZZEROUT
              #ifndef BZFRQ
              #define BZFRQ
              #define BZFRQ0      0
              #define BZFRQ2K         2
              #define BZFRQ4K         4
              #endif
              #endif
  29          
  30          #ifndef NULL
              #define NULL    (void *)0
              #endif
  33          
  34          #define USER_TIMER  TL0
  35          #define SYS_TIMER   TH0
  36          #define TF_USER     TF0
  37          #define TF_SYS      TF1
  38          
  39          
  40          typedef struct _INTERVAL
  41          {
  42              unsigned int mscycles;
  43              unsigned char tenmsloops;
  44          }INTERVAL;
  45          
  46          typedef struct _TSTATUS
  47          {
  48              union _TICK
  49              {
  50                  unsigned int cycles;
  51                  unsigned char loops;
  52              }Tick;
  53              unsigned int ms;
  54          }TSTATUS;
C51 COMPILER V8.00   STIMER                                                                04/23/2009 15:56:16 PAGE 2   

  55          
  56          static INTERVAL data Interval = {921, 36};
  57          static volatile TSTATUS data TStatus = {0};
  58          
  59          static unsigned char data LedTick = 0;
  60          static unsigned char data LedCnt = 0;
  61          static bit LedFlash = 0;
  62          
  63          static unsigned char data UserReload;
  64          static unsigned long SysClk;
  65          
  66          /*
  67          static unsigned char data Led1Tick = 0;
  68          static unsigned char data Led1Cnt = 0;
  69          static bit Led1Flash = 0;
  70          */
  71          
  72          static unsigned char data BuzzerTick = 0;
  73          static unsigned char data BuzzerCnt = 0;
  74          static unsigned char data BuzzerTimes = 0;
  75          static bit fSetting = 0;
  76          
  77          void IntUserTimer(void) interrupt TF0_VECTOR    using 2
  78          {
  79   1          TL0 += UserReload;
  80   1          TimerEvent();
  81   1      }
  82          
  83          void IntSysTimer( void ) interrupt TF1_VECTOR   using 1
  84          {
  85   1          TStatus.Tick.loops ++;
  86   1          if(TStatus.Tick.loops > Interval.tenmsloops)
  87   1          {
  88   2              TStatus.Tick.loops = 0;
  89   2              TStatus.ms += 10;
  90   2              if(LedFlash)
  91   2              {
  92   3                  LedCnt ++;
  93   3                  if(LedCnt >= LedTick)
  94   3                  {
  95   4                      LedCnt = 0;
  96   4                      LED = ~LED;
  97   4                  }
  98   3              }
  99   2              
 100   2              /*
 101   2              if(Led1Flash)
 102   2              {
 103   2                  Led1Cnt ++;
 104   2                  if(Led1Cnt >= Led1Tick)
 105   2                  {
 106   2                      Led1Cnt = 0;
 107   2                      LED1 = ~LED1;
 108   2                  }
 109   2              }
 110   2              */
 111   2              
 112   2              if((!fSetting) && BuzzerTimes)
 113   2              {
 114   3                  BuzzerCnt ++;
 115   3                  if(BuzzerCnt >= BuzzerTick)
 116   3                  {
C51 COMPILER V8.00   STIMER                                                                04/23/2009 15:56:16 PAGE 3   

 117   4                      BuzzerCnt = 0;
 118   4                      BUZZER = ~BUZZER;
 119   4                      if(BUZZER == BUZZEROFF)
 120   4                      {
 121   5                          BuzzerTimes --;
 122   5                      }
 123   4                  }
 124   3              }
 125   2          }
 126   1      }
 127          
 128          void beep(unsigned char times, unsigned char tick)
 129          {
 130   1          fSetting = 1;
 131   1          BuzzerTick = tick;
 132   1          BuzzerTimes = times;
 133   1          if(times)
 134   1          {
 135   2              BUZZER = BUZZERON;
 136   2          }
 137   1          else
 138   1          {
 139   2              BUZZER = BUZZEROFF;
 140   2          }
 141   1          fSetting = 0;
 142   1      }
 143          
 144          void delay( unsigned int time )
 145          {
 146   1          unsigned int data startms;
 147   1          
 148   1          startms = GetTickCount();
 149   1          
 150   1          while((GetTickCount() - startms) < time)
 151   1              {
 152   2              }
 153   1      }
 154          
 155          unsigned int GetTickCount(void)
 156          {
 157   1          unsigned int data cyl, ms;
 158   1          
 159   1              #ifdef  WATCHDOG
                      //ResetWDT();
                      #endif
 162   1      
 163   1          ET1 = 0;
 164   1          ms = TStatus.ms;
 165   1          cyl = TStatus.Tick.cycles;
 166   1          ET1 = 1;
 167   1          
 168   1          return cyl / Interval.mscycles + ms;
 169   1      }
 170          
 171          unsigned int GetTenTickCount(void)
 172          {
 173   1              unsigned int data tmp;
 174   1              
 175   1              #ifdef  WATCHDOG
                      //ResetWDT();
                      #endif
 178   1              
C51 COMPILER V8.00   STIMER                                                                04/23/2009 15:56:16 PAGE 4   

 179   1              ET1 = 0;
 180   1              tmp = TStatus.ms;
 181   1              ET1 = 1;
 182   1              
 183   1          return tmp;
 184   1      }
 185          
 186          void InitTimer( unsigned long sysclk )
 187          {
 188   1          unsigned long data ltmp;
 189   1          
 190   1          if((TMOD & 0xf0) != 0x03)
 191   1          {
 192   2              TMOD &= 0xf0;
 193   2              TMOD |= 0x03;
 194   2          }
 195   1      
 196   1          SysClk = sysclk;
 197   1          ltmp = SysClk / 100;
 198   1          Interval.tenmsloops = (unsigned char)(ltmp >> 8);
 199   1          Interval.mscycles = ltmp / 10;
 200   1          
 201   1          SetIntPri(TF1_VECTOR, 0);
 202   1          SetIntPri(TF0_VECTOR, 3);
 203   1          
 204   1          TH0=0;
 205   1          TR1=1;
 206   1          ET1=1;
 207   1          enable();
 208   1      }
 209          
 210          void InitUserTimer(unsigned char rldval, unsigned char startval)
 211          {
 212   1          UserReload = rldval;
 213   1          TL0 = startval;
 214   1          TF0 = 0;
 215   1          TR0 = 1;
 216   1          ET0 = 1;
 217   1      }
 218          
 219          void led(unsigned char ltick)
 220          {
 221   1          if(ltick == 0)
 222   1          {
 223   2              LedFlash = 0;
 224   2              LED = LEDOFF;
 225   2          }
 226   1          else if(ltick == 0xff)
 227   1          {
 228   2              LedFlash = 0;
 229   2              LED = LEDON;
 230   2          }
 231   1          else
 232   1          {
 233   2              LedTick = ltick;
 234   2              LedFlash = 1;
 235   2          }
 236   1      }
 237          
 238          /*
 239          void led1(unsigned char ltick)
 240          {
C51 COMPILER V8.00   STIMER                                                                04/23/2009 15:56:16 PAGE 5   

 241              if(ltick == 0)
 242              {
 243                  Led1Flash = 0;
 244                  LED1 = LEDOFF;
 245              }
 246              else if(ltick == 0xff)
 247              {
 248                  Led1Flash = 0;
 249                  LED1 = LEDON;
 250              }
 251              else
 252              {
 253                  Led1Tick = ltick;
 254                  Led1Flash = 1;
 255              }
 256          }
 257          */
 258          
 259          void StartCLKO(unsigned int div)
 260          {
 261   1          unsigned int data rld;
 262   1          
 263   1          P1_0 = 1;
 264   1          
 265   1          ET2 = 0;
 266   1      
 267   1          T2CON = 0;
 268   1          T2MOD = 0x02;
 269   1          
 270   1          rld = 65536 - div;
 271   1          RCAP2H = rld >> 8;
 272   1          RCAP2L = rld & 0xff;
 273   1          
 274   1          TH2 = 0xff;
 275   1          TL2 = 0xff;
 276   1          
 277   1          TR2 = 1;
 278   1      }
 279          
 280          void dummy(void)
 281          {
 282   1          
 283   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    414    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      4       6
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     13      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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