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

📄 mainusb.lst

📁 usb代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAINUSB                                                               03/02/2006 11:53:59 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAINUSB
OBJECT MODULE PLACED IN MainUSB.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE MainUSB.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg52.h>
   2          #include<Absacc.h>
   3          #include <intrins.h>
   4          //#include <stdio.h>
   5          //#include <string.h>
   6          
   7          #define ENABLE  EA=1
   8          #define DISABLE EA=0
   9          #define Cmdaddr 0x1000
  10          #define Dataddr 0x0000
  11          #define Setup_flag      0x01
  12          #define Trans_flag      0x02
  13          #define Uchar unsigned char
  14          #define Uint unsigned int
  15          #define SWAP(x)   ((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF))
  16          
  17          #define EP0_OUT         0x01
  18          #define EP0_IN          0x02
  19          #define EP1_OUT         0x04
  20          #define EP1_IN          0x08
  21          #define EP2_OUT         0x10
  22          #define EP2_IN          0x20
  23          #define BUS_RESET       0x40
  24          #define SUSPCH          0x80
  25          
  26          /******************************      Declare      *************************************/
  27          
  28          void InitSys();
  29          void Delay(int);
  30          void Disconnect();
  31          void Connect();
  32          void InitSerial();
  33          void InitINT0();
  34          void Readintregister(char *ir1,char *ir2);
  35          
  36          void Ep0out();
  37          void Ep0in();
  38          void Ep1out();
  39          void Ep1in();
  40          void Ep2out();
  41          void Ep2in();
  42          void Busreset();
  43          void Suspch();
  44          
  45          void Dosetup();
  46          void Readep(char,char);
  47          void Writeep(char n, char len, char *p);
  48          void Answerep(char);
  49          void Prints(char *p);
  50          void Printn(Uchar);
  51          
  52          void Ep1trans(Uchar *p);
  53          
  54          sbit CSUSB=P1^7;
  55          sbit SUSP=P1^0;
