?? datafax.lst
字號(hào):
748 1 EA=1;
749 1 }
750
751 //---------------------------------------------------
752 // SPI總線中斷函數(shù)
753 //--------------------------------------------------
754 void spi_isr(void) interrupt 9
755 {
756 1 // clear SPIF bit by writing 1 to it
757 1 // SPSTAT |= 0x80;
758 1 mspibusy = 0;
759 1
760 1 }
761
762 //---------------------------------------------
763 // SPI發(fā)送字節(jié)函數(shù)
764 //--------------------------------------------
765 void SPI_Send_Byte(byte c)
766 { byte i;
767 1 SPI_TI=true;
768 1 SPDAT=c;
769 1 while (!SPCFG&0x80);
770 1 for(i=0;i<30;i++);
771 1 SPCFG=0x00;
772 1 }
773 //---------------------------------------------
774 // SPI發(fā)送字符串函數(shù)
775 //--------------------------------------------
776 void SPI_Send(byte *tempstr)
777 {
778 1 byte i;
779 1 SPCTL=0x5C;
780 1 i=0;
781 1 while(*tempstr!=0)
782 1 {
783 2 SPDAT=*tempstr;
784 2 // SBUF=*tempstr;
785 2 // while(!TI);
786 2 // TI=0;
787 2 // SelectShow_Byte(0,20-i,*tempstr);
788 2 tempstr++;
789 2 i++;
790 2 for(i=0;i<170;i++);
791 2 }
792 1 SPCTL=0xCC;
793 1 }
794 //---------------------------------------------
795 // 獲取U盤里的文件列表信息
796 // 注: 目前只接收處理前三個(gè)文件
C51 COMPILER V7.09 DATAFAX 03/22/2005 01:42:11 PAGE 14
797 //--------------------------------------------
798 void Get_File_List()
799 {
800 1 word i;
801 1 word Len=0;
802 1 SPI_Recv_Byte_Cnt=0;
803 1 for(i=0;i<Recv_Buf_Len;i++) SPI_Recv_Buf[i]=0xff;//初始化獲取文件列表命令信息包
804 1 SPI_Write_Point=0;
805 1 SPI_Read_Point=0;
806 1 for(i=0;i<37;i++) UARTBUF[i]=0x00;
807 1 Set_SPI_Master;
808 1 SPI_SS=0;
809 1 Delayms(2);
810 1 for(i=0;i<37;i++) SPI_Send_Byte(UARTBUF[i]);//發(fā)送取文件列表命令
811 1 Set_SPI_Slave;
812 1 temp_bit=SPI_SS;
813 1 SPI_TI=0;
814 1 Cnt_Long_1ms=0;
815 1
816 1 while(Cnt_Long_1ms<_1S)
817 1 {
818 2 if (SPI_Write_Point>=5)
819 2 {
820 3 if(SPI_Recv_Buf[0]==0x01 )
821 3 {
822 4 Len=SPI_Recv_Buf[3];
823 4 Len<<=8;
824 4 Len+=SPI_Recv_Buf[4];
825 4 break ;
826 4 }
827 3 }
828 2 if(SPI_Recv_Buf[0]==0x00)
829 2 {
830 3 for (i=0;i<5;i++)
831 3 {
832 4 SBUF=SPI_Recv_Buf[i];
833 4 Delayms(1);
834 4 }
835 3 LCD_Show_Data(4,20,"Read Error...");
836 3 for(i=0;i<37;i++) UARTBUF[i]=0x00;
837 3 UARTBUF[0]=0x0D;
838 3 Set_SPI_Master;
839 3 SPI_SS=0;
840 3 Delayms(2);
841 3 for(i=0;i<37;i++) SPI_Send_Byte(UARTBUF[i]);//發(fā)送取文件列表命令
842 3 Set_SPI_Slave;
843 3 temp_bit=SPI_SS;
844 3 SPI_TI=0;
845 3 return;
846 3 }
847 2 }
848 1
849 1
850 1 Cnt_Long_1ms=0;
851 1 while(1)
852 1 {
853 2 if (SPI_Write_Point>=(Len+5)) break;
854 2 if (Cnt_Long_1ms>_5S)
855 2 {
856 3 LCD_Show_Data(4,20,"SPI Time Out");
857 3 // for(i=0;i<Len+5;i++)
858 3 // {
C51 COMPILER V7.09 DATAFAX 03/22/2005 01:42:11 PAGE 15
859 3 // SBUF=SPI_Recv_Buf[i];
860 3 // Delayms(1);
861 3 // }
862 3 return;
863 3 }
864 2 }
865 1 // ---Only for test;
866 1 // for (i=0;i<Len+5;i++)
867 1 // {
868 1 // SBUF=SPI_Recv_Buf[SPI_Read_Point];
869 1 // SPI_Read_Point++;
870 1 // Delayms(1);
871 1 // }
872 1
873 1 Get_File_Info(5); //獲取第一個(gè)文件信息
874 1 LCD_Show_Data(4,20,"1.");
875 1 LCD_Show_Data(4,18,File_Name);
876 1 Get_File_Info(37); //獲取第二個(gè)文件信息
877 1 LCD_Show_Data(2,20,"2.");
878 1 LCD_Show_Data(2,18,File_Name);
879 1 Get_File_Info(69); //獲取第三個(gè)文件信息
880 1 LCD_Show_Data(0,20,"3.");
881 1 LCD_Show_Data(0,18,File_Name);
882 1
883 1 }
884 //---------------------------------------------------
885 // 獲取文詳細(xì)信息項(xiàng)
886 // 住:目前只取出了文件名和文件長(zhǎng)度信息
887 // 其他信息存放在File_Info數(shù)組
888 //--------------------------------------------------
889 void Get_File_Info(unsigned long index)
890 {
891 1 byte i;
892 1 byte j=0;
893 1 byte k=0;
894 1 for(i=0;i<12;i++) File_Name[i]=0x00;
895 1 for(i=0;i<33;i++) File_Info[i]=0x00;
896 1 for(i=0;i<32;i++) File_Info[i]=SPI_Recv_Buf[index+i];
897 1 for(i=index;i<index+11;i++) //獲取文件名FAT16格式
898 1 {
899 2 if(SPI_Recv_Buf[i]!=0x20)
900 2 {
901 3 if(j!=0x08)
902 3 {
903 4 File_Name[k]=SPI_Recv_Buf[i];
904 4 k++;
905 4 }
906 3 else
907 3 {
908 4 File_Name[k]=0x2E;
909 4 i--;
910 4 k++;
911 4 }
912 3 }
913 2 j++;
914 2 }
915 1 File_Size=0;
916 1 for(i=4;i>1;i--)//獲取文件長(zhǎng)度
917 1 {
918 2 File_Size+=(ulong)SPI_Recv_Buf[index+27+i];
919 2 File_Size<<=8;
920 2 }
C51 COMPILER V7.09 DATAFAX 03/22/2005 01:42:11 PAGE 16
921 1 File_Size+=(ulong)SPI_Recv_Buf[index+28];
922 1 }
923 //----------------------------------------------
924 // 打開(kāi)已在文件列表中選中的文件
925 // 返回:1--成功 0--失敗
926 //-----------------------------------------------
927 bit Open_File()
928 {
929 1 byte i;
930 1 for(i=0;i<37;i++) UARTBUF[i]=0x00;
931 1 UARTBUF[0]=0X01;//打開(kāi)文件命令
932 1 for(i=5;i<16;i++) UARTBUF[i]=File_Info[i-5];//要打開(kāi)的文件
933 1 SPI_Read_Point=0;
934 1 SPI_Write_Point=0;
935 1 Set_SPI_Master;
936 1 SPI_SS=0;
937 1 Delayms(2);
938 1 for(i=0;i<37;i++) SPI_Send_Byte(UARTBUF[i]);
939 1 Set_SPI_Slave;
940 1 temp_bit=SPI_SS;
941 1 SPI_TI=0;
942 1 Cnt_Long_1ms=0;
943 1 while(Cnt_Long_1ms<_5S)
944 1 {
945 2 if( SPI_Read_Point!=SPI_Write_Point) SPI_Read_Point++;
946 2 if (SPI_Read_Point==37)
947 2 {
948 3 if(SPI_Recv_Buf[0]==0x00 ) return 0;
949 3 if(SPI_Recv_Buf[0]==0x01 ) return 1;
950 3 return 0;
951 3 }
952 2 }
953 1 return 0;
954 1 }
955 //-----------------------------------------
956 // 把文件指針定位到指定位置
957 // 返回: 1--成功 0--失敗
958 //----------------------------------------
959 bit File_Seek(ulong index)
960 {
961 1 byte i;
962 1 for(i=0;i<37;i++) UARTBUF[i]=0x00;
963 1 for(i=4;i>0;i--)
964 1 {
965 2 UARTBUF[i]=(byte)index;
966 2 index>>=8;
967 2 }
968 1 UARTBUF[0]=0X03;//文件定位命令
969 1 SPI_Read_Point=0;
970 1 SPI_Write_Point=0;
971 1 Set_SPI_Master;
972 1 SPI_SS=0;
973 1 Delayms(2);
974 1 for(i=0;i<37;i++) SPI_Send_Byte(UARTBUF[i]);
975 1 Set_SPI_Slave;
976 1 temp_bit=SPI_SS;
977 1 SPI_TI=0;
978 1 Cnt_Long_1ms=0;
979 1 while(Cnt_Long_1ms<_5S)
980 1 {
981 2 if( SPI_Read_Point!=SPI_Write_Point) SPI_Read_Point++;
982 2 if (SPI_Read_Point==5)
C51 COMPILER V7.09 DATAFAX 03/22/2005 01:42:11 PAGE 17
983 2 {
984 3 if(SPI_Recv_Buf[0]==0x00 ) return 0;
985 3 if(SPI_Recv_Buf[0]==0x01 ) return 1;
986 3 return 0;
987 3 }
988 2 }
989 1 return 0;
990 1 }
991 //---------------------------------------------
992 // 從文件當(dāng)前位置讀取指定長(zhǎng)度的數(shù)據(jù)
993 // 入口參數(shù):length----讀取數(shù)據(jù)的長(zhǎng)度
994 //----------------------------------------------
995 void Read_File(ulong Cnt)
996 {
997 1 byte i;
998 1 for(i=0;i<37;i++) UARTBUF[i]=0x00;
999 1 for(i=4;i>0;i--)
1000 1 {
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -