📄 at45main.lst
字号:
559 3 if(strncmps(pRecvString,"2",1)==0)
560 3 {// 控制LED2
561 4 pRecvString+=2;
562 4
563 4 if(strncmps(pRecvString,"on",2)==0)
564 4 {// 打开LED
565 5 P_LED2 = 1;
566 5
567 5 cRet = 1;
568 5 }
569 4 else if(strncmps(pRecvString,"off",3)==0)
570 4 {// 关闭LED
571 5 P_LED2 = 0;
572 5
573 5 cRet = 1;
574 5 }
575 4 else
576 4 {
577 5 cRet = 0;
578 5 }
579 4 }
580 3 }
581 2
582 2 }
583 1 else if(strncmps(pRecvString,"erasepage=",10)==0)
584 1 {// 擦除指定扇区
585 2 pRecvString+=10;
586 2
587 2 iPage = atoi(pRecvString);
588 2
589 2 cRet=FlashPageErase(iPage);
590 2
591 2 }
592 1 else if(strncmps(pRecvString,"eraseblock=",11)==0)
593 1 {// 擦除指定块
594 2 pRecvString+=11;
595 2
596 2 iPage = atoi(pRecvString);
597 2
598 2 cRet=FlashBlockErase(iPage);
599 2 }
600 1 else if(strncmps(pRecvString,"writepage=",10)==0)
601 1 {// 写入Flash
602 2 pRecvString+=10;
603 2
604 2 iPos=strpos(pRecvString,',');
605 2
606 2 if(iPos==-1) cRet=0;
607 2 else
608 2 {// 查找扇区
609 3 pRecvString[iPos]=0;
610 3 iPage = atoi(pRecvString);
611 3
612 3 if(pRecvString[iPos+1]!=0)
C51 COMPILER V8.02 AT45MAIN 08/18/2007 20:06:55 PAGE 11
613 3 {
614 4 pRecvString+=iPos+1;
615 4
616 4 // 通过Buffer1直接将数据写入到页面中,因此,除用户本次传送过来的数据外
617 4 // 其它写入PAGE中的内容由BUFFER1中原来的内容决定
618 4 cRet=FlashProgViaBuffer1(0,strlen(pRecvString),pRecvString,iPage);
619 4
620 4 // 注释的部分通过先将数据写入Buffer,然后用命令将数据写入到主存的方法
621 4 //FlashBuffer1Write(0,strlen(pRecvString),pRecvString);
622 4 //FlashBuffer1ProgAutoErase(iPage);
623 4
624 4
625 4 }
626 3 else
627 3 {
628 4 cRet = 0;
629 4 }
630 3
631 3 }
632 2
633 2 }
634 1 else if(strncmps(pRecvString,"readpage=",9)==0)
635 1 {// 读出一个扇区的指定内容
636 2
637 2 pRecvString+=9;
638 2
639 2 iPage = atoi(pRecvString);
640 2
641 2 // 数据首先读取到buffer1,然后从buffer1中读出
642 2 if(PageToBuffer1(iPage)==1)
643 2 {
644 3 // AT45DB041,081的页面为256+8B
645 3 // AT45DB161的页面为512+16B
646 3 cRet=FlashBuffer1Read(0,264,g_cFlashReadBuffer);
647 3 g_cFlashReadBuffer[264]=0;
648 3 }
649 2 else cRet = 0;
650 2
651 2 if(cRet==1)
652 2 {
653 3 // 扇区内容传送到计算机
654 3 SendString("\r\nHex Value:\r\n");
655 3
656 3 for(i=0;i<254;i++)
657 3 {
658 4 SendHex(g_cFlashReadBuffer[i]);
659 4 SendString("(");
660 4 SendBuffer(&g_cFlashReadBuffer[i],1);
661 4 SendString(")");
662 4 SendString(" ");
663 4 }
664 3 }
665 2
666 2 }
667 1 else
668 1 {// 无效命令
669 2 cRet = 0;
670 2 }
671 1
672 1 // 向主机发送应答
673 1 if(cRet)
674 1 {
C51 COMPILER V8.02 AT45MAIN 08/18/2007 20:06:55 PAGE 12
675 2 SendString("\r\nOK\r\n");
676 2 }
677 1 else
678 1 {
679 2 SendString("\r\nError\r\n");
680 2 }
681 1
682 1 }
683
684 //-----------------------------------------------------
685 // 函数功能:循环方式发送字符串
686 // 输出参数:pSendString,char*:欲发送的字符串的缓冲区
687 // 输出:无
688 //-----------------------------------------------------
689 void SendString(char *pSendString)
690 {
691 1
692 1 // 循环发送,首先关闭中断
693 1 ES0 =0;
694 1
695 1 while(*pSendString!=0)
696 1 {
697 2 SBUF0 = *pSendString++;
698 2 while(TI0==0);
699 2 TI0=0;
700 2 }
701 1
702 1 ES0 = 1;
703 1 }
704
705 void SendBuffer(BYTE *pSend,WORD len)
706 {
707 1
708 1 // 循环发送,首先关闭中断
709 1 ES0 =0;
710 1
711 1 while(len)
712 1 {
713 2 SBUF0 = *pSend++;
714 2 while(TI0==0);
715 2 TI0=0;
716 2
717 2 len--;
718 2 }
719 1
720 1 ES0 = 1;
721 1 }
722
723 void SendHex(BYTE buf)
724 {
725 1 ES0 = 0;
726 1
727 1 SBUF0 = ASCII_CODE[(buf>>4)&0x0F];
728 1 while(TI0==0){}
729 1 TI0 = 0;
730 1
731 1 SBUF0 = ASCII_CODE[(buf&0x0F)];
732 1 while(TI0==0){}
733 1 TI0 = 0;
734 1
735 1 ES0 = 1;
736 1 }
C51 COMPILER V8.02 AT45MAIN 08/18/2007 20:06:55 PAGE 13
737
738 //---------------------------------------------------------
739 // 软件延时函数
740 //---------------------------------------------------------
741
742
743
744 // ;时钟周期数
745 // lcall ;4
746 void dly(BYTE cnt){while(cnt){cnt--;}} // delay: mov a,r7 ;1
747 // jz quit ;2
748 // dec r7 ;1
749 // sjmp delay ;2
750 // quit: ret ;1
751 // 6n+5 sysclk @c8051f022(0.5425)
752 // 延时(6n+5)*0.0904us @11.0592MHZ
753
754 //....................................................................................
755 // 延时ms毫秒
756 //....................................................................................
757 void Dlyms(WORD ms) // 延时cnt(ms)@11.0592MHZ
758 {
759 1 while(ms)
760 1 {
761 2 dly(250);
762 2 dly(210);
763 2
764 2 dly(250);
765 2 dly(210);
766 2
767 2 dly(250);
768 2 dly(210);
769 2
770 2 dly(250);
771 2 dly(210);
772 2
773 2 dly(250);
774 2 dly(210);
775 2
776 2 dly(250);
777 2 dly(210);
778 2
779 2 dly(250);
780 2 dly(210);
781 2
782 2 dly(250);
783 2 dly(210);
784 2
785 2 ms--;
786 2 }
787 1 }
788
789 //----------------------------------------------------------
790 // 功能:不区分大小写的字符串比较函数
791 // 参数:pString1,char*:字符串1
792 // pString2,char*:字符串2
793 // iLen,int:长度
794 // 返回值:-1:字符串相同;0:字符串不同
795 //-----------------------------------------------------------
796 char strncmps(char *pString1,char *pString2,int iLen)
797 {
798 1 char cTemp;
C51 COMPILER V8.02 AT45MAIN 08/18/2007 20:06:55 PAGE 14
799 1 int i;
800 1
801 1 if(strlen(pString1)<iLen) return -1;
802 1
803 1 if(strlen(pString2)<iLen) return -1;
804 1
805 1 for(i=0;i<iLen;i++)
806 1 {
807 2 cTemp = pString1[i];
808 2
809 2 if(cTemp!=pString2[i])
810 2 {
811 3 if((cTemp>='A')&&(cTemp<='Z'))
812 3 {
813 4 cTemp = cTemp-'A'+'a';
814 4
815 4 if(cTemp!=pString2[i]) return -1;
816 4 }
817 3 else if((cTemp>='a')&&(cTemp<='z'))
818 3 {
819 4 cTemp = cTemp-'a'+'A';
820 4
821 4 if(cTemp!=pString2[i]) return -1;
822 4 }
823 3 else return -1;
824 3 }
825 2 }
826 1
827 1 return 0;
828 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1478 ----
CONSTANT SIZE = 182 ----
XDATA SIZE = 820 ----
PDATA SIZE = ---- ----
DATA SIZE = 6 26
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -