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

📄 usbcore.lst

📁 USB鼠标程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 781   5             #ifdef DEBUG0
 782   5              Prints("获取接口。\r\n");
 783   5             #endif
 784   5            break;
 785   5            
 786   5            case GET_STATUS: //获取状态
 787   5             #ifdef DEBUG0
 788   5              Prints("获取状态。\r\n");
 789   5             #endif
 790   5            break;
 791   5            
 792   5            case SYNCH_FRAME: //同步帧
 793   5             #ifdef DEBUG0
 794   5              Prints("同步帧。\r\n");
 795   5             #endif
 796   5            break;
 797   5            
 798   5            default:  //未定义的标准请求
 799   5             #ifdef DEBUG0
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:43 PAGE 14  

 800   5              Prints("错误:未定义的标准输入请求。\r\n");
 801   5             #endif       
 802   5            break;
 803   5           }
 804   4          break;
 805   4          
 806   4          case 1:  //类请求
 807   4           #ifdef DEBUG0
 808   4            Prints("USB类输入请求:\r\n");
 809   4           #endif
 810   4          break;
 811   4          
 812   4          case 2:  //厂商请求
 813   4           #ifdef DEBUG0
 814   4            Prints("USB厂商输入请求:\r\n");
 815   4           #endif
 816   4          break;
 817   4          
 818   4          default: //未定义的请求。这里只显示一个报错信息。
 819   4           #ifdef DEBUG0
 820   4            Prints("错误:未定义的输入请求。\r\n");
 821   4           #endif
 822   4          break;
 823   4         }
 824   3        }
 825   2        //否则说明是输出请求
 826   2        else //if(bmRequestType&0x80==0x80)之else
 827   2        {
 828   3         //根据bmRequestType的D6~5位散转,D6~5位表示请求的类型
 829   3         //0为标准请求,1为类请求,2为厂商请求。
 830   3         switch((bmRequestType>>5)&0x03)
 831   3         {
 832   4          case 0:  //标准请求
 833   4           #ifdef DEBUG0
 834   4            Prints("USB标准输出请求:");
 835   4           #endif
 836   4           //USB协议定义了几个标准输出请求,我们实现这些标准请求即可
 837   4           //请求的代码在bRequest中,对不同的请求代码进行散转
 838   4           switch(bRequest)
 839   4           {
 840   5            case CLEAR_FEATURE: //清除特性
 841   5             #ifdef DEBUG0
 842   5              Prints("清除特性。\r\n");
 843   5             #endif
 844   5            break;
 845   5            
 846   5            case SET_ADDRESS:  //设置地址
 847   5             #ifdef DEBUG0
 848   5              Prints("设置地址。地址为:");
 849   5              PrintHex(wValue&0xFF); //显示所设置的地址
 850   5              Prints("\r\n");
 851   5             #endif
 852   5             D12SetAddress(wValue&0xFF); //wValue中的低字节是设置的地址值
 853   5             //设置地址没有数据过程,直接进入到状态过程,返回一个0长度的数据包
 854   5             SendLength=0;
 855   5             NeedZeroPacket=1;
 856   5             //将数据通过EP0返回
 857   5             UsbEp0SendData();
 858   5            break;
 859   5            
 860   5            case SET_CONFIGURATION: //设置配置
 861   5             #ifdef DEBUG0
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:43 PAGE 15  

 862   5              Prints("设置配置。\r\n");
 863   5             #endif
 864   5             //使能非0端点。非0端点只有在设置为非0的配置后才能使能。
 865   5             //wValue的低字节为配置的值,如果该值为非0,才能使能非0端点。
 866   5             //保存当前配置值
 867   5             ConfigValue=wValue&0xFF;
 868   5             D12SetEndpointEnable(ConfigValue);
 869   5             //返回一个0长度的状态数据包
 870   5             SendLength=0;
 871   5             NeedZeroPacket=1;
 872   5             //将数据通过EP0返回
 873   5             UsbEp0SendData();
 874   5            break;
 875   5            
 876   5            case SET_DESCRIPTOR: //设置描述符
 877   5             #ifdef DEBUG0
 878   5              Prints("设置描述符。\r\n");
 879   5             #endif
 880   5            break;
 881   5            
 882   5            case SET_FEATURE: //设置特性
 883   5             #ifdef DEBUG0
 884   5              Prints("设置特性。\r\n");
 885   5             #endif
 886   5            break;
 887   5      
 888   5            case SET_INTERFACE: //设置接口
 889   5             #ifdef DEBUG0
 890   5              Prints("设置接口。\r\n");
 891   5             #endif
 892   5            break;      
 893   5            
 894   5            default:  //未定义的标准请求
 895   5             #ifdef DEBUG0
 896   5              Prints("错误:未定义的标准输出请求。\r\n");
 897   5             #endif       
 898   5            break;
 899   5           }
 900   4          break;
 901   4          
 902   4          case 1:  //类请求
 903   4           #ifdef DEBUG0
 904   4            Prints("USB类输出请求:");
 905   4           #endif
 906   4           switch(bRequest)
 907   4           {
 908   5            case SET_IDLE:
 909   5             #ifdef DEBUG0
 910   5              Prints("设置空闲。\r\n");
 911   5             #endif
 912   5             //只需要返回一个0长度的数据包即可
 913   5             SendLength=0;
 914   5             NeedZeroPacket=1;
 915   5             //将数据通过EP0返回
 916   5             UsbEp0SendData();
 917   5            break;
 918   5            
 919   5            default:
 920   5             #ifdef DEBUG0
 921   5              Prints("未知请求。\r\n");
 922   5             #endif
 923   5            break;
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:43 PAGE 16  

 924   5           }
 925   4          break;
 926   4          
 927   4          case 2:  //厂商请求
 928   4           #ifdef DEBUG0
 929   4            Prints("USB厂商输出请求:\r\n");
 930   4           #endif
 931   4          break;
 932   4          
 933   4          default: //未定义的请求。这里只显示一个报错信息。
 934   4           #ifdef DEBUG0
 935   4            Prints("错误:未定义的输出请求。\r\n");
 936   4           #endif
 937   4          break;
 938   4         }
 939   3        }
 940   2       }
 941   1       //普通数据输出
 942   1       else //if(D12ReadEndpointLastStatus(0)&0x20)之else
 943   1       {
 944   2        D12ReadEndpointBuffer(0,16,Buffer);
 945   2        D12ClearBuffer();
 946   2       }
 947   1      }
 948          ////////////////////////End of function//////////////////////////////
 949          
 950          /********************************************************************
 951          函数功能:端点0输入中断处理函数。
 952          入口参数:无。
 953          返    回:无。
 954          备    注:无。
 955          ********************************************************************/
 956          void UsbEp0In(void)
 957          {
 958   1      #ifdef DEBUG0
 959   1       Prints("USB端点0输入中断。\r\n");
 960   1      #endif
 961   1       //读最后发送状态,这将清除端点0的中断标志位
 962   1       D12ReadEndpointLastStatus(1);
 963   1       //发送剩余的字节数
 964   1       UsbEp0SendData();
 965   1      }
 966          ////////////////////////End of function//////////////////////////////
 967          
 968          /********************************************************************
 969          函数功能:端点1输出中断处理函数。
 970          入口参数:无。
 971          返    回:无。
 972          备    注:无。
 973          ********************************************************************/
 974          void UsbEp1Out(void)
 975          {
 976   1      #ifdef DEBUG0
 977   1       Prints("USB端点1输出中断。\r\n");
 978   1      #endif
 979   1      }
 980          ////////////////////////End of function//////////////////////////////
 981          
 982          /********************************************************************
 983          函数功能:端点1输入中断处理函数。
 984          入口参数:无。
 985          返    回:无。
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:43 PAGE 17  

 986          备    注:无。
 987          ********************************************************************/
 988          void UsbEp1In(void)
 989          {
 990   1      #ifdef DEBUG0
 991   1       Prints("USB端点1输入中断。\r\n");
 992   1      #endif
 993   1       //读最后发送状态,这将清除端点1输入的中断标志位
 994   1       D12ReadEndpointLastStatus(3);
 995   1       //端点1输入处于空闲状态
 996   1       Ep1InIsBusy=0;
 997   1      }
 998          ////////////////////////End of function//////////////////////////////
 999          
1000          /********************************************************************
1001          函数功能:端点2输出中断处理函数。
1002          入口参数:无。
1003          返    回:无。
1004          备    注:无。
1005          ********************************************************************/
1006          void UsbEp2Out(void)
1007          {
1008   1      #ifdef DEBUG0
1009   1       Prints("USB端点2输出中断。\r\n");
1010   1      #endif
1011   1      }
1012          ////////////////////////End of function//////////////////////////////
1013          
1014          /********************************************************************
1015          函数功能:端点2输入中断处理函数。
1016          入口参数:无。
1017          返    回:无。
1018          备    注:无。
1019          ********************************************************************/
1020          void UsbEp2In(void)
1021          {
1022   1      #ifdef DEBUG0
1023   1       Prints("USB端点2输入中断。\r\n");
1024   1      #endif
1025   1      }
1026          ////////////////////////End of function//////////////////////////////


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1233    ----
   CONSTANT SIZE    =   1000    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16    ----
   IDATA SIZE       =     16    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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