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

📄 tm-801.lst

📁 这是一个成熟的用于处理压力传感器输出的模拟信号的程序.
💻 LST
字号:
C51 COMPILER V7.06   TM_801                                                                07/16/2008 16:14:09 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TM_801
OBJECT MODULE PLACED IN TM-801.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE TM-801.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include <intrins.h>
   3          #include "TypeDefines.h"
   4          #include "delay.h"
   5          #define STOP 0
   6          #define START 1
   7          #define POSITIVE 0                                              //定义正向(推力)
   8          #define NEGATIVE 1                                              //定义反向(拉力)
   9          #define ADJUST 0xaa                                             //校准判定值
  10          /****************************************
  11          ***I/O口定义
  12          *****************************************/
  13          sbit sda=P1^0;
  14          sbit rclk=P1^1;
  15          sbit sclk=P1^2;
  16          sbit stop=P2^0;
  17          sbit ad_CLK=P2^5;
  18          sbit ad_CS=P2^7;
  19          sbit ad_DO=P2^6;
  20          sbit conrtol=P1^6;
  21          sbit ZERO=P3^5;
  22          
  23          /*******************************************
  24          ***函数声明
  25          *********************************************/
  26          void disp(uint disp_dat);                                                                       //显示函数
  27          uint ad_read(uchar flag) reentrant;                                                     
  28          uint lvbo(uint *buf) reentrant;
  29          void delay_xus(uchar x);
  30          void delay_xms(uint x);
  31          /********************************************
  32          ***数据表
  33          ********************************************/
  34          uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};  //7段字码表"0"~"9"
  35          
  36          /*******************************************
  37          ***全局变量
  38          *********************************************/
  39          uint old_result=0;
  40          uint new_result=0;
  41          uint adj=0;
  42          uchar polar=0;
  43          uchar adj_way=POSITIVE;
  44          /*******************************************
  45          ***主函数
  46          *********************************************/
  47          void main(void)
  48          {
  49   1      
  50   1              TMOD=0x11;
  51   1              TH1=(65536-50000)/256;
  52   1              TL1=(65536-50000)%256;
  53   1              EA=1;
  54   1              ET1=1;  
  55   1              delay_xms(1000);
C51 COMPILER V7.06   TM_801                                                                07/16/2008 16:14:09 PAGE 2   

  56   1              adj=ad_read(ADJUST);
  57   1              TR1=1;
  58   1              for(;;)
  59   1              {
  60   2                      if(ZERO==0)
  61   2                              {
  62   3                                      delay_xms(30);
  63   3                                      if(ZERO==0)
  64   3                                              {
  65   4                                                      adj=ad_read(ADJUST);
  66   4                                              }
  67   3                              }
  68   2              }
  69   1              
  70   1      }
  71          /********************************************
  72          ***显示函数
  73          **********************************************/
  74          void disp(uint disp_dat)
  75          {
  76   1              uchar i,j,dat;
  77   1              for(j=0;j<4;j++)
  78   1              {
  79   2                      dat=table[disp_dat%10];
  80   2                      for(i=0;i<8;i++)
  81   2                      {
  82   3                              dat<<=1;
  83   3                              if(CY)
  84   3                                      sda=1;
  85   3                              else
  86   3                                      sda=0;
  87   3                              sclk=0;
  88   3                              sclk=1;
  89   3                      }
  90   2                      disp_dat/=10;
  91   2              }
  92   1      
  93   1              if(polar==POSITIVE)                                                                                     //显示正负号(正:显示”0“,负:显示”-“)
  94   1                      {
  95   2                              dat=table[0];
  96   2                      }
  97   1              else
  98   1                      {
  99   2                              dat=0xbf;
 100   2                      }
 101   1                              for(i=0;i<8;i++)
 102   1                              {
 103   2                                      dat<<=1;
 104   2                                      if(CY)
 105   2                                              sda=1;
 106   2                                      else
 107   2                                              sda=0;
 108   2                                      sclk=0;
 109   2                                      sclk=1;
 110   2                              }
 111   1              rclk=0;
 112   1              rclk=1;
 113   1      }
 114          
 115          /**********************************************
 116          ***A/D采样函数
 117          **********************************************/
