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

📄 straincollector.lst

📁 51单片机实现接收桥梁健康监测数据的代码,主要测量桥梁挠度!!数据通过GPRS传送!
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE STRAINCOLLECTOR
OBJECT MODULE PLACED IN StrainCollector.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE StrainCollector.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /* 应变采集器单片机程序 */
   2          /* 16路数据采集,采用P4口控制*/
   3          /* Writed by: yg*/
   4          /* Date: 2008-7-24 */
   5          #pragma small
   6          #include <stdio.h>
   7          #include <reg52.h>
   8          #include <string.h>
   9          #include <intrins.h>
  10          #include "StrainCollector.h"
  11          
  12          
  13          #include "timer.c"
  14          #include "gprs.c"
  15          
  16          uchar g_totimes;
  17          // todo: 发送数据的时候需要取消sleep
  18          
  19          // todo: 休眠功能改造,深度休眠醒来后,改定时器为定时
  20          //          深度休眠前,改定时器为报警
  21          // todo: 取消应变采集中的调试信息:0X55 etc.
  22          /******************************************
  23          Init the Chip
  24          初始化单片机内容
  25          *****************************************/
  26          void Init_Chip()
  27          {
  28   1              //      P1_5 = 0;
  29   1          P1_0 = 0;   // 非省电模式
  30   1              //P1_2 = 1;                温度
  31   1              P1_7 = 0;
  32   1              //P1_3 = 1;      //89c52
  33   1              P1_3 = 0;    //89c54
  34   1              P1_4 = 1;    //89c54
  35   1              //      P1_1 = 1;
  36   1              P0_0 = 1;
  37   1              P0_1 = 1;
  38   1              P0_2 = 1;
  39   1              P0_3 = 1;
  40   1              P0_4 = 1;
  41   1              P0_5 = 0;
  42   1              P0_6 = 0;
  43   1              P0_7 = 0;
  44   1              P3_5 = 0;
  45   1              P2 = 0; //8.23 new add
  46   1              //      P4 = 0;
  47   1              
  48   1          // yg add
  49   1          statusFlag = 0;
  50   1          BSLPFLG = 1;
  51   1              
  52   1          // init the timer value
  53   1          g_dslpTime[SEC] = 0;
  54   1          g_dslpTime[MIN] = 0;
  55   1          g_dslpTime[HOUR] = 1;
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 2   

  56   1          g_dslpTime[DAY] = 0;
  57   1          g_dslpTime[MONTH] = 0;
  58   1          g_dslpTime[YEAR] = 0;
  59   1          
  60   1          // todo: close the timer0, timer1 interrupt. 
  61   1          // todo: open the serial interrupt.
  62   1      }
  63          
  64          /******************************************
  65          Init the Timer0 INT
  66          初始化定时器0
  67          *****************************************/
  68          void Init_Timer0INT()
  69          {
  70   1              TMOD = 0x11;
  71   1              //      TCON = 0xAF;            //NEW ADD 中断
  72   1              TH0 = 0xFB;                             //400HZ方波
  73   1              TL0 = 0xA2;
  74   1              TR0 = 1;                                //启动T0
  75   1              ET0 = 1;                                //允许定时器0中断
  76   1          
  77   1          // 初始化激励信号相关变量
  78   1          BSWOVER = 0;
  79   1              BSDGOT = 0;
  80   1      }
  81          
  82          /******************************************
  83          Init the Serial INT
  84          初始化串口
  85          *****************************************/
  86          void Init_SerialINT()
  87          {
  88   1              T2CON = 0x34;
  89   1              RCAP2H = 0xFE;     //11.0592M晶振
  90   1              TH2 = 0xFE;
  91   1              RCAP2L = 0xE0;
  92   1              TL2     = 0xE0;
  93   1      /*
  94   1              RCAP2H = 0xFE;     //12M晶振
  95   1              TH2 = 0xFE;        
  96   1              RCAP2L = 0xC8;
  97   1              TL2     = 0xC8;
  98   1      */
  99   1              SCON = 0x50;
 100   1              ES = 0;         //串行口中断使能位
 101   1              ET2 = 0;
 102   1              TR2 = 1;
 103   1      //      TI = 1;
 104   1      }
 105          
 106          void Init_Interrupt()
 107          {
 108   1          Init_Timer0INT();
 109   1          Init_SerialINT();
 110   1      
 111   1              //cpu开中断
 112   1              EX0 = 1;                                //开外部中断
 113   1              EX1 = 1;
 114   1              IT0 = 1;
 115   1              IT1 = 0;
 116   1      //      TI = 1;
 117   1              EA = 1;
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 3   

 118   1      }
 119          /******************************************
 120          Init the Strainors
 121          初始化应变计
 122          *****************************************/
 123          void Init_Strainor()
 124          {
 125   1          uchar i;
 126   1          uchar f = 1;
 127   1          g_strainflag = 0;
 128   1          // todo 开采集电路电源
 129   1          P3_6 = 0;
 130   1          // 是串口发
 131   1          for (i=0; i<STNORNUM; i++, f <<= 1)
 132   1          {
 133   2              //  选择相应的通道
 134   2              P4 = i;
 135   2              P1_5 = 0;      //new change
 136   2                      BSWOVER = 0;
 137   2                      delay10ms();
 138   2              //  开始发方波.
 139   2              Init_Timer0INT();
 140   2              while (!BSWOVER);
 141   2              
 142   2              // 设置timeout时间
 143   2              set_timeout(40);
 144   2                      BSDGOT = 0;
 145   2              // 等待timeout,或者外部中断。
 146   2              while (!BSDGOT)
 147   2              {
 148   3                  if (BTIMEOUT)
 149   3                      break;
 150   3              }
 151   2              if(!BSDGOT)
 152   2              {
 153   3                  // timeout时,用0改写数据。
 154   3                  g_strainData[i][0] = 0;
 155   3                  g_strainData[i][1] = 0;
 156   3                  g_strainData[i][2] = 0;
 157   3                  g_strainData[i][3] = 0;
 158   3                  g_strainData[i][4] = 0;
 159   3              }
 160   2              else
 161   2              {
 162   3                  g_strainflag |= f;
 163   3                  
 164   3                  g_strainData[i][0] = g_sdata[0];
 165   3                  g_strainData[i][1] = g_sdata[1];
 166   3                  g_strainData[i][2] = g_sdata[2];
 167   3                  g_strainData[i][3] = g_sdata[3];
 168   3                  g_strainData[i][4] = g_sdata[4];
 169   3              }
 170   2                  count++;
 171   2                  ET0 = 1;
 172   2              // 找到下一个有效的应变计,设置选通,再开始发方波
 173   2          }
 174   1          // todo: 关采集电路电源
 175   1              //TODO:  初始化16个应变计的读数
 176   1      }
 177          
 178          ////////////////////////////////////////////////////
 179          // Interrupt functions
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 4   

 180          //
 181          
 182          /******************************************
 183          EXTERNAL INT 0, using 2 grouped registers
 184          外部中断0,使用第2组寄存器
 185          用来读取应变计的读数
 186          *****************************************/
 187          void External0_INT(void) interrupt 0 using 2
 188          {
 189   1          // 
 190   1              unsigned char x_h,x_m,x_l,y_h,y_l;
 191   1              
 192   1              //                      TR1 = 0;
 193   1              ET1 = 0;
 194   1              
 195   1              P2 = 0;
 196   1              P0_1 = 0;         //选通第1个计数器
 197   1              y_l = P2;                 //取出待测频率低8位
 198   1              P0_1 = 1;
 199   1              P2 = 0;
 200   1              P0_0 = 0;         //选通第2个计数器
 201   1              y_h = P2;                 //取出待测频率高4位
 202   1              P0_0 = 1;
 203   1              P2 = 0;
 204   1              P0_2 = 0;         //选通第3个计数器
 205   1              x_l = P2;                 //取出时基频率低8位
 206   1              P0_2 = 1;
 207   1              P2 = 0;       //8.23 new add
 208   1              P0_3 = 0;     //选通第4个计数器
 209   1              x_m = P2;                 //取出时基频率中间8位
 210   1              P0_3 = 1;
 211   1              P2 = 0;           //8.23 new add
 212   1              P0_4 = 0;         //选通第5个计数器
 213   1              x_h = P2;                 //取出时基频率高8位
 214   1              P0_4 = 1;
 215   1              //                      P2 = 0;
 216   1              
 217   1              
 218   1              delay500ms();//8.23change delay200ms();
 219   1              
 220   1              //                      TR1 = 0;
 221   1              //printf("%c%c",TH1,TL1);
 222   1              
 223   1              //8.23change delay200ms();
 224   1              P0_5 = 0;        //关断D触发器
 225   1              P1_4 = 1;        //关断多路选择器
 226   1              P1_5 = 1;        //清零计数器
 227   1              //      delay1ms();
 228   1              //                      delay200ms();
 229   1              //      P1_3 = 1;  //new change 89c52 8.27
 230   1              //      P1_2 = 1;
 231   1          
 232   1          // yg mod for del temperature @ 08-7-31.
 233   1              //sign =! sign;
 234   1          sign = 0;
 235   1          // end yg mod 
 236   1              
 237   1          flag = 0;
 238   1              //                      P1_1 =! P1_1;              //控制继电器 89c51
 239   1                      //P1_2 =! P1_2;            //89c54                 温度
 240   1              /*6.25 new add 16路*/
 241   1              g_sdata[0] = x_h;
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 5   

 242   1              g_sdata[1] = x_m;
 243   1              g_sdata[2] = x_l;
 244   1              g_sdata[3] = y_h;
 245   1              g_sdata[4] = y_l;
 246   1          // yg add 
 247   1          BSDGOT = 1;
 248   1              count++;
 249   1      //    P4 = count;
 250   1          
 251   1              P1_5 = 0;      //new change
 252   1      //      ET0 = 1;
 253   1              if(count==0x8)
 254   1              {
 255   2                      //                                      PCON = 0x02;         //单片机进入掉电模式
 256   2      //              P4 = 0;
 257   2                      //EX0 = 0;
 258   2                      count = 0;
 259   2              ET0 = 0;
 260   2              }
 261   1              
 262   1              /*6.259 new add 16路 end*/
 263   1      }
 264          
 265          /******************************************
 266          Timer 0, using 1 grouped registers
 267          定时器0,使用第1组寄存器
 268          用来产生应变计的激振信号
 269          *****************************************/
 270          void Timer0_INT (void) interrupt 1 using 1
 271          {
 272   1              if(sign==0)                                                                     
 273   1              {
 274   2                      if(sign1==0)
 275   2                      {
 276   3                      if(flag<30)                                                                     
 277   3                              {
 278   4                                      time0();
 279   4                              }
 280   3                      else if(flag>=30&&flag<60)                                      
 281   3                              {
 282   4                                      time1();
 283   4                              }
 284   3                      else if(flag>=60&&flag<90)
 285   3                              {
 286   4                                      time2();
 287   4                              }
 288   3                      else if(flag>=90&&flag<120)
 289   3                              {
 290   4                                      time3();
 291   4                              }
 292   3                      else if(flag>=120&&flag<150)
 293   3                              {
 294   4                                      time4();
 295   4                              }
 296   3                      else if(flag>=150&&flag<180)
 297   3                              {
 298   4                                      time5();
 299   4                              }
 300   3                      else if(flag>=180&&flag<210)
 301   3                              {
 302   4                                      time6();
 303   4                              }
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 6   

 304   3                      else if(flag>=210&&flag<240)
 305   3                              {
 306   4                                      time7();
 307   4                              }
 308   3                      else if(flag>=240&&flag<270)
 309   3                              {
 310   4                                      time8();
 311   4                              }
 312   3                      else if(flag>=270&&flag<300)
 313   3                              {
 314   4                                      time9();
 315   4                              }
 316   3                      else
 317   3                              {
 318   4                                      flag = 0;
 319   4                                      sign1 = 1;
 320   4                              }

⌨️ 快捷键说明

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