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

📄 cat24wc64p.lst

📁 一个流量控制仪器的源码
💻 LST
📖 第 1 页 / 共 3 页
字号:

  24          
  25          
  26          #define CAT24WC64P_ADDRESS 0xA0                 // I2C write address of CAT24WC64P
  27          
  28          
  29          /*******************************************************************
  30                                  检查CAT24WC64P忙
  31          函数原型: bit CAT24WC64P_ready();
  32          功能: 检查CAT24WC64P
  33                返回0--CAT24WC64P忙
  34                返回1--CAT24WC64P准备
  35          *******************************************************************/
  36          
  37          bit CAT24WC64P_ready()
  38          {
  39   1              I2C_GetBus();          /*启动总线*/
  40   1              
  41   1              I2C_Send(CAT24WC64P_ADDRESS);         /*发送器件地址,若无应答则返回0*/
  42   1              if(S1STA!=0X18)
  43   1              {
  44   2                      S1CON=0XD5;
  45   2                      return(0);
  46   2              }
  47   1      
  48   1              return(1);                              /*发送器件地址,应答则返回1*/
  49   1      }
  50          
  51          
  52          /*******************************************************************
  53                  从CAT24WC64P器件随机地址读入N字节数据函数(N<=8192)(地址:0-8191)
  54          函数原型: bit   fnRead_Eeprom(uint uiAddress,uchar ucSize, uchar *uc_Data);
  55          功能:   从启动总线到发送地址、子地址、读数据、结束总线的全过程,器件
  56                  数据地址(0-1FFF),读入的内容在指向的存储区N个字节。
  57                  如果返回1,表示操作成功,否则操作有误。
  58          ********************************************************************/
  59          bit     fnRead_Eeprom(uint uiAddress,uchar ucSize, uchar *uc_Data)
  60          {
  61   1              uchar i;
  62   1              uchar suba_high,suba_low;
  63   1      
  64   1              suba_high = uiAddress/256;
  65   1              suba_low = uiAddress%256;
  66   1      
  67   1              while(!CAT24WC64P_ready());         //等待CAT24WC64P的准备就绪
  68   1              
  69   1      
  70   1              I2C_GetBus();                           //启动总线
  71   1              
  72   1              I2C_Send(CAT24WC64P_ADDRESS);         //发送器件地址,若无应答则返回
  73   1              if(S1STA!=0X18)
  74   1              {
  75   2                      S1CON=0XD5;
  76   2                      return(0);
  77   2              }
  78   1              
  79   1              I2C_Send(suba_high);        //发送器件子地址高字节,若无应答则返回
  80   1              if(S1STA!=0X28)
  81   1              {
  82   2                      S1CON=0XD5;
  83   2                      return(0);
  84   2              }
  85   1      
C51 COMPILER V7.06   CAT24WC64P                                                            09/08/2003 11:40:01 PAGE 7   

  86   1              I2C_Send(suba_low);        //发送器件子地址低字节,若无应答则返回
  87   1              if(S1STA!=0X28)
  88   1              {
  89   2                      S1CON=0XD5;
  90   2                      return(0);
  91   2              }
  92   1      
  93   1      
  94   1              S1CON=0XE5;             //重新启动总线
  95   1              while(SI==0);
  96   1              
  97   1              I2C_Send(CAT24WC64P_ADDRESS+1);       //发送器件地址,若无应答则返回
  98   1              if(S1STA!=0X40)
  99   1              {
 100   2                      S1CON=0XD5;
 101   2                      return(0);
 102   2              }
 103   1              
 104   1              for(i=0;i<ucSize-1;i++)
 105   1              {
 106   2                      S1CON=0XC5;     //接收一字节数据并发送应答位
 107   2                      while(SI==0);   //等待接收数据
 108   2                      if(S1STA!=0X50)
 109   2                      {
 110   3                              S1CON=0XD5;
 111   3                              return(0);
 112   3                      }
 113   2                      
 114   2                      *uc_Data = S1DAT;       //读取数据
 115   2                      uc_Data++;
 116   2              }
 117   1              
 118   1              S1CON=0XC1;             //接收最后一字节数据并发送非应答位
 119   1              while(SI==0);
 120   1              *uc_Data=S1DAT;
 121   1              
 122   1              S1CON=0XD5; //结束总线
 123   1              
 124   1              return(1);        
 125   1      }
 126          
 127          
 128          /*******************************************************************
 129                                  向CAT24WC64P器件页写入N字节数据函数
 130          函数原型: bit CAT24WC64P_PageW(uint suba,uchar suba_size,uchar *s)
 131          功能:   从启动总线到发送地址、子地址、读数据、结束总线的全过程,器件
 132                  数据页地址suba(0-FF),写入的内容在s指向的存储区读N个字节。
 133                  如果返回1,表示操作成功,否则操作有误。
 134          ********************************************************************/
 135          bit CAT24WC64P_PageW(uint suba,uchar suba_size,uchar *s)
 136          {
 137   1              uchar i;
 138   1              uchar suba_high,suba_low;
 139   1      
 140   1              suba_high = suba/256;
 141   1              suba_low = suba%256;
 142   1      
 143   1              while(!CAT24WC64P_ready());         //等待CAT24WC64P的准备就绪
 144   1              
 145   1      
 146   1              I2C_GetBus();                           //启动总线
 147   1              
C51 COMPILER V7.06   CAT24WC64P                                                            09/08/2003 11:40:01 PAGE 8   

 148   1              I2C_Send(CAT24WC64P_ADDRESS);         //发送器件地址,若无应答则返回
 149   1              if(S1STA!=0X18)
 150   1              {
 151   2                      S1CON=0XD5;
 152   2                      return(0);
 153   2              }
 154   1              
 155   1              I2C_Send(suba_high);        //发送器件子地址高字节,若无应答则返回
 156   1              if(S1STA!=0X28)
 157   1              {
 158   2                      S1CON=0XD5;
 159   2                      return(0);
 160   2              }
 161   1      
 162   1              I2C_Send(suba_low);        //发送器件子地址低字节,若无应答则返回
 163   1              if(S1STA!=0X28)
 164   1              {
 165   2                      S1CON=0XD5;
 166   2                      return(0);
 167   2              }
 168   1              
 169   1              for(i=0;i<suba_size;i++)
 170   1              {
 171   2                      I2C_Send(*s);         //发送数据,若无应答则返回
 172   2                      if(S1STA!=0X28)
 173   2                      {
 174   3                              S1CON=0XD5;
 175   3                              return(0);
 176   3                      }
 177   2                      s++;
 178   2              } 
 179   1              
 180   1              S1CON=0XD5; //结束总线
 181   1              
 182   1              return(1);
 183   1      
 184   1              
 185   1      
 186   1      }
 187          
 188          /*******************************************************************
 189                  从CAT24WC64P器件随机地址写入N字节数据函数(N<=32)(地址:0-8191)
 190          函数原型: bit   fnWrite_Eeprom(uint uiAddress,uchar ucSize, uchar *uc_Data);
 191          功能:   从启动总线到发送地址、子地址、读数据、结束总线的全过程,器件
 192                  数据地址(0-1FFF),写入的内容在指向的存储区N个字节。
 193                  如果返回1,表示操作成功,否则操作有误。
 194          ********************************************************************/
 195          bit     fnWrite_Eeprom(uint uiAddress,uchar ucSize, uchar *uc_Data)
 196          {
 197   1              char i;
 198   1      
 199   1              i = (uiAddress%32) + ucSize - 32;
 200   1      
 201   1              if( i > 0 )
 202   1              {
 203   2                      CAT24WC64P_PageW(uiAddress,ucSize - i,uc_Data);
 204   2                      CAT24WC64P_PageW(uiAddress + ucSize - i,i,uc_Data); 
 205   2                      return(1);
 206   2              }
 207   1              else
 208   1              {
 209   2                      CAT24WC64P_PageW(uiAddress,ucSize,uc_Data);
C51 COMPILER V7.06   CAT24WC64P                                                            09/08/2003 11:40:01 PAGE 9   

 210   2                      return(1);
 211   2              }
 212   1      
 213   1      }
 214          
 215          
C51 COMPILER V7.06   CAT24WC64P                                                            09/08/2003 11:40:01 PAGE 10  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION CAT24WC64P_ready (BEGIN)
                                           ; SOURCE LINE # 37
                                           ; SOURCE LINE # 38
                                           ; SOURCE LINE # 39
0000 120000      E     LCALL   I2C_GetBus
                                           ; SOURCE LINE # 41
0003 7FA0              MOV     R7,#0A0H
0005 120000      E     LCALL   _I2C_Send
                                           ; SOURCE LINE # 42
0008 E5D9              MOV     A,S1STA
000A 6418              XRL     A,#018H
000C 6005              JZ      ?C0001
                                           ; SOURCE LINE # 43
                                           ; SOURCE LINE # 44
000E 75D8D5            MOV     S1CON,#0D5H
                                           ; SOURCE LINE # 45
0011 C3                CLR     C
0012 22                RET     
                                           ; SOURCE LINE # 46
0013         ?C0001:
                                           ; SOURCE LINE # 48
0013 D3                SETB    C
                                           ; SOURCE LINE # 49
0014         ?C0002:
0014 22                RET     
             ; FUNCTION CAT24WC64P_ready (END)

             ; FUNCTION _fnRead_Eeprom (BEGIN)
                                           ; SOURCE LINE # 59
0000 8E00        R     MOV     uiAddress,R6
0002 8F00        R     MOV     uiAddress+01H,R7
0004 8D00        R     MOV     ucSize,R5
0006 8B00        R     MOV     uc_Data,R3
0008 8A00        R     MOV     uc_Data+01H,R2
000A 8900        R     MOV     uc_Data+02H,R1
                                           ; SOURCE LINE # 60
                                           ; SOURCE LINE # 64
000C E500        R     MOV     A,uiAddress
000E F500        R     MOV     suba_high,A
                                           ; SOURCE LINE # 65
0010 8F00        R     MOV     suba_low,R7
0012         ?C0003:
                                           ; SOURCE LINE # 67
0012 120000      R     LCALL   CAT24WC64P_ready
0015 50FB              JNC     ?C0003
0017         ?C0004:
                                           ; SOURCE LINE # 70
0017 120000      E     LCALL   I2C_GetBus
                                           ; SOURCE LINE # 72
001A 7FA0              MOV     R7,#0A0H
001C 120000      E     LCALL   _I2C_Send
                                           ; SOURCE LINE # 73
001F E5D9              MOV     A,S1STA
0021 6418              XRL     A,#018H
0023 6002              JZ      ?C0005
                                           ; SOURCE LINE # 74
                                           ; SOURCE LINE # 75
                                           ; SOURCE LINE # 76
0025 8044              SJMP    ?C0036
C51 COMPILER V7.06   CAT24WC64P                                                            09/08/2003 11:40:01 PAGE 11  

                                           ; SOURCE LINE # 77
0027         ?C0005:
                                           ; SOURCE LINE # 79
0027 AF00        R     MOV     R7,suba_high
0029 120000      E     LCALL   _I2C_Send
                                           ; SOURCE LINE # 80
002C E5D9              MOV     A,S1STA
002E 6428              XRL     A,#028H
0030 6002              JZ      ?C0007
                                           ; SOURCE LINE # 81
                                           ; SOURCE LINE # 82
0032         ?C0033:
                                           ; SOURCE LINE # 83
0032 8037              SJMP    ?C0036
                                           ; SOURCE LINE # 84
0034         ?C0007:
                                           ; SOURCE LINE # 86
0034 AF00        R     MOV     R7,suba_low
0036 120000      E     LCALL   _I2C_Send
                                           ; SOURCE LINE # 87
0039 E5D9              MOV     A,S1STA
003B 6428              XRL     A,#028H
003D 6002              JZ      ?C0008
                                           ; SOURCE LINE # 88
                                           ; SOURCE LINE # 89
003F         ?C0034:
                                           ; SOURCE LINE # 90
003F 802A              SJMP    ?C0036
                                           ; SOURCE LINE # 91
0041         ?C0008:
                                           ; SOURCE LINE # 94
0041 75D8E5            MOV     S1CON,#0E5H
0044         ?C0009:
                                           ; SOURCE LINE # 95
0044 30DBFD            JNB     SI,?C0009
0047         ?C0010:
                                           ; SOURCE LINE # 97
0047 7FA1              MOV     R7,#0A1H
0049 120000      E     LCALL   _I2C_Send
                                           ; SOURCE LINE # 98
004C E5D9              MOV     A,S1STA
004E 6440              XRL     A,#040H
0050 6002              JZ      ?C0011
                                           ; SOURCE LINE # 99
                                           ; SOURCE LINE # 100
0052         ?C0035:
                                           ; SOURCE LINE # 101
0052 8017              SJMP    ?C0036
                                           ; SOURCE LINE # 102
0054         ?C0011:
                                           ; SOURCE LINE # 104
;---- Variable 'i' assigned to Register 'R7' ----
0054 E4                CLR     A
0055 FF                MOV     R7,A
0056         ?C0012:
0056 E500        R     MOV     A,ucSize

⌨️ 快捷键说明

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