C51 COMPILER V7.06   TM_801                                                                07/16/2008 16:14:09 PAGE 3   

 118          uint ad_read(uchar flag) reentrant
 119          {
 120   1              ulong temp=0;
 121   1              uint dat[9]={0};
 122   1              uchar i=0,j=0;
 123   1              ad_CLK=0;
 124   1              for(j=0;j<9;j++)
 125   1              {
 126   2                      ad_CS=0;
 127   2                      _nop_();
 128   2                      ad_CLK=1;
 129   2                      _nop_();
 130   2                      ad_CLK=0;
 131   2                      _nop_();
 132   2                      ad_CLK=1;
 133   2                      _nop_();
 134   2                      ad_CLK=0;
 135   2                      _nop_();
 136   2                      ad_CLK=1;
 137   2                      _nop_();
 138   2                      ad_CLK=0;
 139   2                      _nop_();
 140   2                      for(i=0;i<12;i++)
 141   2                              {
 142   3                                      ad_CLK=1;
 143   3                                      dat[j]=dat[j]<<1;
 144   3                                      if(ad_DO)       
 145   3                                              dat[j]++;
 146   3                                      ad_CLK=0;       
 147   3                                      _nop_();
 148   3                              }
 149   2                      ad_CS=1;
 150   2                      ad_CLK=1;
 151   2                      delay_xus(70);
 152   2              }
 153   1              
 154   1              temp=lvbo(dat); 
 155   1              if(flag==ADJUST)
 156   1                      {
 157   2                              temp*=10000;
 158   2                              temp/=4096;
 159   2                      }
 160   1              if(flag!=ADJUST)
 161   1                      {
 162   2                              temp*=10000;
 163   2                              temp/=4096;
 164   2                              
 165   2                              if(temp>=adj)
 166   2                                      {
 167   3                                              temp=temp-adj;
 168   3                                              polar=POSITIVE;
 169   3                                      }
 170   2                              else
 171   2                                      {
 172   3                                              temp=adj-temp;
 173   3                                              polar=NEGATIVE;
 174   3                                      }
 175   2                      //      temp=temp*2000;
 176   2                      //      temp=temp/912;
 177   2                              temp=temp*1000;
 178   2                              temp=temp/945;
 179   2                              if(temp<50)
C51 COMPILER V7.06   TM_801                                                                07/16/2008 16:14:09 PAGE 4   

 180   2                                      {
 181   3                                              //temp=0;
 182   3                                      }
 183   2                              else
 184   2                                      {
 185   3                                              temp=temp-30;
 186   3                                      }
 187   2                      }
 188   1      
 189   1              return (uint)temp;              
 190   1      }
 191          
 192          /****************************************************
 193          ***中值滤波
 194          *****************************************************/
 195          uint lvbo(uint *buf) reentrant
 196          {
 197   1              uint temp=0;
 198   1              uchar i,j;
 199   1              for(i=0;i<8;i++)
 200   1              {
 201   2                      for(j=i+1;j<9;j++)
 202   2                      {
 203   3                              if(buf[i]>buf[j])
 204   3                                      {
 205   4                                              temp=buf[i];
 206   4                                              buf[i]=buf[j];
 207   4                                              buf[j]=temp;
 208   4                                      }
 209   3                      }
 210   2              }
 211   1              temp=buf[1]+buf[2]+buf[3]+buf[4]+buf[5]+buf[6]+buf[7];
 212   1              temp=temp/7;
 213   1              return temp;
 214   1      }
 215          
 216          
 217          
 218          /**********************************************
 219          ***time1中断
 220          ***********************************************/
 221          void timer1() interrupt 3
 222          {
 223   1              static uchar disp_time=0;
 224   1      
 225   1              TH1=(65536-50000)/256;
 226   1              TL1=(65536-50000)%256;
 227   1              disp_time++;
 228   1              if(disp_time==4)
 229   1                      {
 230   2                              disp_time=0;
 231   2                              new_result=ad_read(0);
 232   2      //********************************************          
 233   2                              if(new_result < old_result)
 234   2                                      {
 235   3                                              if(new_result<100)
 236   3                                                      {
 237   4                                                              TR1=0;
 238   4                                                              delay_xms(1000);
 239   4                                                              old_result=new_result;
 240   4                                                              TR1=1;
 241   4                                                      }
C51 COMPILER V7.06   TM_801                                                                07/16/2008 16:14:09 PAGE 5   

 242   3                                              else
 243   3                                                      new_result=old_result;
 244   3                                      }
 245   2                              else
 246   2                                      {
 247   3                                              old_result=new_result;
 248   3                                      }
 249   2      //*************************************************/            
 250   2                              disp(new_result);
 251   2                      }
 252   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1217    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9       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 + -