📄 main1.lst
字号:
208 2 default: break;
209 2 }
210 1 if(ans==0)
211 1 {
212 2 POINTER1=0;
213 2 RSUM=0;
214 2 r_byte_nums=4;
215 2 }
216 1
217 1 }
218
219 void data_type() //对接收到的数据分辨类型
220 {
221 1 switch(rbuffer[1])
222 1 {
223 2 case command: com_type();break;
224 2 case answer: R_ANSW=rbuffer[2];break;
225 2 case err_infor: err=rbuffer[3];break;
226 2 /*
227 2 case infor_sec: {
228 2 nonce_sec=rbuffer[2];
229 2
230 2 }break;
231 2 */
232 2 case edit_sec: {
233 3 // if(in_sector==0)
234 3 // {
235 3 // nonce_sec=rbuffer[2];
236 3 // in_sector=1;
237 3 // }
238 3 p_received=1;
239 3 }break;
240 2 /*
241 2 case parameter: {
C51 COMPILER V7.06 MAIN1 09/22/2005 14:53:59 PAGE 5
242 2 param=1;
243 2
244 2 }break;
245 2 */
246 2 /*
247 2 case program:
248 2 if(work==0||work==1)
249 2 {
250 2 PRG=rbuffer[3];
251 2 change_prg=1;
252 2 save_prg(); //将程序号存入EEPROM
253 2 }break;
254 2 */
255 2 case infor: {
256 3 switch(rbuffer[2])
257 3 {
258 4 /* case com_sector: nonce_sec=rbuffer[3];break;
259 4 case com_copyEXP: {
260 4 PRG=rbuffer[2]; //假设为当前程序号
261 4 toPRG=rbuffer[3]; //目的程序号
262 4 copy=1;
263 4 }break;
264 4 */
265 4 case com_calling: R_ANSW=rbuffer[3];break;
266 4 case com_switch: {
267 5 YOUHU=rbuffer[3];
268 5 WIRE=rbuffer[4];
269 5 }break;
270 4 case com_weld_simu: if(rc_forbided==1)
271 4 {
272 5 YOUHU=rbuffer[3];
273 5 new_switch1=1;
274 5 }break;
275 4 case com_wire_on_off: if(rc_forbided==1)
276 4 {
277 5 WIRE=rbuffer[3];
278 5 new_switch2=1;
279 5 }break;
280 4 default:break;
281 4 }
282 3 }break;
283 2 case p_out_sec: p_received=1;break;
284 2 // case p_in_sec: p_received=1;break;
285 2 default: break;
286 2 }
287 1 }
288
289 void EX0_INT (void) interrupt 0
290 {
291 1 EX0=0;
292 1 urgent_stop=1;
293 1 err=1;
294 1 }
295
296 void T1_INT (void) interrupt 3
297 {
298 1 // EA=0;
299 1 c_t1++;
300 1 if(send==1)
301 1 {
302 2 if(c_t1==7)
303 2 {
C51 COMPILER V7.06 MAIN1 09/22/2005 14:53:59 PAGE 6
304 3 if(s_p==0)
305 3 SBUF=sbuffer[POINTER0];
306 3 else
307 3 SBUF=sbuffer1[POINTER0];
308 3 c_t1=0;
309 3 }
310 2 }
311 1 else
312 1 {
313 2 if(c_t1==100)
314 2 {
315 3 TR1=0;
316 3 overtime=1;
317 3 }
318 2 }
319 1 // EA=1;
320 1 }
321
322 void TR_INT (void) interrupt 4 //串行口中断
323 {
324 1 EA=0; //关中断
325 1 if(TI==1) //发送完成
326 1 {
327 2 TI=0;
328 2 POINTER0++; //发送缓冲指针加1
329 2 // if(POINTER0==1)
330 2 // TB8=0;
331 2 if(POINTER0<s_byte_nums)
332 2 {
333 3 if(POINTER0<s_byte_nums-1)
334 3 {
335 4 if(s_p==1)
336 4 SSUM=SSUM+sbuffer1[POINTER0];
337 4 else
338 4 SSUM=SSUM+sbuffer[POINTER0]; //6个数据字节求和
339 4 }
340 3 else
341 3 {
342 4 if(s_p==1)
343 4 sbuffer1[s_byte_nums-1]=SSUM+sbuffer1[0];
344 4 else
345 4 sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
346 4 }
347 3 }
348 2 }
349 1
350 1 if(RI==1) //接收完成
351 1 {
352 2 RI=0;
353 2 POINTER1++; //接收缓冲指针加1
354 2 rbuffer[POINTER1-1]=SBUF; //从接收缓冲读出数据
355 2 if(POINTER1==2)
356 2 r_byte_nums=get_byte_nums(rbuffer[1]);
357 2 if(POINTER1<r_byte_nums)
358 2 RSUM=RSUM+rbuffer[POINTER1-1]; //生成校验码
359 2 else
360 2 {
361 3 if(rbuffer[r_byte_nums-1]==RSUM)
362 3 {
363 4 if(ans==0)
364 4 {
365 5 POINTER1=0;
C51 COMPILER V7.06 MAIN1 09/22/2005 14:53:59 PAGE 7
366 5 RSUM=0;
367 5 }
368 4 S_ANSW=OK;
369 4 data_type();
370 4 }
371 3 else
372 3 {
373 4 S_ANSW=FAIL;
374 4 if(resend==0)
375 4 resend=1;
376 4 }
377 3 }
378 2 }
379 1 EA=1; //开中断
380 1 }
381
382 main()
383 {
384 1 uchar i,j,delt;
385 1
386 1 TMOD=0x22; //定时器1,方式2;
387 1 TL1=0XFD; //波特率9600
388 1 TH1=0XFD;
389 1 TR1=1; //启动定时器
390 1 // PCON=0X80; //SMOD=1;
391 1 TMOD=0x23; //定时器0,方式3,两个8位定时器;
392 1 TR1=0;
393 1 TF1=0;
394 1 SCON=0X50; //串口方式1,SM2=0,REN=1,TB8=1,RB8=0,TI=0,RI=0
395 1 IP=0X98; //S0=1,T1=1
396 1 // EX0=1; //急停
397 1 ES=1; //开串口中断
398 1 ET1=1;
399 1 EA=1; //中断总允许
400 1
401 1 temp_c=0;
402 1
403 1 pc_ok=0;
404 1 urgent_stop=0;
405 1 main1_err=0;
406 1 p_forbid=0;
407 1 rc_forbid=0;
408 1 p_active=0;
409 1 rc_active=0;
410 1 p_forbided=0;
411 1 rc_forbided=0;
412 1 p_actived=0;
413 1 rc_actived=0;
414 1
415 1 BEGIN:
416 1 /* if(urgent_stop==1)
417 1 {
418 1 EX0=1;
419 1 stop=1;
420 1 urgent_stop=0;
421 1 }
422 1 */
423 1 pc_stop=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -