📄 cfctrlv10.lst
字号:
520 *******************************************8
521 */
522 void receive(void)
523 {
524 1 uchar i;
525 1 uchar xdata *sp;
526 1 wdgclr=!wdgclr;
527 1 switch(XBYTE[0x1002])//命令标志
528 1 {
529 2 case 1:rec_sta=1;TR0=0;//进入接收状态
530 2 break;
531 2 case 2: //接收数据
532 2 rece_picture(0);
533 2 break;
534 2 case 0: //加载某一帧数据到显存
535 2 dis_page=XBYTE[0x1004]*256+XBYTE[0x1003];
536 2 load_data(dis_page);
537 2 break;
538 2 case 3: //将一扇区数据写闪存
539 2 Program_One_Sector(XBYTE[0x1004]*256+XBYTE[0x1003]);
540 2 break;
541 2 case 4: //测试
542 2 test();
543 2 break;
544 2 case 5: //接收到显存
545 2 rece_picture(1);
546 2 case 6: //同步信号
547 2 dis_page=XBYTE[0x1004]*256+XBYTE[0x1003];
548 2 ms=0;
549 2 break;
550 2 case 7: //进入自动播放
551 2 sp=0x1008;
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 10
552 2 for(i=0;i<12;i++)
553 2 {
554 3 Write24c02(sp,i*8,8);
555 3 sp+=8;
556 3 }
557 2 ms=0;
558 2 TR0=1;
559 2 break;
560 2 case 8:
561 2 Erase_One_Sector (XBYTE[0x1004]*256+XBYTE[0x1003]);
562 2 break;
563 2 default:break;
564 2 }
565 1 }
566 //***************************
567 void delay(uchar sec)
568 {
569 1 uint i;
570 1 while(sec)
571 1 {for(i=0;i<50000;i++);sec--;}
572 1 }
573 //****************************
574 void SoftRST(void)
575 {
576 1 Device_Ctrl=0x0c;
577 1 Device_Ctrl=0x08;
578 1 delay(10); //delay 0.5s
579 1 }
580 //*********************************
581 bit Busy(void)
582 {
583 1 while(Status&0x80);
584 1 if(Status&0x01)
585 1 return(0);
586 1 else
587 1 return(1);
588 1 }
589 //********************************
590 void Enable8bit(void)
591 {
592 1 Busy();
593 1 Features=0x01;
594 1 Drv_Head=Select;
595 1 Command=0xef;
596 1 }
597 //*********************
598 void SetupCard(void)
599 {
600 1 Select=0xe0;
601 1 Socket=0;
602 1 Enable8bit();
603 1 }
604 //*****************************
605 bit WaitDRQ(void)
606 {
607 1 while(Status&0x80);
608 1 while(!(bit)(Status&0x04));
609 1 if(Status&0x01)
610 1 return(0);//errors
611 1 else
612 1 return(1);//CF Card is BUSY=0;DRQ=1;ERR=0;
613 1 }
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 11
614 //****************************
615 //Set up sector count ,lba addresses command code
616 //****************************
617 void Function(void)
618 {
619 1 Busy();
620 1 Sectr_Cnt=LBA[0];
621 1 Sectr_No=LBA[1];
622 1 Cylinder_Low=LBA[2];
623 1 Cylinder_Hi=LBA[3];
624 1 Drv_Head=LBA[4];
625 1 Command=LBA[5];
626 1 }
627 //*********************************
628 void Read512(uchar xdata *RamBuf)
629 {
630 1 uint i;
631 1 for(i=0;i<256;i++)
632 1 {*RamBuf++=EVEN_Data;*RamBuf++=ODD_Data;}
633 1 }
634 //*********************************
635 void Write512(uchar xdata *RamBuf)
636 {
637 1 uint i;
638 1 for(i=0;i<256;i++)
639 1 {EVEN_Data=*RamBuf++;ODD_Data=*RamBuf++;}
640 1 }
641 //***********************************
642 void Read_Sctr(void)
643 {
644 1 LBA[0]=1;
645 1 LBA[1]=0x0a;
646 1 LBA[2]=0;
647 1 LBA[3]=0;
648 1 LBA[4]=0;
649 1 LBA[5]=ReadSctr;
650 1 Function();
651 1 WaitDRQ();
652 1 Read512(0x0000);
653 1 }
654 //***********************************
655 void Write_Sctr(void)
656 {
657 1 LBA[0]=1;
658 1 LBA[1]=0x0a;
659 1 LBA[2]=0;
660 1 LBA[3]=0;
661 1 LBA[4]=0;
662 1 LBA[5]=WriteSctr;
663 1 Function();
664 1 WaitDRQ();
665 1 Write512(0x0000);
666 1 }
667
668 //********************************************
669 // 主程序
670 //********************************************
671 void main()
672 {
673 1 uchar *p;
674 1 //uchar i,play; //播放列表计数
675 1 //uint rplay; //重复次数
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 12
676 1 PS=1;
677 1 ES=0;
678 1 SM0=1;
679 1 SM1=1;
680 1 T2CON=0X30;
681 1 RCAP2H=0XFF;
682 1 TH2=0XFF;
683 1 RCAP2L=0Xfb; //9600bps= c4 115200bps =fb 57600= f6 19200 = e2
684 1 TL2=0Xfb;
685 1 TR2=1;
686 1
687 1 REN=1;
688 1 TMOD=0x05; //定时器0 模式1 外部时钟
689 1 //TMOD=0x01; //定时器0 模式1 外部时钟
690 1 TL0=V_TL0;
691 1 TH0=V_TH0;
692 1 //TR0=1;
693 1 ET0=1;
694 1 ES=1;
695 1 EA=1;
696 1 SM2=1;
697 1 ADD=(~P1)&0x1f;
698 1 //ADD=1;
699 1 frameok=0;
700 1 bufp=0x1000; //接收缓冲区指针
701 1 test();
702 1 p=&iic_buf[0];
703 1 Read24c02(p,0,96);
704 1 //play=0;
705 1 SoftRST();
706 1 SetupCard();
707 1 Write_Sctr();
708 1 Read_Sctr();
709 1
710 1 while(1)
711 1 {
712 2 wdgclr=!wdgclr;
713 2
714 2 if(frameok)
715 2 {receive();frameok=0;}
716 2 }//while(1)
717 1 }
718 /************************************************/
719 //void send_delay( void)
720 //{
721 //uint Count;
722 //for (Count=0;Count<=200;Count++);
723
724 //}
725 //*****************************************
726 // 串口中断服务程序
727 //*****************************************
728 void send(void) interrupt 4
729 {
730 1 uchar d;
731 1 if(!TI && RI && !frameok)
732 1 {RI=0;
733 2 d=SBUF;
734 2 if(pointer==0)
735 2 {if(d==ADD)
736 3 {subchk=d;*bufp++=d;TB8=1;senden=1;
737 4 SBUF=d;while(!TI);TI=0;
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 13
738 4 senden=0;SM2=0;TB8=0;pointer++;
739 4 }
740 3
741 3 }
742 2 else
743 2 {if(pointer==4104)
744 3 {
745 4 if(d==subchk)
746 4 {senden=1;SBUF=subchk;while(!TI);senden=0;TI=0;frameok=1;}
747 4 else
748 4 {senden=1;SBUF=~subchk;while(!TI);TI=0;senden=0;}
749 4 SM2=1;pointer=0;
750 4 bufp=0x1000;
751 4 }
752 3 else
753 3 {
754 4 *bufp++=d;subchk+=d;pointer++;
755 4 }
756 3 }
757 2 }//end if
758 1 }
759 //*************************************
760 void timer1() interrupt 1
761 {TL0=V_TL0;
762 1 TH0=V_TH0;
763 1 ms++;
764 1 if(ms>zhepe)
765 1 {timout=1;
766 2 ms=0;
767 2 }
768 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1716 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 27 25
IDATA SIZE = 96 ----
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 + -