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

📄 usbcore.lst

📁 单片机上实现USB转串口程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 291           0x01,
 292           
 293           //bAlternateSetting字段。该接口的备用编号,为0。
 294           0x00,
 295           
 296           //bNumEndpoints字段。非0端点的数目。该设备需要使用一对批量端点,设置为2。
 297           0x02,
 298           
 299           //bInterfaceClass字段。该接口所使用的类。数据类接口的代码为0x0A。
 300           0x0A,
 301           
 302           //bInterfaceSubClass字段。该接口所使用的子类为0。
 303           0x00,
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:07 PAGE 6   

 304           
 305           //bInterfaceProtocol字段。该接口所使用的协议为0。
 306           0x00,
 307           
 308           //iConfiguration字段。该接口的字符串索引值。这里没有,为0。
 309           0x00,
 310           
 311           /*****  以下为接口1(数据类接口)的端点描述符  *****/
 312           /*************** 批量输入端点2描述符 ******************/
 313           //bLength字段。端点描述符长度为7字节。
 314           0x07,
 315           
 316           //bDescriptorType字段。端点描述符编号为0x05。
 317           0x05,
 318           
 319           //bEndpointAddress字段。端点的地址。我们使用D12的输入端点2。
 320           //D7位表示数据方向,输入端点D7为1。所以输入端点2的地址为0x82。
 321           0x82,
 322           
 323           //bmAttributes字段。D1~D0为端点传输类型选择。
 324           //该端点为批量端点,批量端点的编号为0x02。其它位保留为0。
 325           0x02,
 326           
 327           //wMaxPacketSize字段。该端点的最大包长。端点2的最大包长为64字节。
 328           //注意低字节在先。
 329           0x40,
 330           0x00,
 331           
 332           //bInterval字段。端点查询的时间,这里对批量端点无效。
 333           0x00,
 334           
 335           /*************** 批量输出端点2描述符 ******************/
 336           //bLength字段。端点描述符长度为7字节。
 337           0x07,
 338           
 339           //bDescriptorType字段。端点描述符编号为0x05。
 340           0x05,
 341           
 342           //bEndpointAddress字段。端点的地址。我们使用D12的输出端点2。
 343           //D7位表示数据方向,输出端点D7为0。所以输出端点2的地址为0x02。
 344           0x02,
 345           
 346           //bmAttributes字段。D1~D0为端点传输类型选择。
 347           //该端点为批量端点,批量端点的编号为0x02。其它位保留为0。
 348           0x02,
 349           
 350           //wMaxPacketSize字段。该端点的最大包长。端点2的最大包长为64字节。
 351           //注意低字节在先。
 352           0x40,
 353           0x00,
 354           
 355           //bInterval字段。端点查询的时间,这里对批量端点无效。
 356           0x00
 357          };
 358          ////////////////////////配置描述符集合完毕//////////////////////////
 359          
 360          /************************语言ID的定义********************/
 361          code uint8 LanguageId[4]=
 362          {
 363           0x04, //本描述符的长度
 364           0x03, //字符串描述符
 365           //0x0409为美式英语的ID
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:07 PAGE 7   

 366           0x09,
 367           0x04
 368          };
 369          ////////////////////////语言ID完毕//////////////////////////////////
 370          
 371          /**************************************************/
 372          /*********        本转换结果来自         **********/
 373          /********* Http://computer00.21ic.org    **********/
 374          /*********        作者: 电脑圈圈         **********/
 375          /*********         欢迎大家使用          **********/
 376          /*********    版权所有,盗版请写明出处   **********/
 377          /**************************************************/
 378          
 379          //http://computer00.21ic.org/user1/2198/archives/2007/42769.html
 380          //字符串“电脑圈圈的USB专区 Http://group.ednchina.com/93/”的Unicode编码
 381          //8位小端格式
 382          code uint8 ManufacturerStringDescriptor[82]={
 383          82,         //该描述符的长度为82字节
 384          0x03,       //字符串描述符的类型编码为0x03
 385          0x35, 0x75, //电
 386          0x11, 0x81, //脑
 387          0x08, 0x57, //圈
 388          0x08, 0x57, //圈
 389          0x84, 0x76, //的
 390          0x55, 0x00, //U
 391          0x53, 0x00, //S
 392          0x42, 0x00, //B
 393          0x13, 0x4e, //专
 394          0x3a, 0x53, //区
 395          0x20, 0x00, // 
 396          0x48, 0x00, //H
 397          0x74, 0x00, //t
 398          0x74, 0x00, //t
 399          0x70, 0x00, //p
 400          0x3a, 0x00, //:
 401          0x2f, 0x00, ///
 402          0x2f, 0x00, ///
 403          0x67, 0x00, //g
 404          0x72, 0x00, //r
 405          0x6f, 0x00, //o
 406          0x75, 0x00, //u
 407          0x70, 0x00, //p
 408          0x2e, 0x00, //.
 409          0x65, 0x00, //e
 410          0x64, 0x00, //d
 411          0x6e, 0x00, //n
 412          0x63, 0x00, //c
 413          0x68, 0x00, //h
 414          0x69, 0x00, //i
 415          0x6e, 0x00, //n
 416          0x61, 0x00, //a
 417          0x2e, 0x00, //.
 418          0x63, 0x00, //c
 419          0x6f, 0x00, //o
 420          0x6d, 0x00, //m
 421          0x2f, 0x00, ///
 422          0x39, 0x00, //9
 423          0x33, 0x00, //3
 424          0x2f, 0x00  ///
 425          };
 426          /////////////////////////厂商字符串结束/////////////////////////////
 427          
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:07 PAGE 8   

 428          //字符串“《圈圈教你玩USB》之 USB转串口”的Unicode编码
 429          //8位小端格式
 430          code uint8 ProductStringDescriptor[38]={
 431          38,         //该描述符的长度为38字节
 432          0x03,       //字符串描述符的类型编码为0x03
 433          0x0a, 0x30, //《
 434          0x08, 0x57, //圈
 435          0x08, 0x57, //圈
 436          0x59, 0x65, //教
 437          0x60, 0x4f, //你
 438          0xa9, 0x73, //玩
 439          0x55, 0x00, //U
 440          0x53, 0x00, //S
 441          0x42, 0x00, //B
 442          0x0b, 0x30, //》
 443          0x4b, 0x4e, //之
 444          0x20, 0x00, // 
 445          0x55, 0x00, //U
 446          0x53, 0x00, //S
 447          0x42, 0x00, //B
 448          0x6c, 0x8f, //转
 449          0x32, 0x4e, //串
 450          0xe3, 0x53  //口
 451          };
 452          ////////////////////////产品字符串结束////////////////////////////
 453          
 454          //字符串“2008-08-03”的Unicode编码
 455          //8位小端格式
 456          code uint8 SerialNumberStringDescriptor[22]={
 457          22,         //该描述符的长度为22字节
 458          0x03,       //字符串描述符的类型编码为0x03
 459          0x32, 0x00, //2
 460          0x30, 0x00, //0
 461          0x30, 0x00, //0
 462          0x38, 0x00, //8
 463          0x2d, 0x00, //-
 464          0x30, 0x00, //0
 465          0x38, 0x00, //8
 466          0x2d, 0x00, //-
 467          0x30, 0x00, //0
 468          0x33, 0x00  //3
 469          };
 470          //////////////////////产品序列号字符串结束/////////////////////////
 471          
 472          /********************************************************************
 473          函数功能:延时x毫秒函数。
 474          入口参数:x:延时的毫秒数。
 475          返    回:无。
 476          备    注:无。
 477          ********************************************************************/
 478          void DelayXms(uint16 x)                
 479          {
 480   1       uint16 i;
 481   1       uint16 j;
 482   1       for(i=0;i<x;i++)
 483   1       for(j=0;j<227;j++); //循环语句延时
 484   1      }
 485          ////////////////////////End of function//////////////////////////////
 486          
 487          /********************************************************************
 488          函数功能:USB断开连接函数。
 489          入口参数:无。
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:07 PAGE 9   

 490          返    回:无。
 491          备    注:无。
 492          ********************************************************************/
 493          void UsbDisconnect(void)
 494          {
 495   1      #ifdef DEBUG0
               Prints("断开USB连接。\r\n");
              #endif
 498   1       D12WriteCommand(D12_SET_MODE);  //写设置模式命令
 499   1       D12WriteByte(0x06); //设置模式的第一字节
 500   1       D12WriteByte(0x47); //设置模式的第二字节
 501   1       DelayXms(1000);  //延迟1秒
 502   1      }
 503          ////////////////////////End of function//////////////////////////////
 504          
 505          /********************************************************************
 506          函数功能:USB连接函数。
 507          入口参数:无。
 508          返    回:无。
 509          备    注:无。
 510          ********************************************************************/
 511          void UsbConnect(void)
 512          {
 513   1      #ifdef DEBUG0
               Prints("连接USB。\r\n");
              #endif
 516   1       D12WriteCommand(D12_SET_MODE);  //写设置模式命令
 517   1       D12WriteByte(0x16); //设置模式的第一字节
 518   1       D12WriteByte(0x47); //设置模式的第二字节
 519   1      }
 520          ////////////////////////End of function//////////////////////////////
 521          
 522          /********************************************************************
 523          函数功能:总线挂起中断处理函数。
 524          入口参数:无。
 525          返    回:无。
 526          备    注:无。
 527          ********************************************************************/
 528          void UsbBusSuspend(void)
 529          {
 530   1      #ifdef DEBUG0
               Prints("USB总线挂起。\r\n");
              #endif
 533   1      }
 534          ////////////////////////End of function//////////////////////////////
 535          
 536          /********************************************************************
 537          函数功能:总线复位中断处理函数。
 538          入口参数:无。
 539          返    回:无。
 540          备    注:无。
 541          ********************************************************************/
 542          void UsbBusReset(void)
 543          {
 544   1      #ifdef DEBUG0
               Prints("USB总线复位。\r\n");
              #endif
 547   1       Ep1InIsBusy=0; //复位后端点1输入缓冲区空闲。
 548   1       Ep2InIsBusy=0; //复位后端点2输入缓冲区空闲。
 549   1       UartBufferOutputPoint=0;
 550   1       UartBufferInputPoint=0;
 551   1       UartByteCount=0;
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:07 PAGE 10  

 552   1       UsbEp2ByteCount=0;
 553   1       UsbEp2BufferOutputPoint=0;
 554   1      }
 555          ////////////////////////End of function//////////////////////////////
 556          
 557          /********************************************************************
 558          函数功能:根据pData和SendLength将数据发送到端点0的函数。
 559          入口参数:无。
 560          返    回:无。
 561          备    注:无。
 562          ********************************************************************/
 563          void UsbEp0SendData(void)
 564          {
 565   1       //将数据写到端点中去准备发送
 566   1       //写之前要先判断一下需要发送的数据是否比端点0
 567   1       //最大长度大,如果超过端点大小,则一次只能发送
 568   1       //最大包长的数据。端点0的最大包长在DeviceDescriptor[7]
 569   1       if(SendLength>DeviceDescriptor[7])
 570   1       {
 571   2        //按最大包长度发送
 572   2        D12WriteEndpointBuffer(1,DeviceDescriptor[7],pSendData);
 573   2        //发送后剩余字节数减少最大包长
 574   2        SendLength-=DeviceDescriptor[7];
 575   2        //发送一次后指针位置要调整
 576   2        pSendData+= DeviceDescriptor[7];
 577   2       }
 578   1       else
 579   1       {
 580   2        if(SendLength!=0)
 581   2        {
 582   3         //不够最大包长,可以直接发送
 583   3         D12WriteEndpointBuffer(1,SendLength,pSendData);
 584   3         //发送完毕后,SendLength长度变为0
 585   3         SendLength=0;
 586   3        }
 587   2        else //如果要发送的数据包长度为0

⌨️ 快捷键说明

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