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

📄 timer.lst

📁 此源码为商用的电力抄表系统的主机端源程序。通过电力载波模块
💻 LST
字号:
C51 COMPILER V7.09   TIMER                                                                 01/12/2007 09:30:15 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN timer.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE timer.c ROM(COMPACT) OPTIMIZE(9,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND PREP
                    -RINT

line level    source

   1          /*=============================================================================*/
   2          // time.c  - source file for lme2200 API
   3          // 
   4          // Copyright 2005, Leaguer MicroElectronics Co., Ltd
   5          // www.leaguerme.com
   6          /*=============================================================================*/
   7          
   8          #include <REG922.H>
   9          
  10          #include "sart.h"
  11          #define uint unsigned int
  12          #define uchar unsigned char
  13          
  14          uchar tm_count, count_reload; 
  15          uchar inter;
  16          // Logic timers
  17          void (*t0_proc)();   // pointer to a functin that returns void
  18          uint t0_count;
  19          uint t0_val;
  20          bit t0_enable;
  21          
  22          void (*t1_proc)();   // pointer to a functin that returns void
  23          uint t1_count;
  24          uint t1_val;
  25          bit t1_enable;
  26          /**/
  27          void (*t2_proc)();   // pointer to a functin that returns void
  28          uint t2_count;
  29          uint t2_val;
  30          bit t2_enable;
  31          
  32          void (*t3_proc)();   // pointer to a functin that returns void
  33          uchar t3_count;
  34          uchar t3_val;
  35          bit t3_enable;
  36          /**/
  37          void (*t4_proc)();   // pointer to a functin that returns void
  38          uint t4_count;
  39          uint t4_val;
  40          bit t4_enable;
  41          
  42          /*=============================================================================*/
  43          
  44          void timer0_init(uchar interval, uchar count)
  45          {
  46   1      
  47   1        
  48   1      
  49   1        TMOD = (TMOD & 0xF0) | 0x01;  /* Set Mode 2 (8 bit reload) 使用T0与串口*/
  50   1        TAMOD = 0x00;              
  51   1      
  52   1        TH0 = interval;  // count 185 times from 71 to 256   
  53   1                     // = 50 us, Reload TL0 to count count_val clocks  TH0 = 0x47 */
  54   1        TL0 = 0;             // In LPC922
C51 COMPILER V7.09   TIMER                                                                 01/12/2007 09:30:15 PAGE 2   

  55   1        inter=TH0;
  56   1       
  57   1        EX1 = 1;        //<----------------开外部中断1
  58   1        IT1 = 1;        //<---------------- 外部中断下沿触发
  59   1        ET0 = 1;                      /* Enable Timer 0 Interrupts */
  60   1        TR0 = 1;                      /* Start Timer 0 Running */
  61   1        EA = 1;                       /* Global Interrupt Enable */
  62   1      
  63   1       // IP0 = 0X02;   // TO定时器为一级优先级
  64   1       // IP0H = 0X00;
  65   1        count_reload = count;
  66   1        tm_count = count;
  67   1      
  68   1        t0_enable = 0;
  69   1        t1_enable = 0;
  70   1        t2_enable = 0;
  71   1        t3_enable = 0;
  72   1        t4_enable = 0;
  73   1      }
  74          
  75          
  76          /*=============================================================================*/
  77          // Timer 1 Interrupt Service Routine.
  78          
  79          // Interrupt is generated everytime timer1 overflows.
  80          /*=============================================================================*/
  81          
  82          void timer0_ISR (void) interrupt 1 
  83          {
  84   1        TH0   = inter;                  //重装计时 1ms
  85   1        TL0    = 0; 
  86   1      
  87   1      
  88   1      
  89   1         if (t0_enable == 1) {  //1.6秒定时
  90   2            t0_count++;
  91   2            if (t0_count == t0_val) {
  92   3                  t0_count = 0;
  93   3                  t0_proc();
  94   3                }
  95   2           }
  96   1      
  97   1         if (tm_count-- == 0) {//<--------------计10ms
  98   2              
  99   2           tm_count = count_reload;   //10
 100   2      
 101   2          if (t1_enable == 1) {   //定时LED为300ms
 102   3            t1_count++;
 103   3            if (t1_count == t1_val) {
 104   4                  t1_count = 0;
 105   4                  t1_proc();   
 106   4                }
 107   3          }
 108   2      
 109   2          if (t2_enable == 1) {     //40S定时器
 110   3            t2_count++;
 111   3            if (t2_count == t2_val) {
 112   4                  t2_count = 0;
 113   4                  t2_proc();
 114   4                }
 115   3          }
 116   2      
C51 COMPILER V7.09   TIMER                                                                 01/12/2007 09:30:15 PAGE 3   

 117   2        
 118   2        if (t3_enable == 1) {    //150ms计中断脉宽
 119   3            t3_count++;
 120   3            if (t3_count == t3_val) {
 121   4                  t3_count = 0;
 122   4                  t3_proc();
 123   4                }
 124   3          }
 125   2          if (t4_enable == 1) {    //
 126   3            t4_count++;
 127   3            if (t4_count == t4_val) {
 128   4                  t4_count = 0;
 129   4                  t4_proc();
 130   4                }
 131   3         }  
 132   2       }
 133   1      
 134   1      }
 135          /*===============================看门狗初始化==================================*/
 136          
 137          void wdt_init()
 138          {
 139   1        ACC = WDCON;     //<------读取WDT控制寄存器
 140   1        ACC = ACC| 0x74;  //<------置位ACC.2,准备启动WDT
 141   1        WDL = 0xff;      //<------设置8位倒计时初值
 142   1        WDCON = ACC;     //<------启动WDT
 143   1        WFEED1 = 0xA5;           //<------清第一部分
 144   1        WFEED2 = 0x5A;           //<------清第二部分
 145   1      
 146   1      }
 147          /*=============================================================================*/
 148          
 149          void clr_wdt()
 150          {
 151   1        EA     =  0;           //<------关中断
 152   1        WFEED1 = 0xA5;                 //<------清第一部分
 153   1        WFEED2 = 0x5A;                 //<------清第二部分
 154   1        //    Rxok   = ~Rxok;          //<------显示
 155   1        EA     =  1;           //<------开中断
 156   1      }
 157          /*=============================================================================*/
 158          
 159          void setup_t0(uint t0, void (*proc)())
 160          {
 161   1        t0_val = t0;    //100次为1s
 162   1        t0_proc = proc; //时间到设timeout_1s = 1;
 163   1        t0_count = 0;
 164   1        t0_enable = 1;
 165   1        
 166   1      }
 167          /*=============================================================================*/
 168          
 169          
 170          void disable_t0(void)
 171          {
 172   1        t0_enable = 0;
 173   1      }
 174          
 175          
 176          void setup_t1(uint t, void (*proc)())
 177          {
 178   1        t1_val = t;
C51 COMPILER V7.09   TIMER                                                                 01/12/2007 09:30:15 PAGE 4   

 179   1        t1_proc = proc;
 180   1        t1_count = 0;
 181   1        t1_enable = 1;
 182   1        
 183   1      }
 184          
 185          void disable_t1(void)
 186          {
 187   1        t1_enable = 0;
 188   1        Rxok   = 1;
 189   1      }
 190          /**/
 191          /*=============================================================================*/
 192          
 193          void setup_t2(uint t, void (*proc)())
 194          {
 195   1        t2_val = t;
 196   1        t2_proc = proc;
 197   1        t2_count = 0;
 198   1        t2_enable = 1;
 199   1        
 200   1      }
 201          
 202          /*=============================================================================*/
 203          
 204          /**//**/
 205          void disable_t2(void)
 206          {
 207   1        t2_enable = 0;
 208   1      }
 209          
 210          void setup_t3(uint t, void (*proc)())
 211          {
 212   1        t3_val = t;
 213   1        t3_proc = proc;
 214   1        t3_count = 0;
 215   1      
 216   1        t3_enable = 1;
 217   1      }
 218          
 219          void disable_t3(void)
 220          {
 221   1        t3_enable = 0;
 222   1      }
 223          
 224          void setup_t4(uint t, void (*proc)())
 225          {
 226   1        t4_val = t;
 227   1        t4_proc = proc;
 228   1        t4_count = 1;
 229   1      
 230   1        t4_enable = 1;
 231   1      }
 232          
 233          void disable_t4(void)
 234          {
 235   1        t4_enable = 0;
 236   1      
 237   1      }
 238          /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$* /
 239          
 240          /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
C51 COMPILER V7.09   TIMER                                                                 01/12/2007 09:30:15 PAGE 5   

 241          
 242          
 243          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    408    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      5    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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