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

📄 usbp.lst

📁 全国电子设计大赛:智能电动车的设计.实现功能:以AT89C52单片机为核心
💻 LST
字号:
C51 COMPILER V7.20   USBP                                                                  11/15/2005 18:46:54 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE USBP
OBJECT MODULE PLACED IN USBP.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil Uvision V7.20\C51\BIN\C51.EXE USBP.C BROWSE DEBUG OBJECTEXTEND SYMBOLS

line level    source

   1          //*************************************************************************************************
   2          //  Module Name :  USBP.C
   3          //  CreateDate  :  2005-05-02
   4          //  ModifData   :  2005-05-03
   5          //  Description :  
   6          //  Author      :  李远正
   7          //  Version     :  V1.0
   8          //*************************************************************************************************
   9          // 
  10          // U盘文件读写模块, 连接方式: 并口+( 中断 或 查询 )
  11          // MCS-51单片机C语言示例程序, 仅适用于V2.5及以上版本的模块 
  12          // 因为使用U盘文件读写模块而不是使用U盘文件级子程序库,所以占用较少的单片机资源 
  13          
  14          #include <C8051F020.H> 
  15          #include <absacc.h> 
  16          #include "USBP.H" 
  17          /*
  18          //-------------------------------------------------------------------------------------------------
  19          //-------------------------------------------------------------------------------------------------
  20          // 
  21          CMD_PARAM               mCmdParam;                              // 默认情况下该结构将占用64字节的RAM,可以修改MAX_PATH_LEN常量,当修改为32时,只占用
             -32字节的RAM 
  22          
  23          unsigned char   mIntStatus;                             // CH375模块的中断状态或者操作完成状态 
  24          */
  25          //*************************************************************************************************
  26          // 对于模拟的并口读写时序或者其它并口读写方式,请修改以下3个子程序 mDelayuS( 1 );
  27          #define CH375HM_INDEX_WR( Index )       { CH375HM_INDEX = ( Index );  } // 写索引地址 
  28          #define CH375HM_DATA_WR( Data )         { CH375HM_DATA = ( Data ); }    // 写数据 
  29          #define CH375HM_DATA_RD( )                      ( CH375HM_DATA )                                // 读数据 
  30          
  31          //=================================================================================================
  32          //=================================================================================================
  33          // 并口连接方式 
  34          #if CH375HM_CONNECT == 1
  35          
  36            //---------------------------------------------
  37            // 中断方式 
  38            #if CH375HM_INT  == 1   
  39          
  40          //-------------------------------------------------------------------------------------------------
  41          // 1 uS Delay 
  42          void mDelayuS( unsigned char usecond )
  43          {
  44   1              unsigned char i;
  45   1      
  46   1              while( usecond-- ) for( i=0; i<1; i++ );
  47   1      }
  48          
  49          //=================================================================================================
  50          //                              中断方式 : ExecCommand( );
  51          //=================================================================================================
  52          // 中断方式有两个子程序如下 :  
  53          //-------------------------------------------------------------------------------------------------
  54          // CH375模块的中断服务程序 
C51 COMPILER V7.20   USBP                                                                  11/15/2005 18:46:54 PAGE 2   

  55          void CH375HMInterrupt( ) interrupt CH375HM_INT_NO 
  56          {
  57   1              unsigned char   status, i;
  58   1          #define     DataCount       status          // 节约一个变量单元 
  59   1      
  60   1              CH375HM_INT_N( );               // 关闭中断 
  61   1      
  62   1              CH375HM_INDEX_WR( 63 );         // 写入索引地址63 
  63   1              status = CH375HM_DATA_RD( );    // 从索引地址63读取中断状态 
  64   1              CH375HM_STA = 1;                // 中断应答,取消来自模块的中断请求 
  65   1              mDelayuS( 3 );                  // 3 uS 
  66   1      
  67   1              // 正在从U盘读数据块,请求数据读出.( 每次传输过程必须在2mS 时间之内完成,否则有些U 盘可能会工作不正常。)
  68   1              if ( status == USB_INT_DISK_READ ) 
  69   1              {  
  70   2                      DataCount = 64;  // 计数,从CH421的索引地址00H开始,连续取走64 字节的数据块 
  71   2                      i = 0;
  72   2                      do // 要提高文件数据读写速度,这段程序用汇编程序效率更高,在C51中,do+while比for或者while结构效率高 
  73   2                      {  
  74   3                              CH375HM_INDEX_WR( i++ ); 
  75   3                              *buffer++ = CH375HM_DATA_RD( );  // 从索引地址0到63依次读出64字节的数据,保存到外部缓冲区 
  76   3                      } while ( -- DataCount );            // 上面这一小段C程序用汇编程序效率要高近一倍 
  77   2                      CH375HM_STA = 0;  // 产生下降沿通知模块继续,说明64字节数据已经读取完成 
  78   2              }
  79   1      
  80   1              // 正在向U盘写数据块,请求数据写入.( 每次传输过程必须在2mS 时间之内完成,否则有些U 盘可能会工作不正常。)
  81   1              else if ( status == USB_INT_DISK_WRITE ) 
  82   1              {  
  83   2                      CH375HM_INDEX_WR( 0 );
  84   2                      i = 64;
  85   2                      do // 要提高文件数据读写速度,这段程序用汇编程序写效率更高,在C51中,do+while比for或者while结构效率高 
  86   2                      {  
  87   3                              CH375HM_DATA_WR( *buffer++ );  // 向索引地址0到63依次写入64字节的数据,写入的数据来自外部缓冲区 
  88   3                      } while ( -- i );
  89   2                      CH375HM_STA = 0;  // 产生下降沿通知模块继续,说明64字节数据已经写入完成 
  90   2              }
  91   1      
  92   1              // 读写数据块失败重试,应该向回修改缓冲区指针 
  93   1              else if ( status == USB_INT_DISK_RETRY ) 
  94   1              {  
  95   2                      CH375HM_INDEX_WR( 0 );
  96   2                      i = CH375HM_DATA_RD( );         // 大端模式下为回改指针字节数的高8位,如果是小端模式那么接收到的是回改指

⌨️ 快捷键说明

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