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

📄 display.lst

📁 用keil便宜代码超过64k的程序例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
CX51 COMPILER V7.20   DISPLAY                                                              08/15/2005 15:35:54 PAGE 8   

 427   2           SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
 428   2            _Nop(); 
 429   2            _Nop();               /*保证时钟高电平周期大于4μs*/
 430   2            _Nop();
 431   2            _Nop();
 432   2            _Nop();         
 433   2           SCL=0; 
 434   2          }
 435   1          
 436   1          _Nop();
 437   1          _Nop();
 438   1          SDA=1;               /*8位发送完后释放数据线,准备接收应答位*/
 439   1          _Nop();
 440   1          _Nop();   
 441   1          SCL=1;
 442   1          _Nop();
 443   1          _Nop();
 444   1          _Nop();
 445   1          if(SDA==1)
 446   1                      sendack=0;     
 447   1             else 
 448   1                      sendack=1;        /*判断是否接收到应答信号*/
 449   1          SCL=0;
 450   1          _Nop();
 451   1          _Nop();
 452   1              return(sendack);
 453   1      }
 454          
 455          
 456          
 457          
 458          
 459          
 460          /*******************************************************************
 461                           字节数据传送函数               
 462          函数原型: uchar  RcvByte();2464使用
 463          功能:  用来接收从器件传来的数据,并判断总线错误(不发应答信号),
 464               发完后请用应答函数。  
 465          ********************************************************************/   
 466          uchar  RcvByte2464()
 467          {
 468   1        uchar retc;
 469   1        uchar BitCnt;
 470   1      TOGGLE_WD();  
 471   1        retc=0; 
 472   1        SDA=1;             /*置数据线为输入方式*/
 473   1        for(BitCnt=0;BitCnt<8;BitCnt++)
 474   1            {
 475   2              _Nop();           
 476   2              SCL=0;       /*置时钟线为低,准备接收数据位*/
 477   2              _Nop();
 478   2              _Nop();         /*时钟低电平周期大于4.7μs*/
 479   2              _Nop();
 480   2              _Nop();
 481   2              _Nop();
 482   2              SCL=1;       /*置时钟线为高使数据线上数据有效*/
 483   2              _Nop();
 484   2              _Nop();
 485   2              retc=retc<<1;
 486   2              if(SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */
 487   2              _Nop();
 488   2              _Nop(); 
CX51 COMPILER V7.20   DISPLAY                                                              08/15/2005 15:35:54 PAGE 9   

 489   2            }
 490   1        SCL=0;    
 491   1        _Nop();
 492   1        _Nop();
 493   1        return(retc);
 494   1      }
 495          
 496          /*******************************************************************
 497                              向无子地址器件发送字节数据函数               
 498          函数原型: bit  ISendByte(uchar sla,ucahr c);  
 499          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 500                     如果返回1表示操作成功,否则操作有误。
 501          注意:    使用前必须已结束总线。
 502          ********************************************************************/
 503          bit ISendByte(uchar sla,uchar c)
 504          {
 505   1      
 506   1         Start_I2c();               /*启动总线*/
 507   1         if(SendByte2464(sla)==0)            /*发送器件地址*/
 508   1              return(0);
 509   1         if(SendByte2464(c)==0)               /*发送数据*/
 510   1             return(0);
 511   1        Stop_I2c();                 /*结束总线*/ 
 512   1        return(1);
 513   1      }
 514          
 515          
 516          
 517          
 518          /*******************************************************************
 519                              向有子地址器件发送多字节数据函数               
 520          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
 521          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 522                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 523                     如果返回1表示操作成功,否则操作有误。
 524          注意:    使用前必须已结束总线。
 525          ********************************************************************/
 526          bit ISendStr(uchar sla,uchar masa,uchar suba,uchar *s,uchar no)
 527          {
 528   1         uchar i;
 529   1      TOGGLE_WD();
 530   1              startwait(5);   /*80ms*/
 531   1         Start_I2c();               /*启动总线*/
 532   1         if(SendByte2464(sla)==0)            /*发送器件地址*/
 533   1           return(0);
 534   1         if(sla!=i8563)
 535   1              {
 536   2                 if(SendByte2464(masa)==0)            /*发送器件子地址high*/
 537   2                              return(0);
 538   2              }
 539   1         if(SendByte2464(suba)==0)            /*发送器件子地址*/
 540   1           return(0);
 541   1      
 542   1         for(i=0;i<no;i++)
 543   1          {   TOGGLE_WD();
 544   2           if(SendByte2464(*s)==0)               /*发送数据*/
 545   2             return(0);
 546   2           s++;
 547   2          } 
 548   1       Stop_I2c();                 /*结束总线*/ 
 549   1        return(1);
 550   1      }
CX51 COMPILER V7.20   DISPLAY                                                              08/15/2005 15:35:54 PAGE 10  

 551          
 552          
 553          
 554          
 555          
 556          
 557          /*******************************************************************
 558                              向无子地址器件读字节数据函数               
 559          函数原型: bit  IRcvByte(uchar sla,ucahr *c);  
 560          功能:     从启动总线到发送地址,读数据,结束总线的全过程,从器件地
 561                    址sla,返回值在c.
 562                     如果返回1表示操作成功,否则操作有误。
 563          注意:    使用前必须已结束总线。
 564          ********************************************************************/
 565          bit IRcvByte(uchar sla,uchar *c)
 566          {
 567   1         Start_I2c();                /*启动总线*/
 568   1         if(SendByte2464(sla+1)==0)           /*发送器件地址*/
 569   1           return(0);
 570   1         *c=RcvByte();               /*读取数据*/
 571   1           Ack_I2c(1);               /*发送非就答位*/
 572   1        Stop_I2c();                  /*结束总线*/ 
 573   1        return(1);
 574   1      }
 575          
 576          
 577          
 578          /*******************************************************************
 579                              向有子地址器件读取多字节数据函数               
 580          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
 581          功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
 582                    地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
 583                     如果返回1表示操作成功,否则操作有误。
 584          注意:    使用前必须已结束总线。
 585          ********************************************************************/
 586          bit IRcvStr(uchar sla,uchar masa,uchar suba,uchar *s,uchar no)
 587          {
 588   1         uchar i;
 589   1      TOGGLE_WD();
 590   1              startwait(5);   /*80ms*/
 591   1         Start_I2c();               /*启动总线*/
 592   1         if(SendByte2464(sla)==0)            /*发送器件地址*/
 593   1                   return(0);
 594   1         if(sla!=i8563)
 595   1              {
 596   2              if(SendByte2464(masa)==0)            /*发送器件子地址high*/
 597   2                      return(0);
 598   2              }
 599   1         if(SendByte2464(suba)==0)            /*发送器件子地址*/
 600   1                   return(0);
 601   1      
 602   1         Start_I2c();
 603   1         if(SendByte2464(sla+1)==0)
 604   1              return(0);
 605   1              
 606   1         for(i=0;i<no-1;i++)
 607   1          {   TOGGLE_WD();
 608   2           *s=RcvByte2464();               /*发送数据*/
 609   2            Ack_I2c(0);                /*发送就答位*/  
 610   2           s++;
 611   2          } 
 612   1         *s=RcvByte2464();
CX51 COMPILER V7.20   DISPLAY                                                              08/15/2005 15:35:54 PAGE 11  

 613   1          Ack_I2c(1);                 /*发送非应位*/
 614   1         Stop_I2c();                    /*结束总线*/ 
 615   1              TOGGLE_WD();
 616   1        return(1);
 617   1      }
 618          
 619          
 620          
 621                                  /*    完毕      */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1693    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      40
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       2
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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