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

📄 24c64.lst

📁 KeilC51开发,51单片机与E2PROM的接口程序,并且有串口与液晶的输出.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 198          /*******************************************************************
 199                              向有子地址器件发送多字节数据函数               
 200          函数原型: bit  ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);  
 201          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 202                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 203                     如果返回1表示操作成功,否则操作有误。
 204          注意:    使用前必须已结束总线。
 205          ********************************************************************/
 206          bit ISendStr(Uchar sla, Uint suba, Uchar *s, Uchar no)
 207          {
 208   1         Uchar i, subah, subal;
 209   1      
 210   1              subah=suba>>8;
 211   1              subal=suba & 0x00FF;
 212   1         Start_I2c();               /*启动总线*/
 213   1         SendByte(sla);            /*发送器件地址, 0xA0,0xA2,0xA4,...,0xAE*/
 214   1           if(ack==0)return(0);
 215   1         SendByte(subah);            /*发送器件子地址*/
 216   1           if(ack==0)return(0);
 217   1         SendByte(subal);            /*发送器件子地址*/
 218   1           if(ack==0)return(0);
 219   1      
 220   1         for(i=0;i<no;i++)
 221   1          {   
 222   2           SendByte(*s);               /*发送数据*/
 223   2             if(ack==0)return(0);
 224   2           s++;
 225   2          } 
 226   1       Stop_I2c();                 /*结束总线*/ 
 227   1        return(1);
 228   1      }
 229          
 230          
 231          
 232          
 233          
 234          
 235          /*******************************************************************
 236                              向无子地址器件读字节数据函数               
 237          函数原型: bit  IRcvByte(unsigned char sla,ucahr *c);  
 238          功能:     从启动总线到发送地址,读数据,结束总线的全过程,从器件地
 239                    址sla,返回值在c.
 240                     如果返回1表示操作成功,否则操作有误。
 241          注意:    使用前必须已结束总线。
C51 COMPILER V7.06   24C64                                                                 08/09/2005 17:42:21 PAGE 5   

 242          ********************************************************************/
 243          bit IRcvByte(Uchar sla, Uchar *c)
 244          {
 245   1         Start_I2c();                /*启动总线*/
 246   1         SendByte(sla+1);           /*发送器件地址*/
 247   1           if(ack==0)return(0);
 248   1         *c=RcvByte();                                /*读取数据*/
 249   1           Ack_I2c(1);               /*发送非就答位*/
 250   1        Stop_I2c();                  /*结束总线*/
 251   1        return(1);
 252   1      }
 253          
 254          
 255          
 256          /*******************************************************************
 257                              向有子地址器件读取多字节数据函数               
 258          函数原型: bit  ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);  
 259          功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
 260                    地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
 261                     如果返回1表示操作成功,否则操作有误。
 262          注意:    使用前必须已结束总线。
 263          ********************************************************************/
 264          bit IRcvStr(Uchar sla, Uint suba, Uchar *s, Uchar no)
 265          {
 266   1         Uchar i, subah, subal;
 267   1      
 268   1              subah=suba>>8;
 269   1              subal=suba & 0x00FF;
 270   1         Start_I2c();               /*启动总线*/
 271   1         SendByte(sla);            /*发送器件地址*/
 272   1           if(ack==0)return(0);
 273   1         SendByte(subah);            /*发送器件子地址*/
 274   1           if(ack==0)return(0);
 275   1         SendByte(subal);            /*发送器件子地址*/
 276   1           if(ack==0)return(0);
 277   1      
 278   1         Start_I2c();
 279   1         SendByte(sla+1);
 280   1            if(ack==0)return(0);
 281   1      
 282   1         for(i=0;i<no-1;i++)
 283   1          {   
 284   2           *s=RcvByte();               /*发送数据*/
 285   2            Ack_I2c(0);                /*发送就答位*/  
 286   2           s++;
 287   2          } 
 288   1         *s=RcvByte();
 289   1          Ack_I2c(1);                 /*发送非应位*/
 290   1       Stop_I2c();                    /*结束总线*/ 
 291   1        return(1);
 292   1      }
 293          
 294          
 295          //need improve
 296          bit SelectAddress(Uchar caddr, Uint addr)
 297          {
 298   1              Uchar addrh, addrl;
 299   1      
 300   1              addrh=addr>>8;
 301   1              addrl=addr & 0x00FF;
 302   1              Start_I2c();               /*启动总线*/
 303   1              SendByte(caddr);            /*发送器件地址*/
C51 COMPILER V7.06   24C64                                                                 08/09/2005 17:42:21 PAGE 6   

 304   1              if(ack==0)return(0);
 305   1              SendByte(addrh);
 306   1              if(ack==0)return(0);
 307   1              SendByte(addrl);               /*发送地址*/
 308   1              if(ack==0)return(0);
 309   1              //Stop_I2c();                 /*结束总线*/ 
 310   1              return(1);
 311   1      }
 312          
 313          Uchar ByteSend_TEST(Uchar *ch, Uchar chip)  //for test
 314          {
 315   1              Uchar ch2;
 316   1              Uchar *ch1=&ch2;
 317   1              Uint i;
 318   1      
 319   1              if (ISendByte(0xA0,*ch))
 320   1              {
 321   2                      ET0=0;
 322   2                      printf("send\n");
 323   2                      ET0=1;
 324   2              }
 325   1                      else
 326   1              {
 327   2                      printf("error\n");  //for test
 328   2              }
 329   1              ch=0;
 330   1              if (SelectAddress(chip, 0x1010))
 331   1              {
 332   2                      ET0=0;
 333   2                      printf("sel\n");  //for test
 334   2                      ET0=1;
 335   2              }
 336   1                      else
 337   1              {
 338   2                      printf("error\n");  //for test
 339   2              }
 340   1              if (IRcvByte(0xA0,ch1))
 341   1              {
 342   2                      ET0=0;
 343   2                      printf("rcv\n");  //for test
 344   2                      ET0=1;
 345   2              }
 346   1                      else
 347   1              {
 348   2                      printf("error\n");  //for test
 349   2              }
 350   1              
 351   1      //      DisplayOneChar(2,0,*ch1);               //(for test)
 352   1      
 353   1              for (i=0;i<1000;i++);
 354   1              ET0=0; 
 355   1              printf("recieved:%c\n",*ch1);  //for test
 356   1              ET0=1;
 357   1              
 358   1      //      DisplayOneChar(3,0,ch2);                //(for test)
 359   1      
 360   1              return(ch2);
 361   1      }
 362          
 363          void PageSend_TEST(Uchar *ch)  //for test
 364          {
 365   1              Uint i;
C51 COMPILER V7.06   24C64                                                                 08/09/2005 17:42:21 PAGE 7   

 366   1      
 367   1              if (ISendStr(0xA0,0x1022,"abcdefg",7))
 368   1              {
 369   2                      ET0=0; printf("yes1\n");   ET0=1;
 370   2              }
 371   1                      else 
 372   1              {
 373   2                      ET0=0; printf("error"); ET0=1;
 374   2              }
 375   1              for (i=0;i<7;i++)
 376   1              {
 377   2                      if (IRcvStr(0xA0,0x1022,ch,7))
 378   2                      {
 379   3                              ET0=0; printf("yes2\n");        ET0=1;
 380   3                      }
 381   2              }
 382   1              ET0=0; printf("ch=%s\n",ch);   ET0=1;
 383   1              ET0=0;
 384   1              ET0=1;
 385   1      }
 386          
 387          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    745    ----
   CONSTANT SIZE    =     69    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      29
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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