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

📄 com.lst

📁 基于C51的通用人机界面程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 140                  if((i=FR_ETX)&&(f_stx_ok=1)){   //定位帧尾
 141                                  pETX=p_rrecibuf;
 142                                  f_stx_ok=0;
 143                                  f_etx_ok=1;             
 144                  }
 145          
 146                  if(p_rrecibuf==(r_buf+INLEN-1))p_rrecibuf=r_buf;
 147                  else p_rrecibuf++;
 148                          cnt_reci--;
 149                  
 150                  
 151          }
 152          */
 153          
 154          void frame_unpack(uchar pre_cmd){       //通信发起命令字,
 155   1                                                                              //最大重发次数
 156   1              
 157   1      //==从缓冲读出一帧遍历,FR_ETX结束,期间关中断=================
 158   1              uchar i;
 159   1              uchar re_cmd,*re_para/*,re_bcc1,re_bcc2*/;
 160   1      
 161   1              if(r_notempty/*&&f_etx*/){                                      //缓冲区不空
 162   2                      //do{
 163   2                      //ES=0;
 164   2                      i=*p_rrecibuf;
 165   2                      r_full=0;//清缓冲满标志
 166   2                      
 167   2                      if(i==FR_STX){                                                  //定位帧头
 168   3                              pSTX=p_rrecibuf;                                        //头指针
 169   3                              f_stx_ok=1;                                                     //标志:头定位好
 170   3                      }
 171   2                      else if((i==FR_ETX)&&(f_stx_ok==1)){    //定位帧尾(前提:头定位好)
 172   3                              pETX=p_rrecibuf;                                        //尾指针
 173   3                              f_stx_ok=0;                                                     //清标志
 174   3                              f_etx_ok=1;                                                     //标志:尾定位好,且帧定位好
 175   3                      }
 176   2      
 177   2                      if(p_rrecibuf==(r_buf+INLEN-1))         p_rrecibuf=r_buf;               //循环
 178   2                      else p_rrecibuf++;
C51 COMPILER V7.08   COM                                                                   02/27/2006 16:50:28 PAGE 4   

 179   2      
 180   2                      if(p_rrecibuf==p_wrecibuf)                      r_notempty=0;                   //置缓冲区取空标志
 181   2                      //cnt_reci--;
 182   2                      //}while(cnt_reci>0);
 183   2                      //ES=1;
 184   2                      
 185   2                              
 186   2      //==应答域======================================
 187   2              if(f_etx_ok&&(pETX-pSTX==9)){                           //如果接收完毕并且 帧长度正确,可以开始读报
 188   3                      f_etx_ok=0;                                                             //1.清标志
 189   3                                              
 190   3                      //re_stx=*pSTX;                                                 //帧头
 191   3                      if(pSTX<pETX){                                                  //不跨越缓冲区尾(一般情况)
 192   4                              re_cmd=*(pSTX+1);                                       //命令字位置指针
 193   4                              re_para=pSTX+2;                                         //数据域起始指针
 194   4                              //re_bcc1=*(pETX-2);                            //校验码1
 195   4                              //re_bcc2=*(pETX-1);                            //校验码2
 196   4                      }
 197   3                      /*else{                                                                 //如果溢出(特殊情况)
 198   3                              uchar *pi;
 199   3                              for(pi=r_buf;pi<=pETX;pi++){
 200   3                                      *(pi+INLEN)=*pi;
 201   3                              }
 202   3                              re_cmd=*(pSTX+1);               
 203   3                              re_para=pSTX+2;                 
 204   3                              
 205   3                      }*/
 206   3      //==应答机制====================================
 207   3                      switch(pre_cmd){
 208   4              //程序分支1:   开始采集--光标数据--正确应答**************************************************
 209   4              //                              --重发命令--    
 210   4                              case FR_Start://开始采集
 211   4                                      switch(re_cmd){
 212   5                              /*1*/   case FR_Cursor://'d'光标数据--[0][1]小数两位[2][3][4][5]整数四位
 213   5                                                      para_gb[5]=*re_para-'0';
 214   5                                                      para_gb[4]=*(re_para+1)-'0';
 215   5                                                      para_gb[3]=*(re_para+2)-'0';
 216   5                                                      para_gb[2]=*(re_para+3)-'0';
 217   5                                                      para_gb[1]=*(re_para+4)-'0';
 218   5                                                      para_gb[0]=*(re_para+5)-'0';
 219   5                                                      //frame_cmd(FR_Roger);//应答
 220   5                                                      //f_acq_ok=1;
 221   5                                                      break;
 222   5                                              case FR_Result://计算结果--[6][5][4]度[3][2]分[1][0]秒
 223   5                                                      //put_char('r');
 224   5                                                      result[9]=*re_para-'0';
 225   5                                                      result[8]=*(re_para+1)-'0';
 226   5                                                      result[7]=*(re_para+2)-'0';
 227   5                                                      result[6]=DEG;
 228   5                                                      result[5]=*(re_para+3)-'0';
 229   5                                                      result[4]=*(re_para+4)-'0';
 230   5                                                      result[3]=MIN;
 231   5                                                      result[2]=*(re_para+5)-'0';
 232   5                                                      result[1]=*(re_para+6)-'0';
 233   5                                                      result[0]=SEC;
 234   5                                                      //frame_cmd(FR_Roger);                  //应答"收到"
 235   5                                                      Index=30;                                               //转显示结果状态
 236   5                                                      Index=30;                                               //冗余一次
 237   5                                                      break;
 238   5                                              case FR_Cancel://报错--result[6][5][4][3][2][1][0]此时存放报错信息
 239   5                                                      //put_char('r');
 240   5                                                      result[6]=*re_para-'0';                 //错位代码
C51 COMPILER V7.08   COM                                                                   02/27/2006 16:50:28 PAGE 5   

 241   5                                                      result[5]=*(re_para+1)-'0';             //错误代码
 242   5                                                      //result[4]=*(re_para+2)-'0';
 243   5                                                      //result[3]=*(re_para+3)-'0';
 244   5                                                      //result[2]=*(re_para+4)-'0';
 245   5                                                      //result[1]=*(re_para+5)-'0';
 246   5                                                      //result[0]=*(re_para+6)-'0';
 247   5                                                      //frame_cmd(FR_Roger);                  //应答"收到"
 248   5                                                      Index=31;                                               //转显示结果状态
 249   5                                                      Index=31;                                               //冗余一次
 250   5                                                      break;
 251   5                                      }       
 252   4                              break;
 253   4              //程序分支2:   开始标定--光标数据--正确应答**************************************************
 254   4              //                              --重发命令--    
 255   4                              case FR_Swing://开始标定
 256   4                                      switch(re_cmd){
 257   5                              /*1*/   case FR_Cursor://'d'光标数据--[0][1]小数两位[2][3][4][5]整数四位
 258   5                                                      para_gb[5]=*re_para-'0';
 259   5                                                      para_gb[4]=*(re_para+1)-'0';
 260   5                                                      para_gb[3]=*(re_para+2)-'0';
 261   5                                                      para_gb[2]=*(re_para+3)-'0';
 262   5                                                      para_gb[1]=*(re_para+4)-'0';
 263   5                                                      para_gb[0]=*(re_para+5)-'0';
 264   5                                                      //frame_cmd(FR_Roger);//应答
 265   5                                                      //f_acq_ok=1;
 266   5                                                      break;
 267   5                                              /*case FR_Swing://标定结果--[3][2][1][0]坐标
 268   5                                                      //put_char('r');
 269   5                                                      result[9]=SPACE;
 270   5                                                      result[8]=SPACE;
 271   5                                                      result[7]=SPACE;
 272   5                                                      result[6]=SPACE;
 273   5                                                      result[5]=*re_para-'0';
 274   5                                                      result[4]=*(re_para+1)-'0';
 275   5                                                      result[3]=*(re_para+2)-'0';
 276   5                                                      result[2]=*(re_para+3)-'0';
 277   5                                                      result[1]=*(re_para+4)-'0';
 278   5                                                      result[0]=*(re_para+5)-'0';
 279   5                                                      //frame_cmd(FR_Roger);                  //应答"收到"
 280   5                                                      Index=30;                                               //转显示结果状态
 281   5                                                      Index=30;                                               //冗余一次
 282   5                                                      break;*/
 283   5                                              case FR_Cancel://报错--result[6][5][4][3][2][1][0]此时存放报错信息
 284   5                                                      //put_char('r');
 285   5                                                      result[6]=*re_para-'0';                 //错位代码
 286   5                                                      result[5]=*(re_para+1)-'0';             //错误代码
 287   5                                                      //result[4]=*(re_para+2)-'0';
 288   5                                                      //result[3]=*(re_para+3)-'0';

⌨️ 快捷键说明

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