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

📄 ch375_slaver.lst

📁 使用ch375和stc 51写的usb鼠标的代码
💻 LST
字号:
C51 COMPILER V7.06   CH375_SLAVER                                                          03/31/2006 12:09:34 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE CH375_SLAVER
OBJECT MODULE PLACED IN .\HEX\ch375_slaver.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ch375_slaver.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\HEX\ch375_slaver.obj)

stmt level    source

   1          //CH375的slaver的程序 
   2          /***************************************
   3          **  USB 1.1 Slaver for CH375      **
   4          ****************************************/
   5          #ifndef __MAIN_C__
   6          #define __MAIN_C__
   7          #endif
   8          
   9          #include "head.h"
  10          #include "ch375inc.h"
  11          #include "usbDef.h"
  12          #include "uart.h"
  13          #include "descriptor.h"
  14          #include "mcuFun.h"
  15          #include "ch375.h"
  16          
  17          #define DELAY_START_value 1             /* 根据单片机的时钟选择延时初值 */
  18          
  19          
  20          #define DBG_MSK_0               (1<<0)
  21          #define DBG_MSK_1               (1<<1)
  22          #define DBG_MSK_2               (1<<2)
  23          #define DBG_MSK_3               (1<<3)
  24          uint8 eaCount, debug=0xff;
  25          uint16 tCount;
  26          unsigned char RECV_LEN;                 /* 刚接收到的数据的长度 */
  27          unsigned char idata RECV_BUFFER[ CH375_MAX_DATA_LEN ];  /* 数据缓冲区,用于保存接收到的下传数据,长度为0到64
             -字节 */
  28          unsigned char idata *cmd_buf;
  29          unsigned char idata *ret_buf;
  30          
  31          typedef union _REQUEST_PACK
  32          {
  33                  unsigned char  buffer[8];
  34                  struct
  35                  {
  36                          unsigned char  bmReuestType;            //标准请求字
  37                          unsigned char  bRequest;                        //请求代码
  38                          unsigned int     wvalue;                                        //特性选择高
  39                          unsigned int     wIndx;                                         //索引
  40                          unsigned int     wLength;                               //数据长度
  41                  }r;
  42          } mREQUEST_PACKET, *mpREQUEST_PACKET;
  43          
  44          
  45          
  46          unsigned char mVarSetupRequest;                 // USB请求码
  47          unsigned char mVarSetupLength;                  // 后续数据长度
  48          unsigned char code * VarSetupDescr; // 描述符偏移地址
  49          
  50          unsigned char VarUsbAddress ;                   //USB设备地址
  51          bit CH375FLAGERR;                                                                       //错误清0
  52          bit CH375CONFLAG;                                                                       //配置标志
  53          
  54          mREQUEST_PACKET  request;
C51 COMPILER V7.06   CH375_SLAVER                                                          03/31/2006 12:09:34 PAGE 2   

  55          
  56          //我的连接
  57          //CH375                 51
  58          //D0-7                  P0.0-7
  59          //A0                            P2.6
  60          //RD                            RD
  61          //WR                            WR
  62          //CS                            P2.7
  63          //INT                           INT0
  64          //故
  65          //0x7fff                命令端口, A0=1
  66          //0x3fff                数据端口, A0=0
  67          
  68          sbit led = P1^0; 
  69          sbit CH375_INT_WIRE = P3^2; // CH375中断请求输出,低电平有效
  70          
  71          void delay50ms(void);
  72          void delay1s(void);
  73          void flash_led(void);
  74          
  75          
  76          
  77          void delay50ms(void)
  78          {
  79   1      unsigned char i, j;
  80   1      for( i=200; i!=0; i-- )
  81   1      for( j=250; j!=0; j-- );
  82   1      }
  83          
  84          void delay1s(void)
  85          {
  86   1      unsigned char i,j,k;
  87   1      
  88   1      for( i=10; i!=0; i-- )
  89   1      for( j=200; j!=0; j-- )
  90   1      for( k=250; k!=0; k-- );
  91   1      }
  92          //-----------------------------
  93          //led以2s的频率闪烁10s
  94          //-----------------------------
  95          void flash_led(void)
  96          {
  97   1              unsigned char i;
  98   1              
  99   1              for( i=10;i>0;i-- )
 100   1              {
 101   2                      led=!led;
 102   2                      delay1s();
 103   2              }
 104   1      }
 105          
 106          
 107          
 108          //串行数据接收程序
 109          void receive(void)
 110          {
 111   1              unsigned int count;
 112   1              unsigned char buf;
 113   1      
 114   1              RECV_LEN=0;
 115   1              cmd_buf = RECV_BUFFER;  // 接收缓冲区 
 116   1              while( 1 )
C51 COMPILER V7.06   CH375_SLAVER                                                          03/31/2006 12:09:34 PAGE 3   

 117   1              {
 118   2                      RI=0;
 119   2                      *cmd_buf = SBUF;
 120   2                      cmd_buf++;
 121   2                      RECV_LEN++;
 122   2                      if( RECV_LEN == 64 )
 123   2                      {
 124   3                              while( 1 )
 125   3                              {
 126   4                                      count=10000;
 127   4                                      while( RI==0 )
 128   4                                      {
 129   5                                              count--;
 130   5                                              if( count==0 )
 131   5                                                      return;
 132   5                                      }
 133   4                                      RI=0;
 134   4                                      buf=SBUF;
 135   4                              }
 136   3                      }
 137   2                      count=10000;
 138   2                      while( RI==0 )
 139   2                      {
 140   3                              count--;
 141   3                              if( count==0 )
 142   3                                      return;
 143   3                      }
 144   2              }
 145   1      }
 146          
 147          void main(void)
 148          {
 149   1              unsigned char length, cc;
 150   1              tOut t;
 151   1              eaCount=0;                              //中断总是关闭的
 152   1              led = 0;
 153   1              ComInit();
 154   1              
 155   1              uartPutStr(__DATE__);
 156   1              uartPutStr("\n\r");
 157   1              uartPutStr(__TIME__);
 158   1              uartPutStr("\n\r");
 159   1      //      delay1s();                              // 延时等待CH375初始化完成,如果单片机由CH375提供复位信号则不必延时 
 160   1      //      delay1s(); 
 161   1              CH375_Init( );                  // 初始化CH375 
 162   1              uartPrint("ch375 inited!\n\r", NULL, 0);
 163   1              uartPutStr(">>>>>>>>>>>>>>>>>\n\r");
 164   1              uartPrint("usb rec: %\n\r", &cc, 1);
 165   1              while ( 1 )
 166   1              {
 167   2                      if(w(&t, 100))
 168   2                      {
 169   3                                      reset(&t);
 170   3                                      led=!led;
 171   3                      }               
 172   2                      if( RI==1 )             // 从串口接收到的数据 
 173   2                      {
 174   3                              //led=1;
 175   3                              receive();
 176   3                              //led=0;
 177   3                              uartPrint("uart rec!\n\r", NULL, 0);
 178   3                              // 将从串口接收到的数据发送到USB设备 
C51 COMPILER V7.06   CH375_SLAVER                                                          03/31/2006 12:09:34 PAGE 4   

 179   3                              ret_buf = RECV_BUFFER;  // 接收缓冲区 
 180   3                              length = RECV_LEN;              // 刚接收到的数据长度 
 181   3                              if( length!=0 )
 182   3                              {
 183   4                                      CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 );  // 向USB端点2的发送缓冲区写入数据块 
 184   4                                      CH375_WR_DAT_PORT( length );                                    // 首先写入后续数据长度 
 185   4                                      while( length-- )
 186   4                                      {
 187   5                                              CH375_WR_DAT_PORT( *ret_buf );                          // 数据 
 188   5                                              ret_buf++;
 189   5                                      }
 190   4                              }
 191   3                      }
 192   2              
 193   2                      CH375_INT_WIRE=1;
 194   2                      if( CH375_INT_WIRE==0 ) // 从USB设备接收到数据 
 195   2                      {
 196   3                              cc++;
 197   3                              uartPrint("usb rec: %\n\r", &cc, 1);
 198   3                              mCh375Interrupt();
 199   3                              
 200   3                              // 将从USB设备接收到的数据发送到串口 
 201   3                              ret_buf = RECV_BUFFER;  // 接收缓冲区 
 202   3                              length = RECV_LEN;              // 刚接收到的数据长度 
 203   3                              while( length-- )
 204   3                              {
 205   4                                      SendChar( *ret_buf );
 206   4                                      ret_buf++;
 207   4                              }
 208   3                      }
 209   2              }
 210   1      }
 211           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    342    ----
   CONSTANT SIZE    =    246    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20       6
   IDATA SIZE       =     64    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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