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

📄 d12ci.lst

📁 STC51+PDIUSBD12 USB鼠标源代码
💻 LST
字号:
C51 COMPILER V8.02   D12CI                                                                 03/04/2008 13:50:50 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE D12CI
OBJECT MODULE PLACED IN D12CI.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D12CI.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "EPPHAL.H"
   2          #define D12_COMMAND     1
   3          #define D12_DATA        0
   4          #define D12_FULLEMPTY 0x01
   5          
   6          #include "d12.h"
   7          #include "uart.h"
   8          sbit USB_A0 = 0xB5;
   9          sbit USB_WR  = 0xB6;
  10          sbit USB_RD = 0xB7;
  11          
  12          
  13          extern EPPFLAGS              bEPPflags;
  14          
  15          
  16          
  17          
  18          //使地址使能
  19          void D12_SetAddress_Enable(uint8 bAddress,uint8 bEnable)
  20          {
  21   1        outportb(D12_COMMAND,0XD0);
  22   1        if(bEnable)
  23   1          bAddress|=0x80;
  24   1        outportb(D12_DATA,bAddress);      
  25   1      }
  26          //设置端点使能                    何处使用?
  27          void D12_SetEndpointEnable(uint8 bEnable)
  28          {
  29   1        outportb(D12_COMMAND,0xd8);
  30   1        if(bEnable)
  31   1          outportb(D12_DATA,1);
  32   1        else
  33   1          outportb(D12_DATA,0);
  34   1      }
  35          //设置模式命令
  36          void D12_SetMode(uint8 bConfig,uint8 bClkDiv)
  37          {
  38   1        outportb(D12_COMMAND,0xf3);
  39   1        outportb(D12_DATA,bConfig);
  40   1        outportb(D12_DATA,bClkDiv);
  41   1      }
  42          //设置DMA
  43          void D12_SetDMA(uint8 bMode)
  44          {
  45   1        outportb(D12_COMMAND,0xfb);
  46   1        outportb(D12_DATA,bMode);
  47   1      }
  48          //读取中断寄存器
  49          uint16 D12_ReadInterruptRegister(void)
  50          {
  51   1        uint8 b1;
  52   1        uint16 j;
  53   1        outportb(D12_COMMAND,0xf4);
  54   1        b1=inportb(D12_DATA);
  55   1        j=inportb(D12_DATA);
C51 COMPILER V8.02   D12CI                                                                 03/04/2008 13:50:50 PAGE 2   

  56   1        j<<=8;
  57   1        j+=b1;
  58   1        return j;
  59   1      }
  60          //端点选择命令
  61          uint8 D12_SelectEndpoint(uint8 bEndp)
  62          {
  63   1        uint8 c;
  64   1        outportb(D12_COMMAND,bEndp);
  65   1        c=inportb(D12_DATA);
  66   1        return c;
  67   1      }
  68          //读取最后处理状态
  69          uint8 D12_ReadLastTransactionStatus(uint8 bEndp)
  70          {
  71   1        outportb(D12_COMMAND,0x40+bEndp);
  72   1        return inportb(D12_DATA);
  73   1      }
  74          //设置端点状态
  75          void D12_SetEndpointStatus(uint8 bEndp,uint8 bStalled)
  76          {
  77   1        outportb(D12_COMMAND,0x40+bEndp);
  78   1        outportb(D12_DATA,bStalled);
  79   1      }
  80          //发送恢复命令
  81          void D12_SendResume(void)
  82          {
  83   1        outportb(D12_COMMAND,0xf6);
  84   1      }
  85          //读取当前帧状态
  86          uint16 D12_ReadCurrentFrameNumber(void)
  87          {
  88   1        uint16 i,j;
  89   1        outportb(D12_COMMAND,0xf5);
  90   1        i=inportb(D12_DATA);
  91   1        j=inportb(D12_DATA);
  92   1        i+=(j<<8);
  93   1        return i;
  94   1      }
  95          //读取端点数据
  96          uint8 D12_ReadEndpoint(uint8 endp,uint8 len,uint8 *buf)
  97          {
  98   1        uint8 i,j;
  99   1        Prints("\r\nReadEndpoint\r\n");
 100   1        outportb(D12_COMMAND,endp);
 101   1        if((inportb(D12_DATA)&D12_FULLEMPTY)==0)                                        //当前端点缓存为空,返回
 102   1          return 0; 
 103   1        outportb(D12_COMMAND,0x80+endp);
 104   1        i=inportb(D12_DATA);
 105   1        i=i&0x60;
 106   1        Prints("buff==");                                                         //缓存满否
 107   1        PrintShortIntHex(i);
 108   1      
 109   1        if(endp==2)
 110   1          {
 111   2                if(i==0x60)
 112   2                  bEPPflags.bits.ep1buf_full=1;                                                   //端点1缓存满
 113   2                else
 114   2                  bEPPflags.bits.ep1buf_full=0;
 115   2              }
 116   1        if(endp==4)
 117   1          {
C51 COMPILER V8.02   D12CI                                                                 03/04/2008 13:50:50 PAGE 3   

 118   2                if(i==0x60)
 119   2                  bEPPflags.bits.ep2buf_full=1;
 120   2                else
 121   2                  bEPPflags.bits.ep2buf_full=0;
 122   2              }
 123   1        outportb(D12_COMMAND,0xf0);                        //读缓存区
 124   1        j=inportb(D12_DATA);
 125   1        j=inportb(D12_DATA);
 126   1        if(j>len)
 127   1          j=len;
 128   1        Prints("\r\nlen=");
 129   1        PrintShortIntHex(len);
 130   1        for(i=0;i<j;i++)
 131   1          PrintShortIntHex(*(buf+i)=inportb(D12_DATA));
 132   1        outportb(D12_COMMAND,0xf2);                     //清缓存
 133   1        return j;
 134   1      }
 135          //把数据写入端点
 136          uint8 D12_WriteEndpoint(uint8 endp,uint8 len,uint8 * buf)
 137          {
 138   1        uint8 i;
 139   1        outportb(D12_COMMAND,endp);
 140   1        inportb(D12_DATA);
 141   1        outportb(D12_COMMAND,0xf0);                                           //写缓存
 142   1        outportb(D12_DATA,0);
 143   1        outportb(D12_DATA,len);
 144   1        Prints("\r\n写入的数据是");
 145   1        for(i=0;i<len;i++)
 146   1          {
 147   2               outportb(D12_DATA,*(buf+i));
 148   2               PrintHex(*(buf+i));
 149   2              }
 150   1        
 151   1        outportb(D12_COMMAND,0xfa);
 152   1        outportb(D12_COMMAND,0x80+endp);
 153   1        i=inportb(D12_DATA);
 154   1        Prints("\r\n端点满否i=");
 155   1        PrintHex(i);
 156   1        return len;
 157   1      }
 158          /*void write_a_usb_data(uint8 usb_data)       
 159          {
 160           USB_A0=0;
 161           P0=usb_data;
 162           USB_WR=0;
 163           USB_WR=1;
 164           P0=0XFF;
 165          }
 166          //写端点2
 167          /*uint8 write_endpoint_buff(uint8 endp,uint8 len,uint8 * buff)
 168          {
 169           uint8 i;
 170           D12_ReadLastTransactionStatus(endp);
 171           outportb(D12_COMMAND,endp);
 172           outportb(D12_COMMAND,0xf0);
 173           write_a_usb_data(0);
 174           write_a_usb_data(len);
 175           Prints("\r\n写入数据");
 176          
 177           for(i=0;i<len;i++)
 178            {
 179             P0=*(buff+i);
C51 COMPILER V8.02   D12CI                                                                 03/04/2008 13:50:50 PAGE 4   

 180             PrintHex(*(buff+i));
 181          
 182             USB_WR=0;
 183             USB_WR=1;
 184          
 185             //PrintHex(*(buff+i));
 186          
 187            }
 188           
 189           P0=0xFF;
 190           outportb(D12_COMMAND,0xfa);
 191           outportb(D12_COMMAND,0x80+endp);
 192            i=inportb(D12_DATA);
 193            Prints("\r\n端点满否i=");
 194            PrintHex(i);
 195           return len;
 196          } */
 197          //端点应答处理
 198          void D12_AcknowledgeEndpoint(uint8 endp)
 199          {
 200   1        outportb(D12_COMMAND,endp);
 201   1        outportb(D12_COMMAND,0xf1);
 202   1        if(endp==0)
 203   1          outportb(D12_COMMAND,0xf2);                                 //清缓存
 204   1      }
 205          
 206          //读取端点状态
 207          unsigned char D12_ReadEndpointStatus(uint8 bEndp)
 208          {
 209   1              unsigned char c;
 210   1      
 211   1              if(bEPPflags.bits.in_isr == 0)
 212   1                      EA=0;
 213   1      
 214   1              outportb(D12_COMMAND, 0x80 + bEndp);//读取端点状态
 215   1              c = inportb(D12_DATA);
 216   1      
 217   1              if(bEPPflags.bits.in_isr == 0)
 218   1                      EA=1;
 219   1      
 220   1              return c;
 221   1      }
 222          
 223          
 224          
 225          
 226          
 227          
 228          
 229          
 230          
 231          
 232          
 233          
 234          
 235          
 236          
 237          
 238          
 239          
 240          
 241          
C51 COMPILER V8.02   D12CI                                                                 03/04/2008 13:50:50 PAGE 5   

 242          
 243          
 244          
 245          
 246          
 247          
 248          
 249          
 250          
 251          
 252          
 253          
 254          
 255          
 256          
 257          
 258          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    660    ----
   CONSTANT SIZE    =     59    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      24
   IDATA SIZE       =   ----    ----
   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 + -