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

📄 control.lst

📁 通过调节一个可变电阻得到变化的电压来模拟一个湿度度传感器
💻 LST
字号:
C51 COMPILER V8.05a   CONTROL                                                              10/28/2008 10:30:04 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE CONTROL
OBJECT MODULE PLACED IN control.OBJ
COMPILER INVOKED BY: F:\Keil C51 V8\C51\BIN\C51.EXE control.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          #include "commons.h"
   3          
   4          sbit _p32 = P3^2;
   5          sbit _p30 = P3^0;
   6          sbit _p25 = P2^5;
   7          sbit _p26 = P2^6;
   8          sbit _p27 = P2^7;
   9          
  10          unsigned char _pcount = 0;                 //定时中断总次数,每100次为一个输出总周期
  11          unsigned char _pout = 0;                   //占空比对应的定时中断次数(低电平有效的周期数)
  12          float _sigma_i = 0.0;                      //PWM占空比
  13          
  14          unsigned int ad();
  15          void da(unsigned int value);       //串口DA转变
  16          unsigned int filter(unsigned int value, unsigned char flt_idx);  //数字滤波函数
  17          void ctrl_init(void) {                     //定时器中断初始化
  18   1              TMOD = 0x02;                               //定时器0方式2
  19   1              TH0  = 0;
  20   1              TL0  = 0;       
  21   1              ET0  = 1;
  22   1              TR0  = 1;
  23   1              EA   = 1;
  24   1      }
  25          
  26          void _ctrl_proc(void) interrupt 1 {      //比例控制
  27   1              if (++_pcount == 100) {
  28   2                      _pcount = 0;
  29   2                      _pout = (unsigned char)(100.0 * (1.0 - _sigma_i)); //每个总周期结束时确定下次的输出周期
  30   2              }
  31   1              if (_pcount < _pout) {                    //判断定时中断次数是否达到占空比对应的中断次数
  32   2                      _p25 = 1;       
  33   2              } else {
  34   2                      _p25 = 0;
  35   2              }
  36   1      }
  37          
  38          void ctrl_routine(void) {
  39   1              char led_buf[6];
  40   1              unsigned int value;
  41   1              unsigned char d;
  42   1              
  43   1              value = filter(ad(), _menu_value[3]);//数字滤波
  44   1              da(value);                           //D/A转换
  45   1      
  46   1              //超限报警
  47   1              if (value > _menu_value[0]) {
  48   2                      _p26 = 0;
  49   2                      _p27 = 1;
  50   2              } else if (value <= _menu_value[0] && value >= _menu_value[1]) {
  51   2                      _p26 = 1;
  52   2                      _p27 = 1;
  53   2              } else {
  54   2                      _p26 = 1;
  55   2                      _p27 = 0;
C51 COMPILER V8.05a   CONTROL                                                              10/28/2008 10:30:04 PAGE 2   

  56   2              }       
  57   1              
  58   1              //根据比例度确定输出占空比_sigma_i
  59   1              if (value > _menu_value[2]) {               //大于控制目标时,占空比定为0
  60   2                      _sigma_i = 0;
  61   2              } else {
  62   2                      d = (int)(100.0 * (float)value / (float)_menu_value[2]); //计算是否进入临届比例度
  63   2                      if (d < _menu_value[4]) {                       //若没有进入,占空比定为100%
  64   3                              _sigma_i = 1.0;
  65   3                      } else {                                                        //否则,计算占空比
  66   3                              _sigma_i = (float)(100 - d) / (float)(100 - _menu_value[4]);
  67   3                      }
  68   2              }
  69   1      
  70   1              if (_menu_status == MENU_OFF) {
  71   2                      led_buf[0] = '^';
  72   2                      to_string(&led_buf[1], 5, value);
  73   2                      print(led_buf);                 
  74   2              }
  75   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    393    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       8
   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 + -