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

📄 cat24wc16p.lst

📁 一个流量控制仪器的源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
  24          #define uint unsigned int
  25          
  26          
  27          #define CAT24WC16P_ADDRESS 0xA0                 // I2C write address of CAT24WC16P
  28          
  29          
  30          /*******************************************************************
  31                                  检查CAT24WC16P忙
  32          函数原型: bit CAT24WC16P_ready();
  33          功能: 检查CAT24WC16P
  34                返回0--CAT24WC16P忙
  35                返回1--CAT24WC16P准备
  36          *******************************************************************/
  37          
  38          bit CAT24WC16P_ready()
  39          {
  40   1              I2C_GetBus();          /*启动总线*/
  41   1              
  42   1              I2C_Send(CAT24WC16P_ADDRESS);         /*发送器件地址,若无应答则返回0*/
  43   1              if(S1STA!=0X18)
  44   1              {
  45   2                      S1CON=0XD5;
  46   2                      return(0);
  47   2              }
  48   1      
  49   1              return(1);                              /*发送器件地址,应答则返回1*/
  50   1      }
  51          
  52          
  53          /*******************************************************************
  54                  从CAT24WC16P器件随机地址读入N字节数据函数(N<=2048)(地址:0-2047)
  55          函数原型: bit   fnRead_Eeprom(uint uiAddress,uchar ucSize, uchar *uc_Data);
  56          功能:   从启动总线到发送地址、子地址、读数据、结束总线的全过程,器件
  57                  数据地址(0-7FF),读入的内容在指向的存储区N个字节。
  58                  如果返回1,表示操作成功,否则操作有误。
  59          ********************************************************************/
  60          bit     fnRead_Eeprom(uint uiAddress,uchar ucSize, uchar *uc_Data)
  61          {
  62   1              uchar i;
  63   1              uchar suba_high,suba_low;
  64   1      
  65   1              suba_high = uiAddress/256;
  66   1              suba_low = uiAddress%256;
  67   1              
  68   1              suba_high = suba_high << 1;
  69   1              
  70   1              suba_high |= CAT24WC16P_ADDRESS;
  71   1      
  72   1              while(!CAT24WC16P_ready());         //等待CAT24WC16P的准备就绪
  73   1              
  74   1      
  75   1              I2C_GetBus();                           //启动总线
  76   1              
  77   1              I2C_Send(suba_high);         //发送器件地址,三位高地址a10,a9,a8, 0 ,若无应答则返回
  78   1              if(S1STA!=0X18)
  79   1              {
  80   2                      S1CON=0XD5;
  81   2                      return(0);
  82   2              }
  83   1              
  84   1              I2C_Send(suba_low);        //发送器件子地址低字节,若无应答则返回
  85   1              if(S1STA!=0X28)
C51 COMPILER V7.07   CAT24WC16P                                                            07/08/2004 05:56:10 PAGE 7   

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

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

 210   1      }
C51 COMPILER V7.07   CAT24WC16P                                                            07/08/2004 05:56:10 PAGE 10  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


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

             ; FUNCTION _fnRead_Eeprom (BEGIN)
                                           ; SOURCE LINE # 60
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 # 61
                                           ; SOURCE LINE # 65
000C E500        R     MOV     A,uiAddress
000E F500        R     MOV     suba_high,A
                                           ; SOURCE LINE # 66
0010 8F00        R     MOV     suba_low,R7
                                           ; SOURCE LINE # 68
0012 E500        R     MOV     A,suba_high
0014 25E0              ADD     A,ACC
0016 F500        R     MOV     suba_high,A
                                           ; SOURCE LINE # 70
0018 4300A0      R     ORL     suba_high,#0A0H
001B         ?C0003:
                                           ; SOURCE LINE # 72
001B 120000      R     LCALL   CAT24WC16P_ready
001E 50FB              JNC     ?C0003
0020         ?C0004:
                                           ; SOURCE LINE # 75
0020 120000      E     LCALL   I2C_GetBus
                                           ; SOURCE LINE # 77
0023 AF00        R     MOV     R7,suba_high
0025 120000      E     LCALL   _I2C_Send
                                           ; SOURCE LINE # 78
0028 E5D9              MOV     A,S1STA
C51 COMPILER V7.07   CAT24WC16P                                                            07/08/2004 05:56:10 PAGE 11  

002A 6418              XRL     A,#018H
002C 6002              JZ      ?C0005
                                           ; SOURCE LINE # 79
                                           ; SOURCE LINE # 80
                                           ; SOURCE LINE # 81
002E 8039              SJMP    ?C0033
                                           ; SOURCE LINE # 82
0030         ?C0005:
                                           ; SOURCE LINE # 84
0030 AF00        R     MOV     R7,suba_low
0032 120000      E     LCALL   _I2C_Send
                                           ; SOURCE LINE # 85
0035 E5D9              MOV     A,S1STA
0037 6428              XRL     A,#028H
0039 6002              JZ      ?C0007
                                           ; SOURCE LINE # 86
                                           ; SOURCE LINE # 87
003B         ?C0031:
                                           ; SOURCE LINE # 88
003B 802C              SJMP    ?C0033
                                           ; SOURCE LINE # 89
003D         ?C0007:
                                           ; SOURCE LINE # 92
003D 75D8E5            MOV     S1CON,#0E5H
0040         ?C0008:
                                           ; SOURCE LINE # 93
0040 30DBFD            JNB     SI,?C0008
0043         ?C0009:
                                           ; SOURCE LINE # 95
0043 E500        R     MOV     A,suba_high
0045 04                INC     A
0046 FF                MOV     R7,A
0047 120000      E     LCALL   _I2C_Send
                                           ; SOURCE LINE # 96
004A E5D9              MOV     A,S1STA
004C 6440              XRL     A,#040H
004E 6002              JZ      ?C0010
                                           ; SOURCE LINE # 97
                                           ; SOURCE LINE # 98
0050         ?C0032:
                                           ; SOURCE LINE # 99
0050 8017              SJMP    ?C0033
                                           ; SOURCE LINE # 100
0052         ?C0010:
                                           ; SOURCE LINE # 102
;---- Variable 'i' assigned to Register 'R7' ----
0052 E4                CLR     A
0053 FF                MOV     R7,A
0054         ?C0011:
0054 E500        R     MOV     A,ucSize
0056 14                DEC     A
0057 FE                MOV     R6,A
0058 EF                MOV     A,R7
0059 C3                CLR     C
005A 9E                SUBB    A,R6
005B 502A              JNC     ?C0012
                                           ; SOURCE LINE # 103
                                           ; SOURCE LINE # 104
005D 75D8C5            MOV     S1CON,#0C5H
0060         ?C0014:
                                           ; SOURCE LINE # 105
0060 30DBFD            JNB     SI,?C0014
C51 COMPILER V7.07   CAT24WC16P                                                            07/08/2004 05:56:10 PAGE 12  

⌨️ 快捷键说明

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