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

📄 main.lst

📁 这是USBD12芯片与PC机通讯的单片机固件程序
💻 LST
字号:
C51 COMPILER V7.20   MAIN                                                                  11/16/2007 15:11:14 PAGE 1   


C51 COMPILER V7.20, 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 <reg922.h>
   2          #include <intrins.h>
   3          #include "D12Config.h"
   4          #include "Descriptor.h"
   5          #include "Chap_9.h"
   6          #include "D12Driver.h"
   7          #include "D12CI.h"
   8          #include "I2c_C51.h"
   9          
  10          unsigned char idata  CommandBuf[8];
  11          unsigned char idata  VerifyByte;
  12          //sbit pin_LED = P1^2;
  13          /*Not Used yet...Slm
  14          void Delay (unsigned long t)
  15          { 
  16                  unsigned long i;
  17                  for(i=0;i<=t;i++) _nop_();
  18          }
  19          */
  20          void SysInit()
  21          {
  22   1              P0M1&=0;
  23   1              P0M2&=0;
  24   1              P1M1&=0;
  25   1              P1M2&=0;
  26   1              P1M1|=0x1c;
  27   1              P1M2|=0x0c;
  28   1              P3M1&=0;
  29   1              P3M2&=0;
  30   1      }
  31          
  32          void I2cServe(unsigned char *Buf);
  33          void main()
  34          {
  35   1              SysInit();//初始化端口配置
  36   1              
  37   1              if (Init_D12()!=0)                                      //初始化D12
  38   1                      return;                                                 //如果初始化不成功,返回
  39   1              
  40   1              while(1)
  41   1              {       
  42   2                      usbserve();                                             //处理USB事件
  43   2                      if( (bEPPflags.bits.configuration) && (bEPPflags.bits.ep1_rxdone) )
  44   2                      {
  45   3                              DISABLE();
  46   3                              CommandBuf[0] = GenEpBuf[0];
  47   3                              CommandBuf[1] = GenEpBuf[1];
  48   3                              CommandBuf[2] = GenEpBuf[2];
  49   3                              CommandBuf[3] = GenEpBuf[3];
  50   3                              CommandBuf[4] = GenEpBuf[4];
  51   3                              CommandBuf[5] = GenEpBuf[5];
  52   3                              CommandBuf[6] = GenEpBuf[6];
  53   3                              CommandBuf[7] = GenEpBuf[7];
  54   3                              bEPPflags.bits.ep1_rxdone = 0;
  55   3                              ENABLE();//当数据移到CommandBufp[]后再开中断以便GenEpBuf[]接收新命令...
C51 COMPILER V7.20   MAIN                                                                  11/16/2007 15:11:14 PAGE 2   

  56   3                              I2cServe( CommandBuf );//处理命令包
  57   3                              D12_WriteEndpoint(3, 8, CommandBuf);//处理后将包回执
  58   3              }               
  59   2              }//end while
  60   1              return;//end main()
  61   1      }
  62          
  63          /******* 下面为应用程序 *************/
  64          
  65          /*******************************************************************
  66          ** 函数名称: I2cServe()
  67          ** 功能描述: 处理I2c的控制信息
  68          ** 输    入: 无
  69          ** 输    出: 无
  70          GenEpBuf[0]:读/写控制 00=Bit读 01=Bit写 02=Byte读 03=Byte写 ff=读Firmware Version
  71          fe=读Hardware Version
  72          GenEpBuf[1]:设备地址
  73          GenEpBuf[2]:读/写的数据,在Bit模式下:D7-D4=Bit number(0-7);D3-D0=Set/read value
  74          GenEpBuf[3]:保留
  75          GenEpBuf[4]:保留
  76          GenEpBuf[5]:处理结果,0xaa:成功 0x55:失败 0xbb:未定义的命令代码 0xab:校验错误!
  77          GenEpBuf[6]:处理结果,0xaa:成功 0x55:失败 0xbb:未定义的命令代码 0xab:校验错误!
  78          GenEpBuf[7]:前7个字节的校验和
  79          ********************************************************************/
  80          void I2cServe(unsigned char *Buf)//接收到主机发来的I2c控制信息并处理它
  81          {
  82   1              unsigned char VerifyByte=Buf[0]^Buf[1]^Buf[2]^Buf[3]^Buf[4]^Buf[5]^Buf[6];
  83   1              unsigned char Sta,BitNum,SetBit;
  84   1      
  85   1              if(VerifyByte != Buf[7])//校验错误!
  86   1              {
  87   2                      Buf[5]=0xab;
  88   2                      Buf[6]=0xab;
  89   2                      return;
  90   2              }
  91   1              
  92   1              switch(Buf[0])//命令解析
  93   1              {
  94   2              case 0xff://读Firware版本号
  95   2                      Buf[0] = '1';
  96   2                      Buf[1] = '.';
  97   2                      Buf[2] = '0';
  98   2                      Buf[3] = '2';
  99   2                      break;
 100   2              case 0xfe://读Hardware Version
 101   2                      Buf[0] = '2';
 102   2                      Buf[1] = '.';
 103   2                      Buf[2] = '0';
 104   2                      Buf[3] = '0';
 105   2                      break;
 106   2              case 0x00://Bit读
 107   2              BitNum=(Buf[2]>>4);
 108   2                      Sta=Read_port_bit(Buf[1],BitNum);
 109   2                      if(Sta==0xaa)//读失败
 110   2                      {
 111   3                              Buf[5]=0x55;
 112   3                              Buf[6]=0x55;
 113   3                      }
 114   2                      else//读成功
 115   2                      {
 116   3                              Buf[5]=0xaa;
 117   3                              Buf[6]=0xaa;
C51 COMPILER V7.20   MAIN                                                                  11/16/2007 15:11:14 PAGE 3   

 118   3                              Buf[2]=( Buf[2]&0xf0 );
 119   3                              Buf[2]=( Buf[2]|Sta );
 120   3                      }
 121   2                      break;
 122   2              case 0x01://Bit写
 123   2                      BitNum=(Buf[2]>>4);
 124   2                      SetBit=( Buf[2]&0x0f );
 125   2                      if( I2c_bit(SetBit,BitNum,Buf[1]) )
 126   2                      {
 127   3                              Buf[5]=0xaa;//写成功
 128   3                              Buf[6]=0xaa;
 129   3                      }
 130   2                      else//写失败
 131   2                      {
 132   3                              Buf[5]=0x55;
 133   3                              Buf[6]=0x55;
 134   3                      }
 135   2                      break;
 136   2              case 0x02://Byte读
 137   2                      if( IRcvByte(Buf[1], &Buf[2]) )
 138   2                      {
 139   3                              Buf[5]=0xaa;//读成功
 140   3                              Buf[6]=0xaa;
 141   3                      }
 142   2                      else//读失败
 143   2                      {
 144   3                              Buf[5]=0x55;
 145   3                              Buf[6]=0x55;
 146   3                      }
 147   2                      break;
 148   2              case 0x03://Byte写
 149   2                      if( ISendByte(Buf[1],Buf[2]) )
 150   2                      {
 151   3                              Buf[5]=0xaa;
 152   3                              Buf[6]=0xaa;
 153   3                      }
 154   2                      else
 155   2                      {
 156   3                              Buf[5]=0x55;
 157   3                              Buf[6]=0x55;
 158   3                      }
 159   2                      break;
 160   2              default://以上都不是则写错误代码
 161   2                      Buf[5]=0xbb;
 162   2                      Buf[6]=0xbb;
 163   2                      break;
 164   2              }//end switch
 165   1      
 166   1              return;//end function
 167   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    646    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   IDATA SIZE       =      9    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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