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

📄 main.lst

📁 sl811 c8051F驱动程序 保证绝对可以使用 USB通信协议USB1.1
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  04/25/2009 23:03:20 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C LARGE OMF2 BROWSE DEBUG

line level    source

   1          
   2          #include <c8051F020.h>
   3          #include "MAIN.H"
   4          #include "host_811.H"
   5          #include <stdio.h>
   6          #include "ufi.h"
   7          #include "file.h"
   8          #include "api.h"
   9          
  10          #define Clr_WDT() WDTCN=0xa5
  11          #define SYSCLK       12000000          // SYSCLK frequency in Hz
  12          #define BAUDRATE     9600            // Baud rate of UART in bps
  13          extern Control bdata USB_Control;
  14          BYTE temp;
  15          BYTE temp1;
  16          extern  struct _FILE  ApiFileControl;
  17          extern  USBDEV idata uDev;
  18          //-----------------------------------------------------------------------------
  19          // 16-bit SFR Definitions for 'F02x
  20          //-----------------------------------------------------------------------------
  21          sfr16 DP       = 0x82;              // data pointer
  22          sfr16 TMR3RL   = 0x92;              // Timer3 reload value
  23          sfr16 TMR3     = 0x94;              // Timer3 counter
  24          sfr16 ADC0     = 0xbe;              // ADC0 data
  25          sfr16 ADC0GT   = 0xc4;              // ADC0 greater than window
  26          sfr16 ADC0LT   = 0xc6;              // ADC0 less than window
  27          sfr16 RCAP2    = 0xca;              // Timer2 capture/reload
  28          sfr16 T2       = 0xcc;              // Timer2
  29          sfr16 RCAP4    = 0xe4;              // Timer4 capture/reload
  30          sfr16 T4       = 0xf4;              // Timer4
  31          sfr16 DAC0     = 0xd2;              // DAC0 data
  32          sfr16 DAC1     = 0xd5;              // DAC1 data
  33          sfr16 T0           = 0x8a;                              // Timer0 counter
  34          sbit WR=P0^6;                                           //写信号
  35          sbit RD=P0^7;
  36          sbit nRest=P3^1;                                                //读信号
  37          //      函数声明
  38          //----------------------------------
  39          void SYSCLK_Init (void);
  40          void PORT_Init (void);
  41          void SYS_Init (void);
  42          void WDT_Init(void);
  43          void EMIF_Init (void);
  44          void Deivce_Init(void);
  45          void delay(unsigned int t);
  46          void UART0_Tnit(void);   
  47          char getchar (void);
  48          char putchar (char a);
  49          void Init_Interrupt(void);
  50          xdata    BYTE buf1[5120] _at_ 0x8000;
  51          xdata    BYTE buf2[500] _at_ 0xd400;                    
  52            void     main()
  53          {         
  54   1              
  55   1      
C51 COMPILER V8.08   MAIN                                                                  04/25/2009 23:03:20 PAGE 2   

  56   1       BYTE i;
  57   1      unsigned int temp;
  58   1      while(1);
  59   1      Deivce_Init();
  60   1      DelayMs(6);
  61   1      nRest=1;
  62   1      Init_Interrupt();
  63   1      sl811h_init();
  64   1      ENABLE_INTERRUPTS;
  65   1       for(temp=0;temp<5120;temp++)
  66   1      {buf1[temp]='A';}
  67   1      while(TRUE)
  68   1      {                     
  69   2                      if(1)
  70   2                      {
  71   3                        Clr_WDT();
  72   3      
  73   3                                 i=SL811Read(IntStatus);
  74   3                      
  75   3                              if((USB_RESET&i))       //没有接入设备;
  76   3                              {       
  77   4                                      if(USB_Control.SLAVE_ONLINE ==TRUE)
  78   4                                      {
  79   5                                              USB_Control.SLAVE_REMOVED=TRUE;
  80   5                                              USB_Control.SLAVE_ONLINE =FALSE; //显而易见;
  81   5                                              
  82   5                                      }
  83   4                              }
  84   3                              else    
  85   3                              {  
  86   4                                      if(USB_Control.SLAVE_ONLINE == FALSE&&(i|0x7F))
  87   4                                      {        
  88   5                                              USB_Control.SLAVE_FOUND=TRUE;
  89   5                                              USB_Control.SLAVE_ONLINE =TRUE; //显而易见;
  90   5                                      }
  91   4                              }
  92   3                              if(USB_Control.SLAVE_FOUND)
  93   3                              {       
  94   4                                      DISABLE_INTERRUPTS;
  95   4                                      USB_Control.SLAVE_FOUND=FALSE;
  96   4              
  97   4                                      if(EnumUsbDev(1))                                                       
  98   4                                              USB_Control.SLAVE_ENUMERATED = TRUE;
  99   4      PollDisk();
 100   4      InitFsys();     
 101   4      CreateFile("demo.txt",0x20);
 102   4      WriteFile(buf1,1000);
 103   4      CloseFile();
 104   4      OpenFile("demo.txt");
 105   4      ApiFileControl.CurrentSectorNum=ApiFileControl.StartSectorNum;
 106   4      ApiFileControl.SectorOffset=0;
 107   4      ReadFile(buf2,500);
 108   4      CreateDir("www\\demo.txt");             
 109   4               //DelFile("demo.txt");
 110   4                                      ENABLE_INTERRUPTS;
 111   4                              }               
 112   3                              if(USB_Control.bMassDevice)
 113   3                              {
 114   4                                      DISABLE_INTERRUPTS;
 115   4                                      USB_Control.bMassDevice=FALSE;
 116   4                                      ENABLE_INTERRUPTS;
 117   4                              }
C51 COMPILER V8.08   MAIN                                                                  04/25/2009 23:03:20 PAGE 3   

 118   3                      }
 119   2                
 120   2              }
 121   1      
 122   1              
 123   1               
 124   1      
 125   1      }  
 126          
 127          
 128          void delay(unsigned int t)
 129          {
 130   1              unsigned int i;
 131   1              for(i=0;i<1000;i++)
 132   1              {
 133   2                  while(t--)
 134   2                  {
 135   3                      t++;
 136   3                      t--;
 137   3              }
 138   2                  Clr_WDT();
 139   2              }
 140   1      }
 141          void SYS_Init()
 142          {
 143   1              EA =0;                                                          //关中断        
 144   1      }
 145          
 146          void Init_Interrupt(void)//
 147          {
 148   1              IT0 = 0;        //低电平触发中断;
 149   1              EX0 = 1;
 150   1      }
 151          /*
 152          ***********************************************************
 153          *程序名 WDT_Init
 154          *作用   :看门狗初始化
 155          *参数   :无
 156          *返回值 :无
 157          *作者   :李本斋
 158          *日期   : 2008.12.20
 159          *版权声明: 
 160          ***********************************************************
 161          */
 162          void WDT_Init(void)
 163          {
 164   1         WDTCN     = 0xFF;
 165   1         WDTCN      =0x06;//10ms             //b2b1b0为周期设置位
 166   1      }
 167          /*
 168          ***********************************************************
 169          *程序名 SYSCLK_Init
 170          *作用   :时钟初始化
 171          *参数   :无
 172          *返回值 :无
 173          *作者   :李本斋
 174          *日期   : 2008.12.20
 175          *版权声明: 
 176          ***********************************************************
 177          */
 178          void SYSCLK_Init (void)
 179          {
C51 COMPILER V8.08   MAIN                                                                  04/25/2009 23:03:20 PAGE 4   

 180   1         int i;                           // delay counter// start external oscillator with
 181   1         OSCXCN = 0x67;                   // 22.1184MHz crystal
 182   1         for (i=0; i < 256; i++) ;        // Wait for osc. to start up
 183   1         while (!(OSCXCN & 0x80)) ;       // Wait for crystal osc. to settle
 184   1         OSCICN = 0x88;                   // select external oscillator as SYSCLK
 185   1                                          // source and enable missing clock  // detector
 186   1      }
 187          // Configure the Crossbar and GPIO ports
 188          /*
 189          ***********************************************************
 190          *程序名 PORT_Init
 191          *作用   :端口初始化
 192          *参数   :无
 193          *返回值 :无
 194          *作者   :李本斋
 195          *日期   : 2008.12.20
 196          *版权声明: 
 197          ***********************************************************
 198          */
 199          void PORT_Init (void)
 200          {
 201   1        XBR0      = 0x05;
 202   1        XBR1     = 0x00;
 203   1        XBR2      = 0x40;
 204   1                        // Enable crossbar and weak pull-ups
 205   1                       
 206   1         P3MDOUT   = 0xFF;
 207   1         P2MDOUT   = 0xFF;
 208   1         P1MDOUT       = 0xFF;
 209   1         P0MDOUT   = 0xFF;
 210   1         P74OUT        = 0xFF;
 211   1      }
 212          
 213          //-----------------------------------------------------------------------------
 214          // EMIF_Init
 215          //-----------------------------------------------------------------------------
 216          //
 217          // Configure the external memory interface to use upper port pins in 
 218          // non-multiplexed mode to a mixed on-chip/off-chip configuration without 
 219          // Bank Select.
 220          //
 221          void EMIF_Init (void)
 222          {
 223   1         EMI0TC = 0x20;// upper ports; non-muxed mode;   // fastest timing (4-cycle MOVX)  // split mode w/o ban
             -k select
 224   1         EMI0CF = 0x38;    
 225   1       //    EMI0CF = 0x2f;                    
 226   1      }
 227          
 228          void Deivce_Init(void)
 229          {                       
 230   1          SYSCLK_Init();                                                      //系统时钟配置 
 231   1              WDT_Init();                                                             //看门狗初始化
 232   1              EMIF_Init();                                                    //外部存储器访问初始化
 233   1              PORT_Init();                                                    //端口配置      
 234   1              SYS_Init();
 235   1              UART0_Tnit();                                                                   //系统数据初始化
 236   1      }
 237          void UART0_Tnit(void)
 238          {
 239   1              SCON0  = 0x50;                      // SCON0: mode 1, 8-bit UART, enable RX
 240   1              TMOD   = 0x21;                      // TMOD: timer 1, mode 2, 8-bit reload
C51 COMPILER V8.08   MAIN                                                                  04/25/2009 23:03:20 PAGE 5   

 241   1              TH1    = -(SYSCLK/BAUDRATE/16);     // set Timer1 reload value for baudrate9600
 242   1              TR1    = 1;                         // start Timer1
 243   1              CKCON |= 0x10;                      // Timer1 uses SYSCLK as time base
 244   1              PCON  |= 0x80;                      // SMOD00 = 1
 245   1              ES0    = 0;                         // disable UART0 interrupts
 246   1      
 247   1              TI0    = 0;                         // Indicate TX0 ready
 248   1      }  
 249             
 250          char getchar (void)
 251          {
 252   1          char a;
 253   1              while(!RI0)
 254   1          Clr_WDT();
 255   1              RI0 =0;
 256   1              a = SBUF0; 
 257   1              return a;
 258   1      }
 259          
 260          char putchar (char a)
 261          {
 262   1          SBUF0 = a;
 263   1              while(!TI0);
 264   1              Clr_WDT();
 265   1              TI0 =0;
 266   1              return 0;
 267   1      }
 268           void ISR_INT0(void) interrupt 0
 269          {
 270   1              DISABLE_INTERRUPTS;
 271   1              SL811Write(IntStatus,INT_CLEAR);
 272   1      //      UsbEvent=TRUE;
 273   1              ENABLE_INTERRUPTS;
 274   1      }
 275          
 276           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    253    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =      2       2
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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