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

📄 main.lst

📁 用于Slave I2C得读写,此代码针对特定得芯片,但对其他得芯片也有借鉴作用.
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  12/10/2006 12:14:10 PAGE 1   


C51 COMPILER V8.02, 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          #define ALLOCATE_EXTERN
   2          
   3          #include "DP8051.h"
   4          #include "intrins.h"
   5          #include "FS7822.h"
   6          
   7          #define SLAVE_ADDRESS  0xAE
   8          //  I2C_CLK reg
   9          #define bmI2CCK_DIV       0x54
  10          #define bmCLK_PRE         0x40
  11          
  12          #define I2C_EN                  0x80
  13          #define I2C_MODE                0x40
  14          #define MST_MODE                0x20
  15          #define START                   0x02
  16          #define STOP                    0x01
  17          
  18          void I2c_Init(BOOL isHigh);
  19          void InitCPU();
  20          BYTE I2c_SendStr(BYTE sla,BYTE *s,BYTE doffset,WORD no);
  21          BYTE I2c_RcvStr(BYTE sla,BYTE *s,BYTE doffset,WORD Len);
  22          void I2C_Write(unsigned char *input,unsigned short wordadd,unsigned char Len);
  23          void I2C_Read(unsigned char *output,unsigned short wordadd,unsigned char Len);
  24          void I2C_WriteRead(unsigned char *input,unsigned char *output,unsigned short wordadd,unsigned char Len);
  25          
  26          void InitCPU()
  27          {
  28   1              SYS_CFG=bmCPUCLK_SEL|bmPM_AVBLE|bmSYS_SWRST; //select system  clock,firmware dispose USB request, reset t
             -he device
  29   1          
  30   1          SYSIO_CFG=bmSPI_EN|bmI2C_EN;
  31   1      
  32   1              SW_RST=bmSPI_RST|bmI2C_RST;
  33   1      
  34   1              BPPUCTL=bmSPIPUCTL;
  35   1         
  36   1              MEMCON=bmMEMCON|bmASYN;  
  37   1          WDTRST = 0x2D;   
  38   1      }
  39          
  40          void I2c_Init(BOOL isHigh)
  41          {
  42   1          SW_RST|=bmI2C_RST;
  43   1      
  44   1          if(isHigh)
  45   1                I2C_CLK = bmI2CCK_DIV;                     //400k
  46   1          else
  47   1                I2C_CLK = bmCLK_PRE|bmI2CCK_DIV;           //100k
  48   1                      
  49   1              I2C_CTL |= 0x40;             //Slave     
  50   1              I2C_MABT = 0x01;          
  51   1      }
  52          
  53          
  54          idata BYTE writedata[30] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,\
C51 COMPILER V8.02   MAIN                                                                  12/10/2006 12:14:10 PAGE 2   

  55                                   0xBB,0xBA,0xCC,0xDD,0xEE,0xFF,0xAB,0xBC,0xCD,0xDE};
  56          idata BYTE readdata[30];
  57          
  58          #define Address_match  0x80
  59          #define Slave_mode     0x40
  60          BYTE datanum;
  61          void    WriteData(BYTE * writedata);
  62          void    ReadData(BYTE * readdata);
  63          
  64          void    WriteData(BYTE * writedata)
  65          {
  66   1           I2C_STUS = 0x03;
  67   1           I2C_DBUF = *writedata;
  68   1      }
  69          
  70          void    ReadData(BYTE * readdata)
  71          {
  72   1           *readdata = I2C_DBUF;
  73   1           I2C_STUS = 0x01;
  74   1      }
  75          
  76          void I2C_INT_ISR(void) interrupt 7 
  77          {
  78   1           if(CHIPINT & I2CINTE)
  79   1           {
  80   2               CHIPINT &= ~I2CINTE;
  81   2               if(I2C_STUS & Slave_mode)
  82   2               {                    
  83   3                     WriteData(writedata+datanum);               
  84   3               }
  85   2               else
  86   2               {
  87   3                     ReadData(readdata+datanum);
  88   3               } 
  89   2               datanum++;
  90   2           }    
  91   1      }
  92          main()
  93          {
  94   1           WDTRST = 0x2D;
  95   1           InitCPU();
  96   1           I2c_Init(0);
  97   1            
  98   1           EA = 1;
  99   1           ES = 1;
 100   1           I2C_SADDR = 0xEA;
 101   1           CHIPINTE = CHIPINTE | I2CINTE;
 102   1           while(1)
 103   1           {
 104   2               if(datanum == 20)
 105   2                  datanum = 0;
 106   2           }
 107   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    210    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   IDATA SIZE       =     60    ----
C51 COMPILER V8.02   MAIN                                                                  12/10/2006 12:14:10 PAGE 3   

   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 + -