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

📄 main.lst

📁 单片机和D12通讯的C程序.实现了单片机通过USB口和电脑通讯.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.01  MAIN                                                                   02/17/2006 15:09:23 PAGE 1   


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

stmt level    source

   1          
   2          
   3          #include "InsUsb.h"
   4          #include <intrins.h>
   5          
   6          #define _Debug_
   7          //global structure variable
   8          SYS_INFORMATION data sSysInformation;
   9          //global array variable
  10          unsigned char xdata mEp0OutBuffer[EP0_OUT_BUFFER_SIZE];
  11          unsigned char data  mEp0InBuffer[EP0_IN_BUFFER_SIZE];
  12          unsigned char data  mEp1OutBuffer[EP1_OUT_BUFFER_SIZE];                 //store led status
  13          unsigned char data  mEp1InBuffer[EP1_IN_BUFFER_SIZE];                   //store switch status
  14          unsigned char xdata mRamBuffer[RAM_BUFFER_SIZE];
  15          unsigned char xdata  mSerialNumber[4];
  16          
  17          
  18          void UsbBusReset(void);
  19          extern void D12SetMode(unsigned char bConfiguration, unsigned char bClockkDivision);
  20          extern void D12SetAddressEnable(unsigned char bAddress, unsigned char bEnable);
  21          extern void D12SetEndpointStatus(unsigned char bEndpointIndex, unsigned char bStalled);
  22          extern void D12WriteBuffer(unsigned char bEndpointIndex,unsigned char bLength, unsigned char * pBuffer);
  23          extern void D12SetEndpointEnable(unsigned char bEndpointEnable);
  24          extern void D12SetDMA(unsigned char bValue);
  25          extern void D12SendResume(void);
  26          extern void UsbIsr(void);
  27          extern void UsbSetUpDeal(void);
  28          extern void ControlOutDealWith(void);
  29          
  30          //
  31          //*************************************************************************
  32          //      Paremeter:
  33          //              In : None
  34          //              Out: None
  35          //      Function:
  36          //              On PDIUSBD12 Develop Board,the interrupt pin of PDIUSBD12 is connected
  37          //              to INT0 of P89C51RD2.When interrupt has happened,this function
  38          //              will call UsbIsr(),which will deal with USB interrupt
  39          
  40          void UsbInterrupt(void) interrupt 0
  41          {
  42   1              #ifdef _INT_MODE_
  43   1              UsbIsr();       //USB interrupt service routine
  44   1              #endif
  45   1      }
  46          
  47          //
  48          //*************************************************************************
  49          //      Paremeter:
  50          //              In : None
  51          //              Out: None
  52          //      Function:
  53          //              This interrupt is use to refresh LED and switch status
  54          void Timer0Interrupt(void) interrupt 1
  55          {
C51 COMPILER V7.01  MAIN                                                                   02/17/2006 15:09:23 PAGE 2   

  56   1              static unsigned char data bTimer0Tiems = 0x00;
  57   1      
  58   1              if ((++bTimer0Tiems) >= 5)      //5*65535*6*(1/18.432)=107ms
  59   1              {
  60   2                      sSysInformation.bTimer0 = TRUE;
  61   2                      bTimer0Tiems = 0x00;
  62   2              }
  63   1      
  64   1              TH0 = 0x00;
  65   1              TL0 = 0x00;
  66   1              
  67   1      }
  68          
  69          //
  70          //*************************************************************************
  71          //      Paremeter:
  72          //              In : None
  73          //              Out: None
  74          //      Function:
  75          //              After system power on reset finished,this function will initialize
  76          //              system,include reset PDIUSBD12,initialize all variable,test innteral
  77          //              RAM of P89C51RD2,and set UART,set LED,Switch
  78          void SysInitialize(void)
  79          {
  80   1      
  81   1              unsigned int data i;
  82   1              unsigned char xdata * data pInnerRam = &MCU_INNER_RAM;
  83   1      
  84   1              D12_RESET = 0;                                                  //reset PDIUSBD12
  85   1              LED_ADDRESS     = 0xFF;                                         //all led will turn off
  86   1      
  87   1              sSysInformation.bRamError = FALSE;      //no error
  88   1              sSysInformation.bTimer0 =FALSE;                 //bTimer0
  89   1              sSysInformation.bBusReset = FALSE;
  90   1              sSysInformation.bSuspendChange = FALSE;
  91   1              sSysInformation.bInSuspend = FALSE;     
  92   1              sSysInformation.bRemoteWakeUpEnable = FALSE;
  93   1              sSysInformation.bD12ConfigurationValue = 0x00;  
  94   1              sSysInformation.bSetup = FALSE;
  95   1              sSysInformation.bUsbStatus = IDLE;
  96   1      
  97   1              sSysInformation.sUsbSetUpDealwith.wRemaindLength = 0;
  98   1              sSysInformation.sUsbSetUpDealwith.bControlOutDataComplete = TRUE; 
  99   1              sSysInformation.sUsbSetUpDealwith.bControOutCommandIsPending = FALSE;
 100   1      
 101   1              sSysInformation.sRamControl.bRamCommand = RAM_COMMAND_LOOPBACK;
 102   1              sSysInformation.sRamControl.bRamRwStatus = IDLE;
 103   1              sSysInformation.sRamControl.iRamStartAddress = &mRamBuffer;
 104   1              sSysInformation.sRamControl.iRamRwLength = 0;
 105   1              sSysInformation.sRamControl.iRamRemaindLength = 0;
 106   1      
 107   1              //check internal ram of P89C51RD2,it has a internal ram which size is 768 byte.
 108   1              //first write 0x5a to all ram unit ,then read and compare,if error happened,
 109   1              //set bRamError flag
 110   1              for (i=0;i<768;i++) 
 111   1              {
 112   2                      *pInnerRam = 0x5A;                                      //all inner ram is written to 0x5a
 113   2                      pInnerRam++;
 114   2              }
 115   1              pInnerRam = &MCU_INNER_RAM;
 116   1              for (i=0;i<768;i++) 
 117   1              {
C51 COMPILER V7.01  MAIN                                                                   02/17/2006 15:09:23 PAGE 3   

 118   2                      if (*pInnerRam != 0x5A)                         //read back from high address of inner ram
 119   2                      {
 120   3                              sSysInformation.bRamError = TRUE;               //if not equal to 0x5a,error happened
 121   3                              break;                                                                  //and exit from this cycle
 122   3                      }
 123   2                      pInnerRam++;
 124   2      
 125   2              }
 126   1              //second write 0xa5 to all ram unit ,then read and compare,if error happened,
 127   1              //set bRamError flag
 128   1              pInnerRam = &MCU_INNER_RAM;
 129   1              if (sSysInformation.bRamError==FALSE)//test inner ram the second time,write 0xa5
 130   1              {
 131   2                      for (i=0;i<768;i++) 
 132   2                      {
 133   3                              *pInnerRam = 0xA5;
 134   3                              pInnerRam++;
 135   3                      }
 136   2                      pInnerRam = &MCU_INNER_RAM;
 137   2                      for (i=1;i<768;i++) 
 138   2                      {
 139   3                              if (*pInnerRam != 0xA5) 
 140   3                              {
 141   4                                      sSysInformation.bRamError = TRUE;
 142   4                                      break;
 143   4                              }
 144   3                              pInnerRam++;
 145   3                      }
 146   2              }       
 147   1              //if no ram error found,initialize all ram unit to 0xFF
 148   1              pInnerRam = &MCU_INNER_RAM;
 149   1              for (i=0;i<768;i++) 
 150   1              {
 151   2                      *pInnerRam = 0xFF;      
 152   2                      pInnerRam++;
 153   2              }
 154   1      
 155   1      
 156   1              //Timer1 set,used as UART baud rate generator
 157   1      
 158   1              TMOD = 0x20;                                            
 159   1              SCON = 0x50;
 160   1              PCON = 0x80;
 161   1              TH1      = 0xFB;                        //OSC is 18.432MHz,MCU is 6 clock mode,then BaudRate will be 38400
 162   1              TL1      = 0xFB;
 163   1              TI=1;
 164   1              TR1=1;
 165   1      
 166   1              //INT0 set,interrupt source is PDIUSBD12
 167   1              #ifdef _INT_MODE_
 168   1              IT0 = 0;                                //low level trigle
 169   1              EX0 = 1;
 170   1              PX0 = 0;
 171   1              #endif
 172   1      
 173   1              //Timer0 set, used as switch and led refresh timing
 174   1              TMOD &= 0XF0;           
 175   1              TMOD  |= 0X1;
 176   1              TL0 = 0X0;                  
 177   1              TH0 = 0X0;                  
 178   1              ET0 = 1;                        
 179   1              TR0 = 1;                        
C51 COMPILER V7.01  MAIN                                                                   02/17/2006 15:09:23 PAGE 4   

 180   1              PT0 = 1;
 181   1      
 182   1              D12_RESET = 1;  //release PDIUSBD12 reset
 183   1      }
 184          
 185          //
 186          //*************************************************************************
 187          //      Paremeter:
 188          //              In : None
 189          //              Out: None
 190          //      Function:
 191          //              This is main function of firmware.It is an infinate cycle and check 
 192          //              sSysInformation,if any flag is set, call corresponding function to 
 193          //              deal with it.
 194          void main(void)
 195          {
 196   1              unsigned char data i;
 197   1              unsigned int data j;
 198   1      
 199   1      
 200   1              EA = 0; //MCU global interrupt is enabled
 201   1      
 202   1              SysInitialize();
 203   1      

⌨️ 快捷键说明

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