📄 usbcore.lst
字号:
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 + -