C51 COMPILER V7.06   MAINUSB                                                               03/02/2006 11:53:59 PAGE 2   

  56          sbit TestL=P1^4;
  57          
  58          //Uchar Flagint;                                                //中断标志,便于主程序区分中断类型
  59          Uchar Flag;                                             //系统的操作标志
  60          Uchar Ep1leftsize=0;
  61          Uchar *TestP;
  62          Uchar *transp,translen;                                 //发送长数据时用的临时变量
  63          
  64          struct DEVICE_REQUEST                                   //记录设备请求的结构体缓冲区
  65          {
  66                  Uchar bmrequesttype;
  67                  Uchar brequest;
  68                  Uint wvalue;
  69                  Uint windex;
  70                  Uint wlength;
  71          }Device_request;
  72          
  73          struct DEVICE_DESCRIPTOR                                //固件_设备描述表的结构体
  74          {
  75                  Uchar blength;
  76                  Uchar bdecriptortype;
  77                  Uint  bcdusb;
  78                  Uchar bdeviceclass;
  79                  Uchar bdevicesubclass;
  80                  Uchar bdeviceportocol;
  81                  Uchar bmaxpacketsize0;
  82                  Uint  idvendor;
  83                  Uint  idproduct;
  84                  Uint  bcddevice;
  85                  Uchar imanufacturer;
  86                  Uchar iproduct;
  87                  Uchar iserialnumber;
  88                  Uchar bnumconfigurations;
  89          };
  90          
  91          code struct DESCRIPTORS                                 //固件_各类描述表(存储于ROM中)
  92          {
  93                  struct DEVICE_DESCRIPTOR Device_descriptor;
  94          }Descriptors=
  95          {
  96                  0x12,
  97                  0x01,
  98                  SWAP(0x0110),
  99                  0xFF,
 100                  0xFF,
 101                  0,
 102                  16,
 103                  SWAP(0x0471),
 104                  SWAP(0x0666),
 105                  SWAP(0x0100),
 106                  0,
 107                  0,
 108                  0,
 109                  1
 110          };
 111          
 112          
 113          
 114          /******************************      Main()      *************************************/
 115          
 116          main()
 117          {
C51 COMPILER V7.06   MAINUSB                                                               03/02/2006 11:53:59 PAGE 3   

 118   1              Uchar i;
 119   1              
 120   1              i=0;
 121   1              
 122   1              InitSys();
 123   1              
 124   1              Prints("\nOK!    Let's begin:---> \n");
 125   1              Prints("step_1\n");
 126   1              
 127   1              while(1)
 128   1              {
 129   2                      Delay(100);
 130   2                      Prints("step_");
 131   2                      Printn(i ++);
 132   2                      Prints("\n");
 133   2                      
 134   2                      if(Flag&Setup_flag)                             //如果有Setup包进入
 135   2                      {
 136   3                              DISABLE;
 137   3                              Flag^=Setup_flag;                       //setup标志清除
 138   3                              ENABLE;
 139   3                              
 140   3                              Dosetup();                              //响应setup包
 141   3                      }
 142   2                      
 143   2              }
 144   1      }
 145          
 146          /******************************      Function      *************************************/
 147          
 148          void Prints(char *p)
 149          {
 150   1              
 151   1              while(*p!='\0')
 152   1              {
 153   2                      if(*p == '\n')
 154   2                      {
 155   3                              SBUF = '\r';
 156   3                      }
 157   2                      Delay(7);
 158   2                      SBUF=*p++;
 159   2                      Delay(7);
 160   2              }
 161   1      }
 162          
 163          void Printn(Uchar n)
 164          {
 165   1              Uchar m;
 166   1              m=n/0x10;                                               //高位
 167   1              if(m<0x0A) SBUF=0x30+m;
 168   1              else SBUF=0x41+m-0x0A;
 169   1              Delay(7);
 170   1              
 171   1              m=n%0x10;                                               //低位
 172   1              if(m<0x0A) SBUF=0x30+m;
 173   1              else SBUF=0x41+m-0x0A;
 174   1              Delay(3);
 175   1              
 176   1      }
 177          
 178          void InitSys(void)
 179          {
C51 COMPILER V7.06   MAINUSB                                                               03/02/2006 11:53:59 PAGE 4   

 180   1              /*
 181   1              CSUSB=0;                                        //片选D12
 182   1              SUSP=0;                                         //取消挂起,唤醒D12
 183   1              TestL=1;
 184   1              */
 185   1              P0 = 0xFF;
 186   1              P1 = 0xFF;
 187   1              P2 = 0xFF;
 188   1              P3 = 0xFF;
 189   1              CSUSB = 0x0;
 190   1              SUSP = 0;
 191   1              CSUSB=1;
 192   1              CSUSB=0;
 193   1              
 194   1              InitSerial();
 195   1              InitINT0();
 196   1              
 197   1              
 198   1              
 199   1              SUSP = 0;
 200   1              Disconnect();
 201   1              Delay(500);
 202   1              Connect();
 203   1              
 204   1              ENABLE;                                         //使能中断
 205   1      }
 206          
 207          void InitSerial()
 208          {
 209   1              IE=IE|0x90;                                     //初始化串口
 210   1              SCON=0x50;
 211   1              TMOD=TMOD|0x20;                                 //Timer1工作在方式2下
 212   1              TH1=0xFD;                                       // 波特率 9600
 213   1              TL1=0xFD;
 214   1              TR1=1;
 215   1              TI=0;
 216   1              RI=0;
 217   1      }
 218          
 219          void InitINT0()
 220          {
 221   1              IE|=0x81;
 222   1              IT0=0;                                          //外部中断设置为电平触发
 223   1      }
 224          
 225          
 226          
 227          void Readintregister(char *ir1,char *ir2)
 228          {
 229   1              XBYTE[Cmdaddr]=0xF4;
 230   1              *ir1=XBYTE[Dataddr];
 231   1              *ir2=XBYTE[Dataddr];
 232   1              
 233   1              return ;
 234   1      }
 235          
 236          void Dosetup()
 237          {
 238   1              Uchar type,req;
 239   1              Uchar i;
 240   1              
 241   1              type=Device_request.bmrequesttype;
C51 COMPILER V7.06   MAINUSB                                                               03/02/2006 11:53:59 PAGE 5   

 242   1              req=Device_request.brequest;
 243   1              
 244   1              Printn(req);
 245   1              if(req==6)                                      //如果设备请求为Get_Descriptor
 246   1              {
 247   2                      //Prints("gd\t");
 248   2                      if(Device_request.wvalue==1)                    //如果要求获取的是设备描述符
 249   2                      {
 250   3                              transp=&Descriptors.Device_descriptor;  //*transp指向设备描述符开头
*** WARNING C182 IN LINE 250 OF MAINUSB.C: pointer to different objects
 251   3                              //Flag|=Trans_flag;                     //传输标志置1,表示当前处于传输状态
 252   3                              //translen=sizeof(struct DEVICE_DESCRIPTOR);
 253   3                              //Printn(translen);
 254   3                              Writeep(1,16,transp);
 255   3                              //transp+=16;
 256   3                              //translen-=16;
 257   3                              translen=0;
 258   3                      }
 259   2              }
 260   1              else if(req==5)                                 //如果设备请求为Set_address

⌨️ 快捷键说明

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