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

📄 main.lst

📁 定时器及计数器的生成c51源代码
💻 LST
字号:
C51 COMPILER V7.01  MAIN                                                                   06/06/2004 21:51:20 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //**********************************************************************
   2          //功能          : 定时器中断服务程序的安装及计数器的生成
   3          //作者          : lihj
   4          //创建日期      : 2004-06-05
   5          //版本          : V1.0
   6          //修改记录      :
   7          //***********************************************************************
   8          #include "REG51.h"
   9          
  10          #ifndef TRUE
  11          #define TRUE            0
  12          #define FALSE           1
  13          #endif
  14          
  15          //系统宏定义
  16          #define XTAL            12000000                        //系统晶振
  17          #define TIME_BASE       10                                      //时间基准, 以1ms为单位
  18          
  19          //全局变量声明
  20          int      g_wTimerIniValue;                                      //定时器初始化值
  21          int  g_w10msCounter=0;                                  //10ms系统时钟基准
  22          int  g_w100msCounter=0;                                 //100ms计数器
  23          int  g_w1sCounter=0;                                    //1s计数器
  24          int  g_w10sCounter=0;                                   //10s计数器
  25          char g_byUpdateCountFlag=0;                             //更新标志
  26          
  27          //函数声明
  28          char TimerIni(char);                                    //初始化定时器函数
  29          char UpdateCounter(int, int*);                  //计数器生成函数
  30          
  31          //主循环
  32          void main(void)
  33          {
  34   1              //初始化定时器
  35   1              g_wTimerIniValue = 65535 - ((XTAL/12)/1000)*TIME_BASE + 1;              
  36   1                                                                                      //初值=65536 - 定时时间长度
  37   1              TimerIni(0);                                            //将定时器0初始化成10ms定时器
  38   1              
  39   1              EA = 1;                                                         //总中断使能
  40   1      
  41   1              while(1)                                                        //主循环体
  42   1              {
  43   2                      if(g_byUpdateCountFlag)
  44   2                      {
  45   3                              g_byUpdateCountFlag = 0;
  46   3                              //更新计数器 
  47   3                              UpdateCounter(10, &g_w100msCounter);
  48   3                              UpdateCounter(100, &g_w1sCounter);
  49   3                              UpdateCounter(1000, &g_w10sCounter);
  50   3                      }
  51   2              }
  52   1      }
  53                  
  54          //定时器初始化函数
  55          //参数说明      : n, 定时器序号
C51 COMPILER V7.01  MAIN                                                                   06/06/2004 21:51:20 PAGE 2   

  56          //                        ini, 定时器初值, 单位是1ms
  57          char TimerIni(char n)
  58          {
  59   1              if(n == 0)                                                      //使用定时器0
  60   1              {
  61   2                      TMOD = 0X01;                                    //定时器0工作方式1(16位定时器)
  62   2                      TH0 = g_wTimerIniValue >> 8;    //定时器赋初始值
  63   2                      TL0 = g_wTimerIniValue;
  64   2                      ET0 = 1;                                                //允许定时器中断
  65   2                      TR0 = 1;                                                //启动计数
  66   2              }               
  67   1              else if(n == 1)                                         //使用定时器1
  68   1              {
  69   2                      TMOD = 0x10;                                    //工作方式1
  70   2                      TH1 = g_wTimerIniValue >> 8;    //定时器赋初值
  71   2                      TL1 = g_wTimerIniValue;
  72   2                      ET1 = 1;                                                //允许定时器中断
  73   2                      TR1 = 1;                                                //启动计数
  74   2              }
  75   1              else
  76   1              {
  77   2                      return FALSE;
  78   2              }
  79   1      
  80   1              return TRUE;
  81   1      }
  82          
  83          //计数器生成函数
  84          //传入参数      : count, 多少ms计数器,单位1ms
  85          //                      : *pCounter, 指向需要更新的计数器
  86          char UpdateCounter(int count, int *pCounter)
  87          {
  88   1              //计数器长度限幅
  89   1              //更长时间的计数器需要更改时间基准
  90   1              if(count > 65536/TIME_BASE)
  91   1              {
  92   2                      return FALSE;
  93   2              }
  94   1      
  95   1              if((g_w10msCounter != 0) && (g_w10msCounter%count == 0))
  96   1          {
  97   2                      (*pCounter) ++;
  98   2              }
  99   1      
 100   1              return TRUE;
 101   1      }
 102          
 103          //定时器0中断服务程序
 104          //interrupt关键字后的数字指向中断向量号
 105          //using关键字后的数字表示该中断函数使用第几组寄存器
 106          void Timer0Int(void) interrupt 1 using 1
 107          {
 108   1              TL0 += g_wTimerIniValue;
 109   1              TH0 += g_wTimerIniValue>>8;                             //恢复定时器初值
 110   1      
 111   1              g_w10msCounter ++;                                              //10ms计数器累加
 112   1              if(g_w10msCounter >= 60000)
 113   1              {
 114   2                      g_w10msCounter -= 60000;
 115   2              }
 116   1      
 117   1              g_byUpdateCountFlag = 1;                                //更新其它计数器
C51 COMPILER V7.01  MAIN                                                                   06/06/2004 21:51:20 PAGE 3   

 118   1      }
 119          
 120          
 121                  
 122          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    256    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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