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

📄 usbcore.lst

📁 HID usb设备的单片机固件程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 255           
 256           //bMaxPower字段,该设备需要的最大电流量。由于我们的板子
 257           //需要的电流不到100mA,因此我们这里设置为100mA。由于每单位
 258           //电流为2mA,所以这里设置为50(0x32)。
 259           0x32,
 260           
 261           /*******************接口描述符*********************/
 262           //bLength字段。接口描述符的长度为9字节。
 263           0x09,
 264           
 265           //bDescriptorType字段。接口描述符的编号为0x04。
 266           0x04,
 267           
 268           //bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。
 269           0x00,
 270           
 271           //bAlternateSetting字段。该接口的备用编号,为0。
 272           0x00,
 273           
 274           //bNumEndpoints字段。非0端点的数目。由于USB鼠标只需要一个
 275           //中断输入端点,因此该值为1。
 276           0x01,
 277           
 278           //bInterfaceClass字段。该接口所使用的类。USB鼠标是HID类,
 279           //HID类的编码为0x03。
 280           0x03,
 281           
 282           //bInterfaceSubClass字段。该接口所使用的子类。在HID1.1协议中,
 283           //只规定了一种子类:支持BIOS引导启动的子类。
 284           //USB键盘、鼠标属于该子类,子类代码为0x01。
 285           0x01,
 286           
 287           //bInterfaceProtocol字段。如果子类为支持引导启动的子类,
 288           //则协议可选择鼠标和键盘。键盘代码为0x01,鼠标代码为0x02。
 289           0x02,
 290           
 291           //iConfiguration字段。该接口的字符串索引值。这里没有,为0。
 292           0x00,
 293           
 294           /******************HID描述符************************/
 295           //bLength字段。本HID描述符下只有一个下级描述符。所以长度为9字节。
 296           0x09,
 297           
 298           //bDescriptorType字段。HID描述符的编号为0x21。
 299           0x21,
 300           
 301           //bcdHID字段。本协议使用的HID1.1协议。注意低字节在先。
 302           0x10,
 303           0x01,
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:43 PAGE 6   

 304           
 305           //bCountyCode字段。设备适用的国家代码,这里选择为美国,代码0x21。
 306           0x21,
 307           
 308           //bNumDescriptors字段。下级描述符的数目。我们只有一个报告描述符。
 309           0x01,
 310           
 311           //bDescritporType字段。下级描述符的类型,为报告描述符,编号为0x22。
 312           0x22,
 313           
 314           //bDescriptorLength字段。下级描述符的长度。下级描述符为报告描述符。
 315           sizeof(ReportDescriptor)&0xFF,
 316           (sizeof(ReportDescriptor)>>8)&0xFF,
 317           
 318           /**********************端点描述符***********************/
 319           //bLength字段。端点描述符长度为7字节。
 320           0x07,
 321           
 322           //bDescriptorType字段。端点描述符编号为0x05。
 323           0x05,
 324           
 325           //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
 326           //D7位表示数据方向,输入端点D7为1。所以输入端点1的地址为0x81。
 327           0x81,
 328           
 329           //bmAttributes字段。D1~D0为端点传输类型选择。
 330           //该端点为中断端点。中断端点的编号为3。其它位保留为0。
 331           0x03,
 332           
 333           //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
 334           //注意低字节在先。
 335           0x10,
 336           0x00,
 337           
 338           //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
 339           0x0A
 340          };
 341          ////////////////////////配置描述符集合完毕//////////////////////////
 342          
 343          /************************语言ID的定义********************/
 344          code uint8 LanguageId[4]=
 345          {
 346           0x04, //本描述符的长度
 347           0x03, //字符串描述符
 348           //0x0409为美式英语的ID
 349           0x09,
 350           0x04
 351          };
 352          ////////////////////////语言ID完毕//////////////////////////////////
 353          
 354          /**************************************************/
 355          /*********        本转换结果来自         **********/
 356          /********* Http://computer00.21ic.org    **********/
 357          /*********        作者: 电脑圈圈         **********/
 358          /*********         欢迎大家使用          **********/
 359          /*********    版权所有,盗版请写明出处   **********/
 360          /**************************************************/
 361          
 362          //http://computer00.21ic.org/user1/2198/archives/2007/42769.html
 363          //字符串“电脑圈圈的USB专区 Http://group.ednchina.com/93/”的Unicode编码
 364          //8位小端格式
 365          code uint8 ManufacturerStringDescriptor[82]={
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:43 PAGE 7   

 366          82,         //该描述符的长度为82字节
 367          0x03,       //字符串描述符的类型编码为0x03
 368          0x35, 0x75, //电
 369          0x11, 0x81, //脑
 370          0x08, 0x57, //圈
 371          0x08, 0x57, //圈
 372          0x84, 0x76, //的
 373          0x55, 0x00, //U
 374          0x53, 0x00, //S
 375          0x42, 0x00, //B
 376          0x13, 0x4e, //专
 377          0x3a, 0x53, //区
 378          0x20, 0x00, // 
 379          0x48, 0x00, //H
 380          0x74, 0x00, //t
 381          0x74, 0x00, //t
 382          0x70, 0x00, //p
 383          0x3a, 0x00, //:
 384          0x2f, 0x00, ///
 385          0x2f, 0x00, ///
 386          0x67, 0x00, //g
 387          0x72, 0x00, //r
 388          0x6f, 0x00, //o
 389          0x75, 0x00, //u
 390          0x70, 0x00, //p
 391          0x2e, 0x00, //.
 392          0x65, 0x00, //e
 393          0x64, 0x00, //d
 394          0x6e, 0x00, //n
 395          0x63, 0x00, //c
 396          0x68, 0x00, //h
 397          0x69, 0x00, //i
 398          0x6e, 0x00, //n
 399          0x61, 0x00, //a
 400          0x2e, 0x00, //.
 401          0x63, 0x00, //c
 402          0x6f, 0x00, //o
 403          0x6d, 0x00, //m
 404          0x2f, 0x00, ///
 405          0x39, 0x00, //9
 406          0x33, 0x00, //3
 407          0x2f, 0x00  ///
 408          };
 409          /////////////////////////厂商字符串结束/////////////////////////////
 410          
 411          //字符串“《圈圈教你玩USB》之USB鼠标”的Unicode编码
 412          //8位小端格式
 413          code uint8 ProductStringDescriptor[34]={
 414          34,         //该描述符的长度为34字节
 415          0x03,       //字符串描述符的类型编码为0x03
 416          0x0a, 0x30, //《
 417          0x08, 0x57, //圈
 418          0x08, 0x57, //圈
 419          0x59, 0x65, //教
 420          0x60, 0x4f, //你
 421          0xa9, 0x73, //玩
 422          0x55, 0x00, //U
 423          0x53, 0x00, //S
 424          0x42, 0x00, //B
 425          0x0b, 0x30, //》
 426          0x4b, 0x4e, //之
 427          0x55, 0x00, //U
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:43 PAGE 8   

 428          0x53, 0x00, //S
 429          0x42, 0x00, //B
 430          0x20, 0x9f, //鼠
 431          0x07, 0x68  //标
 432          };
 433          ////////////////////////产品字符串结束////////////////////////////
 434          
 435          //字符串“2008-07-07”的Unicode编码
 436          //8位小端格式
 437          code uint8 SerialNumberStringDescriptor[22]={
 438          22,         //该描述符的长度为22字节
 439          0x03,       //字符串描述符的类型编码为0x03
 440          0x32, 0x00, //2
 441          0x30, 0x00, //0
 442          0x30, 0x00, //0
 443          0x38, 0x00, //8
 444          0x2d, 0x00, //-
 445          0x30, 0x00, //0
 446          0x37, 0x00, //7
 447          0x2d, 0x00, //-
 448          0x30, 0x00, //0
 449          0x37, 0x00  //7
 450          };
 451          //////////////////////产品序列号字符串结束/////////////////////////
 452          
 453          /********************************************************************
 454          函数功能:延时x毫秒函数。
 455          入口参数:x:延时的毫秒数。
 456          返    回:无。
 457          备    注:无。
 458          ********************************************************************/
 459          void DelayXms(uint16 x)                
 460          {
 461   1       uint16 i;
 462   1       uint16 j;
 463   1       for(i=0;i<x;i++)
 464   1       for(j=0;j<227;j++); //循环语句延时
 465   1      }
 466          ////////////////////////End of function//////////////////////////////
 467          
 468          /********************************************************************
 469          函数功能:USB断开连接函数。
 470          入口参数:无。
 471          返    回:无。
 472          备    注:无。
 473          ********************************************************************/
 474          void UsbDisconnect(void)
 475          {
 476   1      #ifdef DEBUG0
 477   1       Prints("断开USB连接。\r\n");
 478   1      #endif
 479   1       D12WriteCommand(D12_SET_MODE);  //写设置模式命令
 480   1       D12WriteByte(0x06); //设置模式的第一字节
 481   1       D12WriteByte(0x47); //设置模式的第二字节
 482   1       DelayXms(1000);  //延迟1秒
 483   1      }
 484          ////////////////////////End of function//////////////////////////////
 485          
 486          /********************************************************************
 487          函数功能:USB连接函数。
 488          入口参数:无。
 489          返    回:无。
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:43 PAGE 9   

 490          备    注:无。
 491          ********************************************************************/
 492          void UsbConnect(void)
 493          {
 494   1      #ifdef DEBUG0
 495   1       Prints("连接USB。\r\n");
 496   1      #endif
 497   1       D12WriteCommand(D12_SET_MODE);  //写设置模式命令
 498   1       D12WriteByte(0x16); //设置模式的第一字节
 499   1       D12WriteByte(0x47); //设置模式的第二字节
 500   1      }
 501          ////////////////////////End of function//////////////////////////////
 502          
 503          /********************************************************************
 504          函数功能:总线挂起中断处理函数。
 505          入口参数:无。
 506          返    回:无。
 507          备    注:无。
 508          ********************************************************************/
 509          void UsbBusSuspend(void)
 510          {
 511   1      #ifdef DEBUG0
 512   1       Prints("USB总线挂起。\r\n");
 513   1      #endif
 514   1      }
 515          ////////////////////////End of function//////////////////////////////
 516          
 517          /********************************************************************

⌨️ 快捷键说明

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