📄 xram.lst
字号:
629 6 *pRam++=*pRecvString++;
630 6
631 6 }
632 5
633 5 cRet = 1;
634 5 }
635 4 else
636 4 {
637 5 cRet = 0;
638 5 }
639 4 }
640 3 }
641 2 }
642 1 else if(strncmps(pRecvString,"readtram=",9)==0)
643 1 {// 读取指定的页
644 2 pRecvString+=9;
645 2
646 2 iPos=strpos(pRecvString,',');
647 2
648 2 if(iPos==-1) cRet=0;
649 2 else
650 2 {// 查找页面
651 3 pRecvString[iPos]=0;
652 3 cPage = atoi(pRecvString);
653 3
654 3 if(cPage>=RAM_PAGE)
655 3 {
656 4 cRet = 0;
657 4 }
658 3 else
659 3 {
660 4 pRecvString+=iPos+1;
661 4
662 4 readlen = atoi(pRecvString);
663 4
664 4 pRam = 0xC000; // TRAM页内地址
665 4
666 4 P4&=0xF0;
667 4 P4|=cPage; // 设置页
668 4
669 4 SendString("\r\nHex Value:\r\n");
670 4
671 4 for(i=0;i<readlen;i++)
672 4 {
673 5 SendHex(*pRam);
674 5 SendBuf('(');
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 12
675 5 SendBuf(*pRam++);
676 5 SendBuf(')');
677 5 }
678 4
679 4 cRet = 1;
680 4 }
681 3
682 3 }
683 2 }
684 1 else
685 1 {// 无效命令
686 2 cRet = 0;
687 2 }
688 1
689 1 // 向主机发送应答
690 1 if(cRet)
691 1 {
692 2 SendString("\r\nOK\r\n");
693 2 }
694 1 else
695 1 {
696 2 SendString("\r\nError\r\n");
697 2 }
698 1
699 1 }
700
701 //-----------------------------------------------------
702 // 函数功能:循环方式发送字符串
703 // 输出参数:pSendString,char*:欲发送的字符串的缓冲区
704 // 输出:无
705 //-----------------------------------------------------
706 void SendString(char *pSendString)
707 {
708 1
709 1 // 循环发送,首先关闭中断
710 1 ES0 =0;
711 1
712 1 while(*pSendString!=0)
713 1 {
714 2 SBUF0 = *pSendString++;
715 2 while(TI0==0);
716 2 TI0=0;
717 2 }
718 1
719 1 ES0 = 1;
720 1 }
721
722 void SendBuf(BYTE buf)
723 {
724 1 ES0 = 0;
725 1
726 1 SBUF0 = buf;
727 1 while(TI0==0){}
728 1 TI0 = 0;
729 1
730 1 ES0 = 1;
731 1 }
732
733 void SendHex(BYTE buf)
734 {
735 1 ES0 = 0;
736 1
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 13
737 1 SBUF0 = ASCII_CODE[(buf>>4)&0x0F];
738 1 while(TI0==0){}
739 1 TI0 = 0;
740 1
741 1 SBUF0 = ASCII_CODE[(buf&0x0F)];
742 1 while(TI0==0){}
743 1 TI0 = 0;
744 1
745 1 ES0 = 1;
746 1 }
747
748 //-----------------------------------------
749 // 功能:以16进制方式发送16位无符号数
750 // 参数:wData,WORD:要发送的数据
751 //
752 //-----------------------------------------
753 void SendWordHex(WORD wData)
754 {
755 1 SendHex(wData>>8);
756 1 SendHex(wData&0xff);
757 1 }
758
759 //-----------------------------------------------------
760 // 功能:测试62LV256,地址范围为0x0000-0x7FFF,共32K
761 // 输入参数:无
762 // 输出:
763 //----------------------------------------------------
764 BYTE TestSRAM()
765 {
766 1 int i;
767 1 BYTE iRet=1;
768 1
769 1 BYTE xdata *pSRAM; // 定义指向外部RAM的指针
770 1
771 1 SendString("\r\nTest 62LV256:\r\n");
772 1
773 1 // 向RAM的0x0001,0x0003,0x0007等地址写入数据,然后分别读出
774 1
775 1 pSRAM = 0x0000; // 指向外部RAM地址0
776 1
777 1 for(i=0;i<16;i++)
778 1 {
779 2 *pSRAM = TESTDATA[i];
780 2
781 2 pSRAM=((WORD)pSRAM<<1)|0x00001;
782 2 }
783 1
784 1 pSRAM = 0x0000;
785 1 for(i=0;i<16;i++)
786 1 {
787 2 SendWordHex(pSRAM);
788 2 SendString(":");
789 2
790 2 if(*pSRAM!=TESTDATA[i])
791 2 {
792 3 SendString("Error,Write=");
793 3 SendHex(TESTDATA[i]);
794 3 SendString(",Read=");
795 3 SendHex(*pSRAM);
796 3
797 3 iRet = 0; // 发现错误
798 3 }
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 14
799 2 else
800 2 {
801 3 SendString("OK\r\n");
802 3 }
803 2
804 2 pSRAM=((WORD)pSRAM<<1)|0x00001;
805 2 }
806 1
807 1 return iRet;
808 1 }
809
810 //-----------------------------------------------------
811 // 功能:测试62LV2568/1024,地址范围为0xC000-0xFFFF,共16K
812 // 并分别使用外部4条地址线来选择最多16个页面
813 // 输入参数:无
814 // 输出:
815 //----------------------------------------------------
816 BYTE TestTRAM()
817 {
818 1 BYTE i,j;
819 1 BYTE iRet=1;
820 1 BYTE testdata;
821 1
822 1 BYTE xdata *pSRAM; // 定义指向外部RAM的指针
823 1
824 1 SendString("\r\nTest 62LV1024:\r\n");
825 1
826 1
827 1 testdata = 0;
828 1 for(j=0;j<RAM_PAGE;j++)
829 1 {
830 2
831 2 P4&=0xF0;
832 2 P4|=j; // 选择页面
833 2
834 2 pSRAM = 0xC000; // 指向外部RAM地址0
835 2
836 2 for(i=0;i<15;i++)
837 2 {
838 3 *pSRAM = testdata;
839 3
840 3 pSRAM=(((WORD)pSRAM<<1)|0xC001);
841 3
842 3 testdata++;
843 3 }
844 2 }
845 1
846 1 // 读,校验
847 1 testdata = 0;
848 1
849 1 for(j=0;j<RAM_PAGE;j++)
850 1 {
851 2
852 2 P4&=0xF0;
853 2 P4|=j; // 选择页面
854 2
855 2 SendString("PAGE=");
856 2 SendHex(j);
857 2 SendString(":\r\n");
858 2
859 2
860 2 pSRAM = 0xC000;
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 15
861 2 for(i=0;i<15;i++)
862 2 {
863 3 SendWordHex(pSRAM);
864 3 SendString(":");
865 3
866 3 if(*pSRAM!=testdata)
867 3 {
868 4 SendString("Error,Write=");
869 4 SendHex(testdata);
870 4 SendString(",Read=");
871 4 SendHex(*pSRAM);
872 4 SendString("\r\n");
873 4
874 4 iRet = 0; // 发现错误
875 4 }
876 3 else
877 3 {
878 4 SendString("OK\r\n");
879 4 }
880 3
881 3 pSRAM=(((WORD)pSRAM<<1)|0xC001);
882 3
883 3 testdata++;
884 3 }
885 2
886 2 SendString("\r\n");
887 2
888 2 }
889 1
890 1 return iRet;
891 1 }
892
893 //----------------------------------------------------------
894 // 功能:不区分大小写的字符串比较函数
895 // 参数:pString1,char*:字符串1
896 // pString2,char*:字符串2
897 // iLen,int:长度
898 // 返回值:-1:字符串相同;0:字符串不同
899 //-----------------------------------------------------------
900 char strncmps(char *pString1,char *pString2,int iLen)
901 {
902 1 char cTemp;
903 1 int i;
904 1
905 1 if(strlen(pString1)<iLen) return -1;
906 1
907 1 if(strlen(pString2)<iLen) return -1;
908 1
909 1 for(i=0;i<iLen;i++)
910 1 {
911 2 cTemp = pString1[i];
912 2
913 2 if(cTemp!=pString2[i])
914 2 {
915 3 if((cTemp>='A')&&(cTemp<='Z'))
916 3 {
917 4 cTemp = cTemp-'A'+'a';
918 4
919 4 if(cTemp!=pString2[i]) return -1;
920 4 }
921 3 else if((cTemp>='a')&&(cTemp<='z'))
922 3 {
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 16
923 4 cTemp = cTemp-'a'+'A';
924 4
925 4 if(cTemp!=pString2[i]) return -1;
926 4 }
927 3 else return -1;
928 3 }
929 2 }
930 1
931 1 return 0;
932 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1989 ----
CONSTANT SIZE = 296 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 37
IDATA SIZE = 50 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -