⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datafax.lst

📁 PHILIP LPC935MCU UART用于与传真模块通信,SPI用于与SL811的USB模块通信.该软件把U盘存储的文件通过传真发到对方相同的设备接收到U盘
💻 LST
📖 第 1 页 / 共 5 页
字号:
 748   1         EA=1;
 749   1      }
 750          
 751          //---------------------------------------------------
 752          //                              SPI总线中断函数
 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发送字节函数
 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发送字符串函数
 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          //  注:    目前只接收处理前三个文件
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]);//发送取文件列表命令 
 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]);//发送取文件列表命令 
 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);                                   //获取第一个文件信息
 874   1          LCD_Show_Data(4,20,"1.");
 875   1          LCD_Show_Data(4,18,File_Name);
 876   1          Get_File_Info(37);                                  //获取第二个文件信息
 877   1          LCD_Show_Data(2,20,"2.");
 878   1          LCD_Show_Data(2,18,File_Name);
 879   1          Get_File_Info(69);                                  //获取第三个文件信息
 880   1          LCD_Show_Data(0,20,"3.");
 881   1          LCD_Show_Data(0,18,File_Name);
 882   1          
 883   1      }
 884          //---------------------------------------------------
 885          //         获取文详细信息项
 886          //      住:目前只取出了文件名和文件长度信息
 887          //              其他信息存放在File_Info数组
 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--)//获取文件长度
 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          //              打开已在文件列表中选中的文件
 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;//打开文件命令
 932   1          for(i=5;i<16;i++) UARTBUF[i]=File_Info[i-5];//要打开的文件
 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          //              从文件当前位置读取指定长度的数据
 993          //              入口参数:length----读取数据的长度
 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          {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -