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

📄 main.lst

📁 USB固件程序
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  03/30/2009 10:32:15 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <c8051f020.h>
   2          
   3          #include "CH375INC.H"
   4          #ifdef __CX51__
              #ifndef __C51__
              #define __C51__         1
              #endif
              #endif
   9          
  10          typedef unsigned char                UINT8;
  11          typedef unsigned short               UINT16;
  12          typedef unsigned long                UINT32;
  13          #ifdef __C51__
  14          typedef unsigned char  idata        *PUINT8;
  15          #else
              typedef unsigned char               *PUINT8;
              #endif
  18          #ifdef __C51__
  19          typedef unsigned char  xdata        *PUINT8X;
  20          #else
              typedef unsigned char               *PUINT8X;
              #endif
  23          #ifdef __C51__
  24          typedef unsigned char  code         *PUINT8C;
  25          #else
              typedef unsigned char               *PUINT8C;
              #endif
  28          #ifdef __C51__
  29          #pragma NOAREGS
  30          #endif
  31          
  32          
  33          #ifndef MAX_DATA_SIZE
  34          #define MAX_DATA_SIZE           32                      /* 单次命令处理的最大数据长度,有效值是1到56 */
  35          #endif
  36          
  37          typedef struct  _USB_DOWN_PACKET {              /* 下传的数据包结构,用于命令/写数据 */
  38                  UINT8   mCommand;                                       /* 命令码,见下面的定义 */
  39                  UINT8   mStatus;                            
  40                  UINT16  mAddress;
  41                  UINT8   mLength;                                        /* 下面的缓冲区的长度,读写操作的字节数 */
  42                  UINT8   mBuffer[ MAX_DATA_SIZE ];       /* 数据缓冲区 */
  43          }       USB_DOWN_PKT;
  44          
  45          typedef struct  _USB_UP_PACKET {                /* 上传的数据包结构,用于状态/读数据 */
  46                  UINT8   mStatus;                                        /* 状态码,见下面的定义 */
  47                  //UINT8 mCommandNot;                            /* 命令码的反码,用于校验上传数据包 */
  48                  UINT8   mReserved[2];
  49                  UINT8   mLength;                                        /* 下面的缓冲区的长度,读操作的字节数 */
  50                  UINT8   mBuffer[ MAX_DATA_SIZE ];       /* 数据缓冲区 */
  51          }       USB_UP_PKT;
  52          
  53          typedef union   _USB_DATA_PACKET {              /* USB上传或者下传数据缓冲区 */
  54                  USB_DOWN_PKT    down;
  55                  USB_UP_PKT              up;
C51 COMPILER V7.06   MAIN                                                                  03/30/2009 10:32:15 PAGE 2   

  56          }       USB_DATA_PKT;
  57          /**延时MS**/
  58          void Delay_ms(unsigned char m)
  59          {
  60   1      unsigned char a;
  61   1      unsigned int b;
  62   1      for(a=m;a!=0;a--)
  63   1      for(b=595;b!=0;b--);    
  64   1      }
  65          void Delay1us()
  66          {
  67   1       UINT8 i;
  68   1       for(i=0;i!=0;i--);
  69   1      }
  70          void Delay2us()
  71          {
  72   1       UINT8 i;
  73   1       for(i=1;i!=0;i--);
  74   1      }
  75          void IO_Init() 
  76          {
  77   1      EA=0;
  78   1      WDTCN=0xde;
  79   1      WDTCN=0xad;
  80   1      EA=1;
  81   1      EA=0;
  82   1      XBR0=0x05;
  83   1      XBR1=0X14;
  84   1      XBR2=0x04;
  85   1      P2MDOUT|=0x21;
  86   1      //P4MDOUT|=0xff;
  87   1      P74OUT|=0xff;
  88   1      XBR2|=0x40;
  89   1      }
  90          void Init_CLK()
  91          {
  92   1      unsigned short i;
  93   1      OSCXCN=0x66;
  94   1      for(i=0;i<256;i++);
  95   1      while(!(OSCXCN&0x80));
  96   1      OSCICN=0x08;
  97   1      }
  98          /* 与CH372/CH375有关的基本I/O操作 */
  99          
 100          void CH375_WR_CMD_PORT( UINT8 cmd ) {  /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */
 101   1              P7=cmd;
 102   1              P4&=0xf7;//置低片选    
 103   1              P4|=0x04;   //A0置高
 104   1              Delay2us();
 105   1              P4&=0x7f;               //WR=0
 106   1          Delay2us();
 107   1          P4|=0x80;           //WR=1
 108   1          Delay2us(); 
 109   1      }
 110          
 111          void CH375_WR_DAT_PORT( UINT8 dat ) {  /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 *
             -/
 112   1              P7=dat;
 113   1              P4&=0xf7;//置低片选
 114   1              P4&=0xfb;   //A0置低
 115   1              Delay1us(); 
 116   1          P4&=0x7f;           //WR=0
C51 COMPILER V7.06   MAIN                                                                  03/30/2009 10:32:15 PAGE 3   

 117   1          Delay1us();
 118   1          P4|=0x80;           //WR=1
 119   1          Delay1us();
 120   1      }
 121          UINT8 CH375_RD_DAT_PORT( void ) {  /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */
 122   1              UINT8 state;
 123   1              P7=0xff;
 124   1              P4&=0xf7;//置低片选
 125   1          Delay1us(); 
 126   1              P4&=0xfb;   //A0置低
 127   1          Delay1us();
 128   1              P4&=0xbf;               //WR=1,RD=0
 129   1              Delay1us();
 130   1              state=P7;
 131   1              P4|=0x40;               //WR=1,RD=1     
 132   1              Delay1us();     
 133   1              return state;
 134   1      }
 135          /* CH375初始化子程序 */
 136          void    CH375_Init( void ) {
 137   1              UINT8 i;
 138   1      
 139   1      
 140   1      /* 设置USB工作模式, 必要操作 */
 141   1              CH375_WR_CMD_PORT( CMD_SET_USB_MODE );
 142   1              CH375_WR_DAT_PORT( 2 );  /* 设置为使用内置固件的USB设备方式 */
 143   1              for ( i=100; i!=0; i-- ) if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break;  /* 等待操作成功,通常需要

⌨️ 快捷键说明

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