📄 hldkzqv12.lst
字号:
300 1 FPGL=2;
301 1 XBYTE[0x8aaa]=0x55;
302 1 FPGL=5;
303 1 XBYTE[0x8555]=0Xa0;
C51 COMPILER V7.06 HLDKZQV12 12/21/2004 08:51:33 PAGE 6
304 1 FPGH=page/256;FPGL=page%256;
305 1 *DestBuf=Src;
306 1 Check_Toggle_Ready(DestBuf); /* wait for TOGGLE bit to get ready */
307 1 }
308
309
310 /************************************************************************/
311 /* PROCEDURE: Program_One_Sector */
312 /* */
313 /* This procedure can be used to program a total of 4096 bytes of data */
314 /* to the SST39VF016. */
315 /* */
316 /* NOTES: 1. It is necessary to first erase the sector before the */
317 /* programming. */
318 /* 2. This sample code assumes the destination address passed */
319 /* from the calling function is the starting address of the */
320 /* sector. */
321 /* */
322 /* Input: */
323 /* Src SOURCE address containing the data which will be */
324 /* written to the 39VF016 */
325 /* Dst DESTINATION address which will be written with the */
326 /* data passed in from Src */
327 /* */
328 /* Output: */
329 /* None */
330 /************************************************************************/
331
332 void Program_One_Sector (uint Dst)
333 {
334 1 uchar xdata *SourceBuf;
335 1 uchar xdata *DestBuf;
336 1
337 1 uint Index;
338 1 page=Dst;
339 1 SourceBuf = 0x1000;
340 1 DestBuf = 0x8000;
341 1
342 1 Erase_One_Sector(Dst); /* erase the sector first */
343 1
344 1 for (Index = 0; Index < 4096; Index++)
345 1 {
346 2 Program_One_Byte( *SourceBuf, DestBuf);
347 2 DestBuf++;
348 2 SourceBuf++;
349 2 }
350 1 }
351
352 //***********************************************
353 // 接收数据
354 //************************************************
355 void rece_picture(bit type)
356 {
357 1 uchar i;
358 1 uchar xdata *op;
359 1 uchar idata *sp; //0x1000 test 0x1000
360 1 //FPGH=send_buf[4];
361 1 //FPGL=send_buf[3];
362 1 if(type)
363 1 op=(send_buf[5]*64);
364 1 else
365 1 op=(send_buf[5]*64)|0x1000;
C51 COMPILER V7.06 HLDKZQV12 12/21/2004 08:51:33 PAGE 7
366 1
367 1 sp=&send_buf[8];
368 1 for(i=0;i<64;i++)*op++=*sp++; //写入RAM 1000H 单元 位图数据
369 1 }
370 //********************************************
371 void delay1s()
372 {
373 1 uint i,j;
374 1 for(i=0;i<0xfff;i++)
375 1 {for(j=0;j<0x8;j++);
376 2 wdgclr=!wdgclr;
377 2 }
378 1 }
379 //***********************************************
380 void test()
381 {
382 1 //uchar xdata *rp;
383 1 uchar xdata *p;
384 1 //uchar xdata *sp;
385 1 p=0x0000;
386 1 memset(p,0x00,1024);
387 1 delay1s();//1
388 1 p=0x0000;
389 1 memset(p,255,255);
390 1 delay1s(); //4
391 1
392 1 p=0x0100;
393 1 memset(p,255,255);
394 1 delay1s(); //4
395 1
396 1 p=0x0200;
397 1 memset(p,255,255);
398 1 delay1s();//8
399 1
400 1 p=0x0300;
401 1 memset(p,255,255);
402 1 delay1s();//15
403 1 /*
404 1 p=0x0000;
405 1 memset(p,0x00,1024);
406 1 p=0x1000;
407 1 memset(p,0x80,4096);
408 1 Program_One_Sector(0);
409 1 delay1s();//1
410 1
411 1 FPGH=0;FPGL=0;
412 1 p=0x0000;
413 1 sp=0x8000;
414 1 rp=memcpy(p,sp,255);
415 1 delay1s();//1
416 1 p=0x0100;
417 1 sp=0x8100;
418 1 rp=memcpy(p,sp,255);
419 1 delay1s();//1
420 1 p=0x0200;
421 1 sp=0x8200;
422 1 rp=memcpy(p,sp,255);
423 1 delay1s();//1
424 1 p=0x0300;
425 1 sp=0x8300;
426 1 rp=memcpy(p,sp,255);
427 1 delay1s();//1XS
C51 COMPILER V7.06 HLDKZQV12 12/21/2004 08:51:33 PAGE 8
428 1 */
429 1 }
430
431 /*
432 ************************************
433 通讯协议解析 接收数据
434 *******************************************8
435 */
436 void receive(void)
437 {
438 1 uchar *p;
439 1 wdgclr=!wdgclr;
440 1 /*
441 1 uchar xdata *p;
442 1 uchar xdata *rp;
443 1 uchar xdata *sp;*/
444 1 switch(send_buf[2])//命令标志
445 1 {
446 2 case 1:rec_sta=1;TR0=0;//进入接收状态
447 2 break;
448 2 case 2: //接收数据
449 2 rece_picture(0);
450 2 break;
451 2 case 0: //加载某一帧数据到显存
452 2 dis_page=send_buf[4]*256+send_buf[3];
453 2 load_data(dis_page);
454 2 break;
455 2 case 3: //将一扇区数据写闪存
456 2 Program_One_Sector(send_buf[4]*256+send_buf[3]);
457 2 break;
458 2 case 4: //测试
459 2 test();
460 2 break;
461 2 case 5: //接收到显存
462 2 rece_picture(1);
463 2 case 6: //同步信号
464 2 dis_page=send_buf[4]*256+send_buf[3];
465 2 ms=0;
466 2 break;
467 2 case 7: //进入自动播放
468 2 page_sta=send_buf[4]*256+send_buf[3];
469 2 dis_page=page_sta;
470 2 page_end=send_buf[6]*256+send_buf[5];
471 2 send_buf[7]=0xaa;
472 2 zhepe=100/send_buf[8];
473 2 p=&send_buf[3];
474 2 Write24c02(p,0,6);
475 2 ms=0;
476 2 TR0=1;
477 2 break;
478 2 case 8:
479 2 Erase_One_Sector (send_buf[4]*256+send_buf[3]);
480 2 break;
481 2 default:break;
482 2 }
483 1 }
484
485
486
487 //********************************************
488 // 主程序
489 //********************************************
C51 COMPILER V7.06 HLDKZQV12 12/21/2004 08:51:33 PAGE 9
490 void main()
491 {
492 1 uchar Temp[6];
493 1 uchar *p;
494 1 PS=1;
495 1 ES=0;
496 1 SM0=1;
497 1 SM1=1;
498 1 T2CON=0X30;
499 1 RCAP2H=0XFF;
500 1 TH2=0XFF;
501 1 RCAP2L=0Xfb; //9600bps= c4 115200bps =fb 57600= f6 19200 = e2
502 1 TL2=0Xfb;
503 1 TR2=1;
504 1
505 1 REN=1;
506 1 TMOD=0x05; //定时器0 模式1 外部时钟
507 1 //TMOD=0x01; //定时器0 模式1 外部时钟
508 1 TL0=V_TL0;
509 1 TH0=V_TH0;
510 1 //TR0=1;
511 1 ET0=1;
512 1 ES=1;
513 1 EA=1;
514 1 SM2=1;
515 1 ADD=(~P1)&0x1f;
516 1 //ADD=1;
517 1 frameok=0;
518 1 test();
519 1 p=&Temp[0];
520 1 Read24c02(p,0,6);
521 1 if(Temp[4]==0xaa)
522 1 {
523 2 page_sta=Temp[1]*256+Temp[0];
524 2 page_end=Temp[3]*256+Temp[2];
525 2 dis_page=page_sta;
526 2 zhepe=100/Temp[5];
527 2 TR0=1;
528 2 }
529 1 while(1)
530 1 {
531 2 wdgclr=!wdgclr;
532 2 if(timout)
533 2 {load_data(dis_page);dis_page++;timout=0;
534 3 if(dis_page>page_end)dis_page=page_sta;
535 3 }
536 2
537 2 if(frameok)
538 2 {receive();frameok=0;}
539 2 }//while(1)
540 1 }
541 /************************************************/
542 void send_delay( void)
543 {
544 1 uint Count;
545 1 for (Count=0;Count<=200;Count++);
546 1
547 1 }
548 //*****************************************
549 // 串口中断服务程序
550 //*****************************************
551 void send(void) interrupt 4
C51 COMPILER V7.06 HLDKZQV12 12/21/2004 08:51:33 PAGE 10
552 {
553 1 uchar d;
554 1 if(!TI && RI && !frameok)
555 1 {RI=0;
556 2 d=SBUF;
557 2 if(pointer==0)
558 2 {if(d==ADD)
559 3 {subchk=d;send_buf[0]=d;TB8=1;senden=1;
560 4 send_delay();SBUF=d;while(!TI);TI=0;send_delay();
561 4 senden=0;SM2=0;TB8=0;pointer++;}//71
562 3 else if(d==0xff)
563 3 {subchk=d;SM2=0;pointer++;}
564 3
565 3 }
566 2 else
567 2 {if(pointer==72)
568 3 {send_buf[pointer]=d;
569 4 if(d==subchk)
570 4 {senden=1;send_delay();SBUF=subchk;while(!TI);send_delay();senden=0;TI=0;frameok=1;}
571 4 else
572 4 {senden=1;send_delay();SBUF=~subchk;while(!TI);send_delay();TI=0;senden=0;}
573 4 SM2=1;pointer=0;
574 4 }
575 3 else
576 3 {send_buf[pointer]=d;subchk+=d;pointer++;}
577 3 }
578 2 }//end if
579 1 }
580 //*************************************
581 void timer1() interrupt 1
582 {TL0=V_TL0;
583 1 TH0=V_TH0;
584 1 ms++;
585 1 if(ms>zhepe)
586 1 {timout=1;
587 2 ms=0;
588 2 }
589 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1392 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 26
IDATA SIZE = 73 ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -