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

📄 main.lst

📁 200元买来的D12开发资料,包括上位机驱动和应用程序
💻 LST
字号:
C51 COMPILER V7.09   MAIN                                                                  03/30/2005 12:31:38 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <stdio.h>
   2          #include <string.h>
   3          
   4          #include <At89x52.h>
   5          
   6          #include "hal.h"
   7          #include "main.h"
   8          #include "d12ci.h"
   9          #include "chap9.h"
  10          #include "protodma.h"
  11          //USB标准请求函数组指针定义,不用修改
  12          code void (*StandardDeviceRequest[])(void) =
  13          {
  14                  get_status,
  15                  clear_feature,
  16                  reserved,
  17                  set_feature,
  18                  reserved,
  19                  set_address,
  20                  get_descriptor,
  21                  reserved,
  22                  get_configuration,
  23                  set_configuration,
  24                  get_interface,
  25                  set_interface,
  26                  reserved,
  27                  reserved,
  28                  reserved,
  29                  reserved
  30          };
  31          //厂商请求函数组定义,这里只是定义了一个函数,也可不加
  32          code void (*VendorDeviceRequest[])(void) =
  33          {
  34                  reserved,
  35                  reserved,
  36                  reserved,
  37                  reserved,
  38                  reserved,
  39                  reserved,
  40                  reserved,
  41                  reserved,
  42                  reserved,
  43                  reserved,
  44                  reserved,
  45                  reserved,
  46                  read_write_register,
  47                  reserved,
  48                  reserved,
  49                  reserved
  50          };
  51          //公共变量
  52          extern EPPFLAGS bEPPflags;
  53          extern unsigned long ClockTicks;
  54          
  55          extern unsigned char idata GenEpBuf[];
C51 COMPILER V7.09   MAIN                                                                  03/30/2005 12:31:38 PAGE 2   

  56          extern IO_REQUEST idata ioRequest;
  57          
  58          extern unsigned char ioSize, ioCount;
  59          extern unsigned char idata EpBuf[];
  60          //------------
  61          extern void fn_usb_isr(void);
  62          //-----------
  63          
  64          CONTROL_XFER ControlData;
  65          //初始化时钟0
  66          void init_timer0(void)
  67          {
  68   1              TMOD &= 0XF0;                /* clear Timer 0   */
  69   1              TMOD  |= 0X1;
  70   1              TL0 = 0X0;                   /* value set by user    */
  71   1              TH0 = 0X0;                   /* value set by user  */
  72   1              ET0 = 1;                     /* IE.1*/
  73   1              TR0 = 1;                     /* TCON.4 start timer  */
  74   1              PT0 = 1;
  75   1      }
  76          //初始化串口,这里可以不要
  77          void init_serial(void)
  78          {
  79   1              SCON = 0X52;            /* SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI          */
  80   1              PCON = 0X80 | PCON;     /* PCON: SMOD | - | - | - | GF1|GF0|PD |IDL|    */
  81   1              TMOD = 0X20;            /* TMOD: GATE|C/T|M1|M0|GATE|C/T|M1|M0 */
  82   1              TCON = 0x69;            /* TCON: TF1|TR1|TF0|TR0|IE1|IT1|IE0|IT0 */
  83   1              TH1 = 0xF3;             /*TH1=0xF3: */
  84   1      }
  85          //模拟断开USB设备
  86          void disconnect_USB(void)
  87          {
  88   1              // Initialize D12 configuration
  89   1              D12_SetMode(D12_NOLAZYCLOCK|D12_CLOCKRUNNING, D12_SETTOONE | D12_CLOCK_12M);
  90   1      }
  91          //模拟连接USB设备
  92          void connect_USB(void)
  93          {
  94   1              // reset event flags
  95   1              DISABLE;
  96   1              bEPPflags.value = 0;
  97   1              ENABLE;
  98   1      
  99   1              //      ENABLE_INTERRUPTS;
 100   1              D12_SetEndpointStatus(4, 0);
 101   1              D12_SetEndpointStatus(5, 0);
 102   1              // V2.1 enable normal+sof interrupt
 103   1              D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 104   1      
 105   1              // Initialize D12 configuration
 106   1              D12_SetMode(D12_NOLAZYCLOCK |D12_CLOCKRUNNING|D12_SOFTCONNECT,D12_SETTOONE | D12_CLOCK_12M );
 107   1      
 108   1      }
 109          //模拟一次断开、连接操作
 110          void reconnect_USB(void)
 111          {
 112   1              unsigned long clk_cnt;
 113   1      
 114   1              D12SUSPD = 0;
 115   1              disconnect_USB();
 116   1          
 117   1              ENABLE;
C51 COMPILER V7.09   MAIN                                                                  03/30/2005 12:31:38 PAGE 3   

 118   1              clk_cnt = ClockTicks;
 119   1              while(ClockTicks < clk_cnt + 20); //等待一段时间
 120   1              DISABLE;
 121   1      
 122   1              connect_USB();
 123   1      }
 124          //停止端点0
 125          void stall_ep0(void)
 126          {
 127   1              D12_SetEndpointStatus(0, 1);
 128   1              D12_SetEndpointStatus(1, 1);
 129   1      }
 130          //初始化配置0
 131          void init_unconfig(void)
 132          {
 133   1              D12_SetEndpointEnable(0);       /* Disable all endpoints but EPP0. */
 134   1      }
 135          //初始化配置1
 136          void init_config(void)
 137          {
 138   1              D12_SetEndpointEnable(1);       /* Enable  generic/iso endpoints. */
 139   1      }
 140          //简单传输
 141          void single_transmit(unsigned char * buf, unsigned char len)
 142          {
 143   1              if( len <= EP0_PACKET_SIZE) {
 144   2                      D12_WriteEndpoint(1, len, buf);
 145   2              }
 146   1      }
 147          //代码传输
 148          void code_transmit(unsigned char code * pRomData, unsigned short len)
 149          {
 150   1              ControlData.wCount = 0;
 151   1              if(ControlData.wLength > len)
 152   1                      ControlData.wLength = len;
 153   1      
 154   1              ControlData.pData = pRomData;
 155   1              if( ControlData.wLength >= EP0_PACKET_SIZE) {   // 如果发送代码大于包长度
 156   2                      D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
 157   2                      ControlData.wCount += EP0_PACKET_SIZE;
 158   2      
 159   2                      DISABLE;
 160   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 161   2                      ENABLE;
 162   2              }
 163   1              else {                                          //发送代码小于包长度
 164   2                      D12_WriteEndpoint(1, ControlData.wLength, pRomData);
 165   2                      ControlData.wCount += ControlData.wLength;
 166   2                      DISABLE;
 167   2                      bEPPflags.bits.control_state = USB_IDLE;
 168   2                      ENABLE;
 169   2              }
 170   1      }
 171          //控制请求
 172          void control_handler()
 173          {
 174   1              unsigned char type, req;
 175   1      
 176   1              type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK; //0x60
 177   1              req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;            //0x0F
 178   1      
 179   1              if (type == USB_STANDARD_REQUEST)
C51 COMPILER V7.09   MAIN                                                                  03/30/2005 12:31:38 PAGE 4   

 180   1                      (*StandardDeviceRequest[req])();
 181   1              else if (type == USB_VENDOR_REQUEST)
 182   1                      (*VendorDeviceRequest[req])();
 183   1              else
 184   1                      stall_ep0();
 185   1      
 186   1      }
 187          
 188          
 189          //-------------------------------------------
 190          //主程序
 191          //-------------------------------------------
 192          
 193          void main()
 194          {
 195   1              unsigned char  i;
 196   1              P0 = 0xFF;//初始化端口
 197   1              P1 = 0xFF;
 198   1              P2 = 0xFF;
 199   1              P3 = 0xFF;
 200   1              D12SUSPD = 0;//D12非挂起
 201   1              init_serial();//初始化串口
 202   1              init_timer0();//初始化时钟T0
 203   1              EA = 0;
 204   1              IE0=0;
 205   1              IT0=0;
 206   1              EX0=1;
 207   1            
 208   1              ENABLE;
 209   1              reconnect_USB();
 210   1              ENABLE;
 211   1          
 212   1              while( TRUE ){
 213   2      
 214   2                      if (bEPPflags.bits.timer){//TO 定时到
 215   3                              DISABLE;
 216   3                              bEPPflags.bits.timer = 0;
 217   3                              ENABLE;
 218   3                      }
 219   2                      if (bEPPflags.bits.bus_reset) {//发现总线复位请求
 220   3                              DISABLE;
 221   3                              bEPPflags.bits.bus_reset = 0;
 222   3                              ENABLE;
 223   3                              D12SUSPD=0; //唤醒D12
 224   3                      } 
 225   2                      if (bEPPflags.bits.suspend) {//发现总线挂起请求,将D12挂起
 226   3                              DISABLE;
 227   3                              bEPPflags.bits.suspend= 0;
 228   3                              ENABLE;
 229   3      
 230   3                              if(D12SUSPD == 1) {
 231   4                                      D12SUSPD = 0;
 232   4                                      P0 = 0xFF;
 233   4                                      P1 = 0xFF;
 234   4                                      P2 = 0xFF;
 235   4                                      P3 = 0xFF;
 236   4                                      D12_SetDMA(0xC3);
 237   4                                      D12SUSPD = 1;
 238   4                                      PCON |= 0x02;
 239   4                                      while (1);
 240   4      
 241   4                              }
C51 COMPILER V7.09   MAIN                                                                  03/30/2005 12:31:38 PAGE 5   

 242   3                      } 
 243   2                      if (bEPPflags.bits.setup_packet){ //USB控制请求(包括标准请求和厂商请求)
 244   3                              DISABLE;
 245   3                              bEPPflags.bits.setup_packet = 0;
 246   3                              ENABLE;
 247   3                              control_handler();
 248   3                              D12SUSPD=0;
 249   3                      } 
 250   2          }
 251   1      }
*** WARNING C280 IN LINE 195 OF MAIN.C: 'i': unreferenced local variable
 252          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    498    ----
   CONSTANT SIZE    =     96    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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