📄 user.lst
字号:
227 2 if ((PP03==1)&&(key11==0)) { di11=~di11;};
228 2 if ((PP04==1)&&(key12==0)) { di12=~di12;};
229 2 if ((PP05==1)&&(key13==0)) { di13=~di13;};
230 2 if ((PP06==1)&&(key14==0)) { di14=~di14;};
231 2 if ((PP07==1)&&(key15==0)) { di15=~di15;};
232 2 key8_15=PP0;
233 2 };
234 1 in8_15=1;
235 1 inled8_15=0;
236 1 P0=di8_15;
237 1 P0=di8_15;
238 1 P0=di8_15;
239 1 P0=di8_15;
240 1 inled8_15=1;
241 1 inled8_15=0;
242 1 }
243
244
245 /*========================================================================================================
-==========*/
246 /* 主程序
- */
247 /*--------------------------------------------------------------------------------------------------------
-----------*/
248
249 void main ()
250 {
251 1
252 1 UBYTE data i,j,k,x,y,count,frist;
253 1 UWORD data nw,nn;
254 1 UBYTE xdata * data p; /* xdata指针 */
255 1 UBYTE data address; /*---------从站地址 ---------*/
256 1 UBYTE data re_er; /*---------字符偶校验错 ---------*/
257 1 UBYTE data br_num; /*---------串口波特率号 ---------*/
258 1 UBYTE data error; /*---------校验和错 ---------*/
259 1 UBYTE xdata rebox[113]; /*---------串口接收缓冲 ---------*/
260 1 UBYTE xdata trbox[113]; /*---------串口发送缓冲 ---------*/
261 1 UBYTE xdata pb_out[112]; /*---------PROFIBUS输出数据区 ---------*/
262 1 UBYTE xdata pb_in[112]; /*---------PROFIBUS输入数据区 ---------*/
263 1 UBYTE xdata user_prm[41]; /*---------PROFIBUS用户参数区 ---------*/
264 1 UBYTE data data_in_len; /*---------数据交换输入(实验板发送)数据长度 ---------*/
265 1 UBYTE data dil; /*---------不包括校验和的data_in_len长度 ---------*/
266 1 UBYTE data data_out_len; /*---------数据交换输出(实验板接收)数据长度 ---------*/
267 1 UBYTE data dol; /*---------不包括校验和的data_out_len长度 ---------*/
268 1 UBYTE data user_prm_len; /*---------用户参数长度 ---------*/
-
269 1 UBYTE data se_er; /*---------OEM2-SE接收数据错误类型号 ---------*/
270 1
271 1 P1=0xff;
272 1 P0=0;
273 1 P2=0xf0;
274 1 di0_7=di8_15=0;
275 1
276 1 steout0_7(0); /*---------输出指示灯Q0-Q7清零 ---------*/
277 1 steout8_15(0); /*---------输出指示灯Q8-Q15清零 ---------*/
278 1 steinled0_7(0); /*---------输入键指示灯ILED0-ILED7清零 ---------*/
279 1 steinled8_15(0); /*---------输入键指示灯ILED8-ILED15清零 ---------*/
280 1
281 1 /*======================================================= =====================*/
C51 COMPILER V7.20 USER 01/23/2006 13:26:51 PAGE 6
282 1 /* 以下是实验板上电后,检测P89C51RD2单片机内部RAM的一段输出演示程序; */
283 1 /* 这段程序与PROFIBUS接口板SE通信无关,用户可跳过此段程序。 */
284 1 /*-----------------------------------------------------------------------------*/
285 1
286 1
287 1 /* 这段程序在仿真器上运行的话内存检查始终不正确 */
288 1
289 1 p=0;
290 1 x=1;
291 1 k=1;
292 1 //共检查 24*32字节内存
293 1 for (j=0;j<32;j++)
294 1 {
295 2 for (i=0;i<24;i++)
296 2 {
297 3 *(p+i)=0xaa;
298 3 };
299 2 y=0;
300 2 for (i=0;i<24;i++)
301 2 {
302 3 count=*(p+i);
303 3 if (count!=0xaa) { y=1; };
304 3 };
305 2 if (y==0) /* 该段内存正确,跑流水灯 */
306 2 {
307 3 switch (k)
308 3 {
309 4 case 1:{ steout0_7(x);};break;
310 4 case 2:{ steout8_15(x);};break;
311 4 case 3:{ steinled0_7(x);};break;
312 4 case 4:{ steinled8_15(x);};break;
313 4 default:break;
314 4 };
315 3 if (x<255) {x=x*2+1;}else{x=1;k++;};
316 3 }
317 2 else /* 该段内存不正确,四块灯全闪 */
318 2 {
319 3 for (;;)
320 3 {
321 4 for (nw=0;nw<6000;nw++)
322 4 {
323 5 steout0_7(0);
324 5 steout8_15(0);
325 5 steinled0_7(0);
326 5 steinled8_15(0);
327 5 };
328 4 for (nw=0;nw<6000;nw++)
329 4 {
330 5 steout0_7(0xff);
331 5 steout8_15(0xff);
332 5 steinled0_7(0xff);
333 5 steinled8_15(0xff);
334 5 };
335 4 };
336 3 };
337 2 p=p+24;
338 2 for (nw=0;nw<18000;nw++)
339 2 {};
340 2 };
341 1
342 1
343 1 /*---------------------------------------------------------------------*/
C51 COMPILER V7.20 USER 01/23/2006 13:26:51 PAGE 7
344 1 /* 实验板输出演示程序结束。 */
345 1 /*=====================================================================*/
346 1
347 1 steout0_7(0); /*---------输出指示灯Q0-Q7清零 ---------*/
348 1 steout8_15(0); /*---------输出指示灯Q8-Q15清零 ---------*/
349 1 steinled0_7(0); /*---------输入键指示灯ILED0-ILED7清零 ---------*/
350 1 steinled8_15(0); /*---------输入键指示灯ILED8-ILED15清零 ---------*/
351 1
352 1 /*==============================================================*/
353 1 /* 清串口输入缓冲区trbox[i],清串口输出缓冲区rebox[i] */
354 1 /*--------------------------------------------------------------*/
355 1 for (i=0;i<113;i++)
356 1 {
357 2 rebox[i]=trbox[i]=0;
358 2 };
359 1 for (i=0;i<112;i++)
360 1 {
361 2 pb_in[i]=pb_out[i]=0;
362 2 };
363 1
364 1
365 1
366 1 address=rd_address(); /*---------读实验板上拨码开关,作为站号---------*/
367 1
368 1
369 1 /*======================================================================*/
370 1 /* 以下是串口初始化程序 */
371 1 /*----------------------------------------------------------------------*/
372 1
373 1 br_num=5; /*---------实验板波特率选择5,115.2K-------------*/
374 1
375 1 switch (br_num) /*---------根据波特率号设置T2--------------------*/
376 1 {
377 2 case 1:{ TH2=0x0ff; TL2=0x0a0;RCAP2H=0x0ff;RCAP2L=0x0a0;};break; /*---9.6K---*/
378 2 case 2:{ TH2=0x0ff; TL2=0x0d0;RCAP2H=0x0ff;RCAP2L=0x0d0;};break; /*---19.2K--*/
379 2 case 3:{ TH2=0x0ff; TL2=0x0e8;RCAP2H=0x0ff;RCAP2L=0x0e8;};break; /*---38.4K--*/
380 2 case 4:{ TH2=0x0ff; TL2=0x0f0;RCAP2H=0x0ff;RCAP2L=0x0f0;};break; /*---57.6K--*/
381 2 case 5:{ TH2=0x0ff; TL2=0x0f8;RCAP2H=0x0ff;RCAP2L=0x0f8;};break; /*---115.2K-*/
382 2 case 6:{ TH2=0x0ff; TL2=0x0fc;RCAP2H=0x0ff;RCAP2L=0x0fc;};break; /*---230.4K-*/
383 2 case 7:{ TH2=0x0ff; TL2=0x0fe;RCAP2H=0x0ff;RCAP2L=0x0fe;};break; /*---460.8K-*/
384 2 default:break;
385 2 };
386 1
387 1 /*---------------------------------------------------------------------------------------*/
388 1 /* 注意:本例基于PHILIP P89C51RD2单片机: */
389 1 /* 波特率=14745600/16/(65536-T) */
390 1 /* 各种波特率9600: T=0xffa0, 19.2K: T=0xffd0, 38.4K: T=0xffe8, */
391 1 /* 57.6K: T=0xfff0, 115.2K:T=0xfff8, 230.4k:T=0xfffc, 460.8k=0xfffe */
392 1 /*---------------------------------------------------------------------------------------*/
393 1
394 1
395 1 PCON=0;
396 1 T2CON=0x34; /*----RCLK=1; TCLK=1; TR2=1; C/T2=0 --------------------*/
397 1
398 1 /*--------------------------------------------------------------------------------------*/
399 1 /*串口设置成模式3 即:1 个启始位、8个数据位、1个偶校验位、1个停止位; */
400 1 /* 0xd0=11010000B; SM0SM1=11; SM2=0; REN=1;TB8=0; RB8=0; TI=0; RI=0 */
401 1 /*--------------------------------------------------------------------------------------*/
402 1
403 1 SCON=0x0d0;
404 1
405 1 /*--------------------------------------------------------------------------------------*/
C51 COMPILER V7.20 USER 01/23/2006 13:26:51 PAGE 8
406 1 /* 例2 半握手通信方式 */
407 1 /*======================================================================================*/
408 1
409 1 while (REQ_IT==1) /* 定义REQ_IT=P1^7=P1.7=P17S_CTS,输入,连接OEM2-SE-REQ_IT,见实验板原理图CONNECT-16 ---*/
410 1 {
411 2 /*====================================================================================*/
412 2 /* 形成接口板的初始化报文 */
413 2 /* rebox[]是串口发送数组,格式见《SE手册》 */
414 2 /*------------------------------------------------------------------------------------*/
415 2 data_in_len=48+1+1; /*---- 输入数据报文长度=48+1+1=50; ---------*/
416 2 user_prm_len=0; /*---- 用户参数长度=0 ---------*/
417 2 data_out_len=48+1+1; /*---- 输入数据报文长度=48+1+1=50; ---------*/
418 2 trbox[0]=address; /*---- BYTE0=从站地址 ---------*/
419 2 trbox[1]=0x06; /*---- BYTE1=ID号高位 ---------*/
420 2 trbox[2]=0x0fa; /*---- BYTE2=ID号低位 ---------*/
421 2
422 2 /*====================================================================================*/
423 2 /* 以下形成I/O配置数据 */
424 2 /* 本例:I/O配置数据长度=6;I/O配置数据:0x1f,0x2f,0x1f,0x2f,0x1f,0x2f */
425 2 /* 共:48bytes input+48bytes output */
426 2 /*------------------------------------------------------------------------------------*/
427 2
428 2 trbox[3]=6; /*----BYTE3=I/O配置数据长度=6 ---------*/
429 2 trbox[4]=0x1f; /*----BYTE4=I/O配置数据:0x1f ---------*/
430 2 trbox[5]=0x2f; /*----BYTE5=I/O配置数据:0x2f ---------*/
431 2 trbox[6]=0x1f; /*----BYTE6=I/O配置数据:0x1f ---------*/
432 2 trbox[7]=0x2f; /*----BYTE7=I/O配置数据:0x2f ---------*/
433 2 trbox[8]=0x1f; /*----BYTE8=I/O配置数据:0x1f ---------*/
434 2 trbox[9]=0x2f; /*----BYTE9=I/O配置数据:0x2f ---------*/
435 2
436 2
437 2 trbox[24]=data_in_len; /*----BYTE24=data_in_len输入数据报文长度 ---------*/
438 2 trbox[25]=data_out_len; /*----BYTE25=data_out_len输出数据报文长度 ---------*/
439 2 trbox[26]=user_prm_len; /*----BYTE26=user_prm_len用户参数长度 ---------*/
440 2
441 2
442 2 x=0;
443 2 for (i=0;i<48;i++)
444 2 {
445 3 x=x+trbox[i]; /*----求校验和 ---------*/
446 3
447 3 };
448 2 trbox[48]=x; /*----置校验和 ---------*/
449 2
450 2 /*====================================================================================*/
451 2 /* 发送接口板的初始化报文、接收接口板的回答,初始不成功继续发初始化报文 */
452 2 /*------------------------------------------------------------------------------------*/
453 2
454 2 while (S_RTS==1) {}; /*---- P1.6=S_RTS=1:SE没有准备好接收 ---------*/
455 2
456 2 y=0; /*---- 清初始化成功标志 ---------*/
457 2 while (y==0)
458 2 {
459 3 REN=0;
460 3 for (i=0;i<49;i++) /*---- 发送一次初始化报文共49字节 ---------*/
461 3 {
462 4 TI=0;
463 4 ACC=trbox[i];
464 4 TB8=P; /*---- 形成偶校验位 ---------*/
465 4 SBUF=trbox[i];
466 4 while (TI==0) {};
467 4 };
C51 COMPILER V7.20 USER 01/23/2006 13:26:51 PAGE 9
468 3
469 3 while (S_RTS==0) { }; /*---- SE 没有接收完毕 ---------*/
470 3
471 3
472 3 /*---------发送完毕、等待接收回答-----------------------------------------------------*/
473 3 RI=0;
474 3 REN=1; /*---- 允许接收 ---------*/
475 3 re_er=0; /*---- re_er偶校验错标志 ---------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -