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

📄 chap_9.lst

📁 C51单片机得开发源码2其中有些非常经典得程序.jjzhang166@163.com
💻 LST
📖 第 1 页 / 共 5 页
字号:
 768   1      }       
 769          
 770          //Set_Address设置地址
 771          void set_address(void)
 772          {
 773   1              USB_Int_Flag.BITS.EP0RX = 0;
 774   1              D14_Cntrl_Reg.D14_ADDRESS.BITS.DEVADDR = (USB_Device_Request.wValue >> 8);//设置地址
 775   1              //状态响应
 776   1              ep0in_ack();
 777   1      }
 778          
 779          //Set_Config设置配置
 780          void set_config(void)
 781          {
 782   1              USB_Int_Flag.BITS.EP0RX = 0;
 783   1              
 784   1              if(USB_Device_Request.wValue == 0)
 785   1              {
 786   2                      Device_Config_Value = 0;
 787   2                      ep0in_ack();
 788   2              }
 789   1              else if (USB_Device_Request.wValue ==  0x0100)
 790   1          {
 791   2                      //配置设备
 792   2                      Device_Config_Value = (UC) (USB_Device_Request.wValue >> 8);
 793   2      //              USB_Device.BITS.State = USB_Configured;
 794   2                      ep0in_ack();
 795   2              }
 796   1              else
 797   1              {
 798   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 799   2                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
C51 COMPILER V7.06   CHAP_9                                                                07/02/2003 10:05:13 PAGE 14  

 800   2                      while(!USB_Int_Flag.BITS.EP0SETUP)
 801   2                      {
 802   3                              //读取ISP1581中断寄存器
 803   3                              USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
 804   3                              //回写ISP1581中断寄存器
 805   3                              D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
 806   3                              if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
 807   3                                      return;
 808   3                      }
 809   2                      USB_Int_Flag.BITS.EP0TX = 0;
 810   2              }
 811   1      }
 812          
 813          
 814          //Get_Config获取配置
 815          void get_config(void)
 816          {
 817   1              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 818   1              D14_Cntrl_Reg.D14_DATA_PORT_LSB = Device_Config_Value;
 819   1              D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1;
 820   1              wait_ep0tx();
 821   1              ep0out_ack();
 822   1      }       
 823          
 824          //Clear_Feature特性清除
 825          void clear_feature(void)
 826          {
 827   1              unsigned char bRecipient = USB_Device_Request.bmRequestType & 0x0f;
 828   1              //端点
 829   1              if(bRecipient == 0x02 &&USB_Device_Request.wValue == 0x0000)
 830   1              {
 831   2                      switch(USB_Device_Request.wIndex)
 832   2                      {
 833   3                      case  0x8000   :
 834   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 835   3                              break;
 836   3                      case  0x0000   :
 837   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
 838   3                              break;
 839   3                      case  0x8100   :
 840   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
 841   3                              break;
 842   3                      case  0x0100   :
 843   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
 844   3                              break;
 845   3                      case  0x8200   :
 846   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
 847   3                              break;
 848   3                      case  0x0200   :
 849   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
 850   3                              break;
 851   3                      case  0x8300   :
 852   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
 853   3                              break;
 854   3                      case  0x0300   :
 855   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
 856   3                              break;
 857   3                      case  0x8400   :
 858   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
 859   3                              break;
 860   3                      case  0x0400   :
 861   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 8;
C51 COMPILER V7.06   CHAP_9                                                                07/02/2003 10:05:13 PAGE 15  

 862   3                              break;
 863   3                      case  0x8500   :
 864   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 11;
 865   3                              break;
 866   3                      case  0x0500   :
 867   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 10;
 868   3                              break;
 869   3                      case  0x8600   :
 870   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 13;
 871   3                              break;
 872   3                      case  0x0600   :
 873   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 12;
 874   3                              break;
 875   3                      case  0x8700   :
 876   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 15;
 877   3                              break;
 878   3                      case  0x0700   :
 879   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 14;
 880   3                              break;
 881   3                      default        :  
 882   3                              break;
 883   3                      }                                                                                                      
 884   2                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
 885   2                      Kernel_Flag.BITS.Endpt_Stall = 0;
 886   2                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF;                 //disable FIFO
 887   2                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON;                  //disable FIFO
 888   2                      ep0in_ack();
 889   2                      USB_Device.BITS.Halt = 0;
 890   2              }                                                                                       
 891   1              else if(bRecipient == 0x00 && USB_Device_Request.wValue == 0x0100)
 892   1              {       //远程唤醒
 893   2                      USB_Device.BITS.Remote_Wakeup = 0;
 894   2                      ep0in_ack();
 895   2              }
 896   1              else
 897   1              {
 898   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 899   2                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
 900   2                      while(!USB_Int_Flag.BITS.EP0SETUP)
 901   2                      {
 902   3                              //读取ISP1581中断寄存器
 903   3                              USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
 904   3                              //回写ISP1581中断寄存器
 905   3                              D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
 906   3                              if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
 907   3                                      return;
 908   3                      }
 909   2                      USB_Int_Flag.BITS.EP0TX = 0;
 910   2              }
 911   1      }       
 912          
 913          //Get_Status获取设备状态
 914          void get_status(void)
 915          {
 916   1              if(USB_Device_Request.bmRequestType == 0x80)
 917   1              {
 918   2                      //端点0IN返回0x01,0x00两字节
 919   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 920   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
 921   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 922   2                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = 1;
 923   2                      D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
C51 COMPILER V7.06   CHAP_9                                                                07/02/2003 10:05:13 PAGE 16  

 924   2                      //等待发送完毕
 925   2                      wait_ep0tx();
 926   2                      ep0out_ack();
 927   2              }
 928   1      
 929   1              if(USB_Device_Request.bmRequestType == 0x81)
 930   1              {
 931   2                      //端点0IN返回0x00,0x00两字节
 932   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 933   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
 934   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 935   2                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = 0;
 936   2                      D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
 937   2                      wait_ep0tx();
 938   2                      ep0out_ack();
 939   2              }
 940   1      
 941   1              if(USB_Device_Request.bmRequestType == 0x82)
 942   1              {
 943   2                      Temp = 0;
 944   2                      Temp = USB_Device.BITS.Halt;
 945   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 946   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
 947   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 948   2                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = (UC) Temp;
 949   2                      D14_Cntrl_Reg.D14_DATA_PORT_MSB = (UC) (Temp >> 8);
 950   2                      wait_ep0tx();
 951   2                      ep0out_ack();
 952   2              }
 953   1      }       
 954          
 955          
 956          
 957          //Set_Feature特性设置
 958          //不支持测试模式
 959          void set_feature(void)
 960          {
 961   1              unsigned char bRecipient = USB_Device_Request.bmR

⌨️ 快捷键说明

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