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

📄 ch375h.lst

📁 USB 1.1 U Device for CH375 & USB 2.0 for CH375A 读写usb超精简的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
              // 如果串口波特率较低,不能满足在2mS传输64字节的要求,那么对于有些U盘将无法工作或者导致数据丢失
              void CH375_PORT_INIT( void ) 
              {
                      SCON = 0xD0;             // 设置串口为9位数据 
              
              }
              
              //-------------------------------------------------------------------------------------------------
              // 外部定义的被CH375程序库调用的子程序,向CH375写命令 
              void xWriteCH375Cmd( UINT8 mCmd ) 
              {
                      TI = 0;
                      TB8 = 1;
                      SBUF = mCmd;
                      while ( TI == 0 );
              }
              
              //-------------------------------------------------------------------------------------------------
              // 外部定义的被CH375程序库调用的子程序,向CH375写数据 
              void xWriteCH375Data( UINT8 mData ) 
              {
                      TI = 0;
                      TB8 = 0;
                      SBUF = mData;
                      while ( TI == 0 );
              }
              
              //-------------------------------------------------------------------------------------------------
              // 外部定义的被CH375程序库调用的子程序,从CH375读数据 
              UINT8 xReadCH375Data( void ) 
C51 COMPILER V7.20   CH375H                                                                03/07/2006 16:55:21 PAGE 4   

              {
                      while ( RI == 0 );
                      RI = 0;
                      return( SBUF );
              }
              
              #endif 
 183          
 184          //********************************************************************************************************
             -********
 185          //--------------------------------------------------------------------------------------------------------
             ---------
 186          // 自行编写的子程序,用以取代 CH375HF?.H 中的提供的默认子程序 
 187          //--------------------------------------------------------------------------------------------------------
             ---------
 188          //********************************************************************************************************
             -********
 189          // 
 190          //-------------------------------------------------------------------------------------------------
 191          #if UseCH375LIB == 1 
 192          //=================================================================================================
 193          // 中断状态查询处理子程序 
 194          //=================================================================================================
 195          // 
 196          #ifdef NO_DEFAULT_CH375_INT 
 197          // 在应用程序中定义 NO_DEFAULT_CH375_INT 可以禁止默认的中断处理程序,然后用自行编写的程序代替它 
 198          //-------------------------------------------------------------------------------------------------
 199          //-------------------------------------------------------------------------------------------------
 200          #if LIB_CFG_INT_EN == 0                                 
 201          // CH375的INT#引脚连接方式为"查询方式" 
 202          //-------------------------------------------------------------------------------------------------
 203          // 查询 CH375 中断并更新中断状态 
 204          void xQueryInterrupt( void )                    
 205          {
 206   1              while ( CH375_INT_WIRE );  // 如果CH375的中断引脚输出高电平则等待 
 207   1      //      if( !CH375_INT_WIRE )      // 中断请求 
 208   1      //      {
 209   1                      xWriteCH375Cmd( CMD_GET_STATUS );        // 获取当前中断状态 
 210   1                      CH375IntStatus &= 0x80; if ( CH375IntStatus ) CH375IntStatus = 0;  // 操作无意义,用于至少延时2uS 
 211   1                      CH375IntStatus = xReadCH375Data( );      // 获取中断状态 
 212   1                      if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT; // 检测到USB设备断开事件 
 213   1                      else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT;  // 检测到USB设备连接事件 
 214   1      //      }
 215   1      }
 216          
 217          //-------------------------------------------------------------------------------------------------
 218          #else 
              // LIB_CFG_INT_EN != 0, CH375的INT#引脚连接方式为"中断方式"                                                                     
              //-------------------------------------------------------------------------------------------------
              // 查询中断状态,等待硬件中断 
              void xQueryInterrupt( void )                    
              {
                      while ( CH375IntStatus == 0 );          // 子程序库调用该子程序之前CH375IntStatus=0,硬件中断后,由中断服务程序置为
             -非0的实际中断状态后返回 
              }
              
              // CH375中断服务程序,由CH375的INT#的低电平或者下降沿触发单片机中断 
              void CH375Interrupt( void ) interrupt CH375_INT_NO 
              {
                      CH375_CMD_PORT = CMD_GET_STATUS;        // 获取中断状态并取消中断请求 
                      CH375IntStatus &= 0x80; if ( CH375IntStatus ) CH375IntStatus = 0;  // 操作无意义,用于至少延时2uS 
                      CH375IntStatus = CH375_DAT_PORT;        // 获取中断状态 
C51 COMPILER V7.20   CH375H                                                                03/07/2006 16:55:21 PAGE 5   

                      if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT;  // 检测到USB设备断开事件 
                      else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT;   // 检测到USB设备连接事件 
              #ifdef CLEAR_INT_MARK
                      CLEAR_INT_MARK( );                      // 某些单片机需要由软件清除中断标志 
              #endif
              }
              #endif
 240          
 241          //-------------------------------------------------------------------------------------------------
 242          #endif
 243          
 244          //=================================================================================================
 245          // 用于从CH375读取文件数据到外部缓冲区子程序 
 246          // 用于从外部缓冲区读取文件数据到CH375子程序 
 247          //=================================================================================================
 248          // 
 249          #if LIB_CFG_FILE_IO == 0                                
              // 文件读写的数据的复制方式为"外部子程序" 
              //-------------------------------------------------------------------------------------------------
              // 
              #ifndef LIB_CFG_FILE_IO_DEFAULT 
              // 如果应用程序中定义该值则使用默认"外部子程序",否则应该自行编写程序代替 
              //-------------------------------------------------------------------------------------------------
              // 
              unsigned char xdata *current_buffer;    // 保存文件数据读写时的缓冲区的当前指针,由应用程序在调用CH375FileRead
             -X和CH375FileWriteX子程序前设置初值 
              
              // 该子程序由CH375的子程序库调用,用于从CH375读取文件数据到外部缓冲区,被CH375FileReadX调用 
              void xWriteToExtBuf( UINT8 mLength )    
              {
              //      if ( (UINT16)current_buffer + mLength >= (UINT16)&FILE_DATA_BUF + sizeof( FILE_DATA_BUF ) ) return;  //
             - 防止缓冲区溢出 
                      if ( mLength ) 
                      {
                              do // 根据长度读取数据,实际上长度总是CH375_MAX_DATA_LEN,也就是64 
                              {  
                                      *current_buffer = CH375_DAT_PORT;  // 读出数据并保存,可以用这种方式将文件数据保存到单片机的各种串行存储
             -器中 
                                      current_buffer ++;
                              } while ( -- mLength );
                      }    // 复制上述数据的总时间不得超过2mS 
                      else // 重试,恢复缓冲区起址,如果将文件数据读写的缓冲区的当前指针放在mCmdParam.ReadX.mDataBuffer中则会被自
             -动恢复,无需下面的两行程序 
                      {  
                              current_buffer += (UINT16)mCmdParam.ReadX.mDataBuffer;  // mDataBuffer中为负值 
                              mCmdParam.ReadX.mDataBuffer = 0;  // 为了支持重试,在调用CH375FileReadX之前也应该清0 
                      }
              }
              
              #ifdef EN_DISK_WRITE
              //-------------------------------------------------------------------------------------------------
              // 该子程序由CH375的子程序库调用,用于从外部缓冲区读取文件数据到CH375,被CH375FileWriteX调用 
              void xReadFromExtBuf( UINT8 mLength )   
              {
                      if ( mLength ) 
                      {
                              do // 根据长度写入数据,实际上长度总是CH375_MAX_DATA_LEN,也就是64 
                              {  
                                      CH375_DAT_PORT = *current_buffer;  // 将数据写入,可以用这种方式从单片机的各种串行存储器中取出文件数据 
                                      current_buffer ++;
                              } while ( -- mLength );
                      }    // 复制上述数据的总时间不得超过2mS 
C51 COMPILER V7.20   CH375H                                                                03/07/2006 16:55:21 PAGE 6   

                      else // 重试,恢复缓冲区起址,如果将文件数据读写的缓冲区的当前指针放在mCmdParam.WriteX.mDataBuffer中则会被

⌨️ 快捷键说明

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