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

📄 straincollector.lst

📁 51单片机实现接收桥梁健康监测数据的代码,主要测量桥梁挠度!!数据通过GPRS传送!
💻 LST
📖 第 1 页 / 共 4 页
字号:
 650   1          send_char(g_cmdData[CMDDLEN]);
 651   1          crc ^= g_cmdData[CMDDLEN];
 652   1              
 653   1          for (i=1; i<=g_cmdData[CMDDLEN]; i++)
 654   1          {
 655   2              send_char(g_cmdData[CMDDLEN+i]);
 656   2              crc ^= g_cmdData[CMDDLEN+i];
 657   2                      
 658   2          }
 659   1          send_char(crc);
 660   1              delay10ms();
 661   1      }
 662          
 663          /******************************************
 664          通过串口想管理器发送采集到的应变数据,
 665          输入:g_cmdData, g_strainData, g_gaugeFlag。
 666          *****************************************/
 667          void send_data()
 668          {
 669   1          uchar i=0, mark=1, crc = 0, j=0;
 670   1          g_sendcmdData[CMD] = 0x11;
 671   1          g_sendcmdData[CMDDLEN] = 0;
 672   1          for(i=0; i<8; i++)
 673   1          {
 674   2              if(g_strainflag & mark)
 675   2                  g_sendcmdData[CMDDLEN] += 6;
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 12  

 676   2              mark <<= 1;
 677   2          }
 678   1          
 679   1          mark = 1;
 680   1      //      SBUF = STARTFLAG;
 681   1          send_char(STARTFLAG);
 682   1          crc ^= STARTFLAG;
 683   1          send_char(g_sendcmdData[CMD]);
 684   1          crc ^= g_sendcmdData[CMD];
 685   1          send_char(TID);
 686   1          crc ^= TID;
 687   1          send_char(MID);
 688   1          crc ^= MID;
 689   1          send_char(g_sendcmdData[CMDDLEN]);
 690   1          crc ^= g_sendcmdData[CMDDLEN];
 691   1          for(i=0; i<8; i++)
 692   1          {
 693   2              if(g_strainflag & mark)
 694   2              {
 695   3                  send_char(i);
 696   3                  for(j=0; j<5; j++)
 697   3                  {
 698   4                      send_char(g_strainData[i][j]);
 699   4                      crc ^= g_strainData[i][j];
 700   4                  }
 701   3              }
 702   2              mark <<= 1;
 703   2          }
 704   1          send_char(crc);
 705   1              delay10ms();
 706   1      }
 707          /******************************************
 708          方波产生函数
 709          
 710          *****************************************/
 711          void SW_Gen(uchar th, uchar tl)
 712          {
 713   1          P1_7 =! P1_7;
 714   1          flag++;
 715   1          TH0 = th;
 716   1          TL0 = tl;
 717   1              
 718   1      }
 719          
 720          void set_timeout(uchar msec)
 721          {
 722   1          //   关闭定时器1
 723   1              TR1 = 0;                                //启动T0
 724   1              ET1 = 0;                                //允许定时器0中断
 725   1              
 726   1          // 50ms
 727   1          //TH1 = 0x3C;
 728   1          //TL1 = 0xB0;
 729   1          SET50MS1();
 730   1          g_totimes = msec;
 731   1          BTIMEOUT = 0;
 732   1      
 733   1          //  启动定时器1
 734   1          TR1 = 1;
 735   1          ET1 = 1;
 736   1      }
 737          
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 13  

 738          
 739          /******************************************
 740          设置工作的Timeout时间
 741          1. 设置定时器1的Timeout时间。
 742          2. 启动定时器1
 743          *****************************************/
 744          void set_50ms(uchar times)
 745          {
 746   1          //   关闭定时器1
 747   1              TR1 = 0;                                //启动T0
 748   1              ET1 = 0;                                //允许定时器0中断
 749   1              
 750   1          // 50ms
 751   1          //TH1 = 0x3C;
 752   1          //TL1 = 0xB0;
 753   1          SET50MS1();
 754   1          g_totimes = times;
 755   1      
 756   1         //  启动定时器1
 757   1          TR1 = 1;
 758   1          ET1 = 1;
 759   1      }
 760          
 761          /******************************************
 762          设置工作的Timeout时间
 763          1. 设置定时器1的Timeout时间。
 764          2. 启动定时器1
 765          *****************************************/
 766          void update_timeout()
 767          {
 768   1          //   关闭定时器1
 769   1              TR1 = 0;                                //启动T0
 770   1              ET1 = 0;                                //允许定时器0中断
 771   1              
 772   1          // 50ms
 773   1          //TH1 = 0x3C;
 774   1          //TL1 = 0xB0;
 775   1          SET50MS1();
 776   1      
 777   1          if (BSLPFLG)
 778   1          {   //  设置在浅休眠状态下的Timeout时间:0.5s
 779   2              g_totimes = 10;
 780   2          }
 781   1          else
 782   1          {
 783   2              //  设置在工作状态下的Timeout时间:2s?
 784   2              g_totimes = 40;
 785   2          }
 786   1              
 787   1          //  启动定时器1
 788   1          TR1 = 1;
 789   1          ET1 = 1;
 790   1      }
 791          /******************************************
 792          设置休眠时间并进入休眠状态
 793          。
 794          *****************************************/
 795          void shallow_sleep()
 796          {
 797   1          //  关闭无线通信电源
 798   1          P3_7 = 1;
 799   1          //  关闭采集电路电源
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 14  

 800   1          P3_6 = 1;
 801   1      //      P4_3 = 1;
 802   1      //    EX0 = 0;
 803   1      //      P4 = 0x07;
 804   1          P3_5 = 1;
 805   1          BSLPFLG = 1;
 806   1          
 807   1          // close interrupt except ex1
 808   1          ET1 = 0;
 809   1          P8563_set3s();
 810   1          PCON = 0x02;         //单片机进入掉电模式
 811   1      }
 812          
 813          void deep_sleep()
 814          {
 815   1          //  关闭无线通信电源
 816   1          P3_7 = 1;
 817   1          //  关闭采集电路电源
 818   1          P3_6 = 1;
 819   1      //      P4_3 = 1;
 820   1      //    EX0 = 0;
 821   1      //      P4 = 0x07;
 822   1          P3_5 = 1;
 823   1          BSLPFLG = 1;
 824   1          
 825   1          // close interrupt except ex1
 826   1          ET1 = 0;
 827   1          P8563_setAlarm();
 828   1          PCON = 0x02;         //单片机进入掉电模式
 829   1      }
 830          
 831          /******************************************
 832          设置深度休眠的唤醒时间
 833          输入:g_dslpTime[7]
 834          输出:通过I2C总线将数据传到外部定时器
 835          *****************************************/
 836          void set_wake_time()
 837          {
 838   1          uchar i;
 839   1          for(i=0;i<7;i++)
 840   1          {
 841   2              writeData(i+2,g_dslpTime[i]);
 842   2          }
 843   1      }
 844          /******************************************
 845          wait for wake
 846          设置浅睡眠的Timeout时间
 847          从串口读取唤醒标记
 848          如果Timeout时间到,则转入休眠
 849          读到唤醒标记后,设置工作标志进入工作状态。
 850          输出:修改statusFlag,进入工作状态
 851          *****************************************/
 852          void wait_wake()
 853          {
 854   1          uchar c, times=3;
 855   1          while (0 != times)
 856   1          {
 857   2              c = getchar();
 858   2              if (ISTIMEOUT())
 859   2                  return;
 860   2                      
 861   2              //  在哪里?重置timeout时间
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 15  

 862   2              update_timeout();
 863   2                      
 864   2              if (WAKEMSG == c)
 865   2                  times--;
 866   2              else
 867   2                  times = 3;
 868   2          }
 869   1              
 870   1          BSLPFLG = 0;
 871   1          // todo: 重新设置工作状态的timeout时间
 872   1          
 873   1          // 读取所有唤醒信号
 874   1          while(c != WAKEMSGEND)
 875   1          {
 876   2              if (c != WAKEMSG)
 877   2                  break;
 878   2                  
 879   2              c = getchar();
 880   2              if (ISTIMEOUT())
 881   2                  return;
 882   2          }
 883   1              
 884   1      }
 885          
 886          /******************************************
 887          接收到命令的起始位后返回
 888          
 889          *****************************************/
 890          void get_start_cmd()
 891          {
 892   1          uchar c = getchar();
 893   1          while (STARTFLAG != c)
 894   1              c = getchar();
 895   1      }
 896          
 897          /******************************************
 898          接收命令(0xAA 0x01 0x13 0x01 0x00 B9),保存命令字、地址、CRC    AA02130100BA YB   AA03130100BB  READ
 899          输出:填充g_cmdData。
 900          *****************************************/
 901          void receive_cmd()
 902          {
 903   1          // TODO: add the timeout function
 904   1          uchar c=0x00, crc = STARTFLAG;
 905   1          uchar i;
 906   1          for (i=0; i<20; i++)
 907   1              g_cmdData[i] = 0x00;
 908   1              
 909   1          get_start_cmd();
 910   1          if (ISTIMEOUT())
 911   1              return;
 912   1          // get the cmd
 913   1          g_cmdData[CMD] = getchar();
 914   1          if (ISTIMEOUT())
 915   1              return;
 916   1          crc ^= g_cmdData[CMD];
 917   1      
 918   1          g_cmdData[CMDTID] = getchar();
 919   1          if (ISTIMEOUT())
 920   1              return;
 921   1          crc ^= g_cmdData[CMDTID];
 922   1      
 923   1          g_cmdData[CMDMID] = getchar();
C51 COMPILER V8.02   STRAINCOLLECTOR                                                       10/08/2002 23:21:00 PAGE 16  

 924   1          if (ISTIMEOUT())
 925   1              return;
 926   1          crc ^= g_cmdData[CMDMID];
 927   1      
 928   1          g_cmdData[CMDDLEN] = getchar();
 929   1          if (ISTIMEOUT())
 930   1              return;
 931   1          crc ^= g_cmdData[CMDDLEN];
 932   1              
 933   1          // get data
 934   1          for (i=0; i<g_cmdData[CMDDLEN]; i++)
 935   1          {
 936   2              g_cmdData[CMDDLEN+i+1] = getchar();
 937   2              if (ISTIMEOUT())
 938   2                  return;
 939   2              crc ^= g_cmdData[CMDDLEN+i+1];
 940   2          }
 941   1              
 942   1          g_cmdData[CMDCRC] = crc ^ getchar();
 943   1              
 944   1      }
 945          
 946          void Collect()
 947          {
 948   1          uchar i;
 949   1          uchar f = 1;
 950   1          // todo 开采集电路电源
 951   1          P3_6 = 0;
 952   1          // 是串口发
 953   1          for (i=0; i<STNORNUM; i++, f <<= 1)
 954   1          {
 955   2              if ((g_strainflag & f) == 0)
 956   2              {
 957   3                  continue;
 958   3              }
 959   2              
 960   2              //  选择相应的通道
 961   2              P4 = i;
 962   2              P1_5 = 0;      //new change
 963   2                      BSWOVER = 0;
 964   2                      delay10ms();
 965   2              //  开始发方波.
 966   2              Init_Timer0INT();
 967   2              while (!BSWOVER);
 968   2              
 969   2              // 设置timeout时间
 970   2              set_timeout(40);
 971   2                      BSDGOT = 0;
 972   2              // 等待timeout,或者外部中断。
 973   2              while (!BSDGOT)
 974   2              {
 975   3                  if (BTIMEOUT)
 976   3                      break;
 977   3              }
 978   2              if(!BSDGOT)

⌨️ 快捷键说明

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