📄 com.lst
字号:
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 + -