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

📄 comm.lst

📁 这是我在我们公司做的C51加油单片机程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 252   1           if(ack==0)return(0);
 253   1      
 254   1         Start_I2c();
 255   1         SendByte(sla+1);
 256   1            if(ack==0)return(0);
 257   1      
 258   1         for(i=0;i<no-1;i++)
 259   1          {
 260   2           kaohao[i]=RcvByte();               /*发送数据*/
 261   2            Ack_I2c(0);                /*发送就答位*/
 262   2           //s++;
 263   2          }
 264   1         kaohao[i]=RcvByte();
 265   1          Ack_I2c(1);                 /*发送非应位*/
 266   1       Stop_I2c();                    /*结束总线*/
 267   1        return(1);
 268   1      }
*** WARNING C280 IN LINE 247 OF C:\COMM_D\COMM.C: 's': unreferenced local variable
 269          
 270          /*******************************************************************
 271                              向有子地址器件发送多字节数据函数
 272          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
 273          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 274                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 275                     如果返回1表示操作成功,否则操作有误。
 276          注意:    使用前必须已结束总线。
 277          ********************************************************************/
 278          unsigned char ISendStr(unsigned char sla,unsigned char suba,unsigned char no)
 279          {
 280   1         unsigned char i;
 281   1          //unsigned char *s;
 282   1         Start_I2c();               /*启动总线*/
 283   1         SendByte(sla);            /*发送器件地址*/
 284   1           if(ack==0)return(0);
 285   1         SendByte(suba);            /*发送器件子地址*/
 286   1           if(ack==0)return(0);
 287   1      
 288   1         for(i=0;i<no;i++)
 289   1          {
 290   2           SendByte(kaohao[i]);               /*发送数据*/
 291   2             if(ack==0)return(0);
 292   2           //s++;
 293   2          }
 294   1       Stop_I2c();                 /*结束总线*/
 295   1        return(1);
 296   1      }
 297          /********************************************************************
 298                               应答子函数
 299          原型:  void Ack_I2c(bit a);
C51 COMPILER V6.02  COMM                                                                   07/15/2004 11:07:07 PAGE 6   

 300          
 301          功能:主控器进行应答信号,(可以是应答或非应答信号)
 302          ********************************************************************/
 303          void Ack_I2c(bit a)
 304          {
 305   1      
 306   1        if(a==0) SDA=0;     /*在此发出应答或非应答信号 */
 307   1              else SDA=1;
 308   1        _nop_();
 309   1        _nop_();
 310   1        _nop_();
 311   1        SCL=1;
 312   1          _nop_();
 313   1          _nop_();              /*时钟低电平周期大于4μs*/
 314   1          _nop_();
 315   1          _nop_();
 316   1          _nop_();
 317   1       SCL=0;                /*清时钟线,钳住I2C总线以便继续接收*/
 318   1          _nop_();
 319   1          _nop_();
 320   1      }
 321          
 322          /*******************************************************************
 323                               起动总线函数
 324          函数原型: void  Start_I2c();
 325          功能:       启动I2C总线,即发送I2C起始条件.
 326          
 327          ********************************************************************/
 328          void Start_I2c()
 329          {
 330   1        SDA=1;   /*发送起始条件的数据信号*/
 331   1        _nop_();
 332   1        SCL=1;
 333   1        _nop_();    /*起始条件建立时间大于4.7us,延时*/
 334   1        _nop_();
 335   1        _nop_();
 336   1        _nop_();
 337   1        _nop_();
 338   1        SDA=0;   /*发送起始信号*/
 339   1        _nop_();    /* 起始条件锁定时间大于4μs*/
 340   1        _nop_();
 341   1        _nop_();
 342   1        _nop_();
 343   1        _nop_();
 344   1        SCL=0;   /*钳住I2C总线,准备发送或接收数据 */
 345   1        _nop_();
 346   1        _nop_();
 347   1      }
 348          
 349          
 350          
 351          
 352          /*******************************************************************
 353                                结束总线函数
 354          函数原型: void  Stop_I2c();
 355          功能:       结束I2C总线,即发送I2C结束条件.
 356          
 357          ********************************************************************/
 358          void Stop_I2c()
 359          {
 360   1        SDA=0;  /*发送结束条件的数据信号*/
 361   1        _nop_();   /*发送结束条件的时钟信号*/
C51 COMPILER V6.02  COMM                                                                   07/15/2004 11:07:07 PAGE 7   

 362   1        SCL=1;  /*结束条件建立时间大于4μs*/
 363   1        _nop_();
 364   1        _nop_();
 365   1        _nop_();
 366   1        _nop_();
 367   1        _nop_();
 368   1        SDA=1;  /*发送I2C总线结束信号*/
 369   1        _nop_();
 370   1        _nop_();
 371   1        _nop_();
 372   1        _nop_();
 373   1      }
 374          /*******************************************************************
 375                           字节数据传送函数
 376          函数原型: void  SendByte(uchar c);
 377          功能:  将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
 378               此状态位进行操作.(不应答或非应答都使ack=0 假)
 379               发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
 380          ********************************************************************/
 381          void  SendByte(unsigned char c)
 382          {
 383   1       unsigned char BitCnt;
 384   1      
 385   1       for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
 386   1          {
 387   2           if((c<<BitCnt)&0x80)SDA=1;   /*判断发送位*/
 388   2             else  SDA=0;
 389   2           SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
 390   2            _nop_();
 391   2            _nop_();               /*保证时钟高电平周期大于4μs*/
 392   2            _nop_();
 393   2            _nop_();
 394   2            _nop_();
 395   2            dlu();
 396   2            SCL=0;
 397   2          }
 398   1      
 399   1          _nop_();
 400   1          _nop_();
 401   1          SDA=1;               /*8位发送完后释放数据线,准备接收应答位*/
 402   1          _nop_();
 403   1          _nop_();
 404   1          SCL=1;
 405   1          _nop_();
 406   1          _nop_();
 407   1          _nop_();
 408   1          if(SDA==1)ack=0;
 409   1             else ack=1;        /*判断是否接收到应答信号*/
 410   1          SCL=0;
 411   1          _nop_();
 412   1          _nop_();
 413   1      }
 414          
 415          /*******************************************************************
 416                           字节数据传送函数
 417          函数原型: uchar  RcvByte();
 418          功能:  用来接收从器件传来的数据,并判断总线错误(不发应答信号),
 419               发完后请用应答函数。
 420          ********************************************************************/
 421          unsigned char RcvByte()
 422          {
 423   1        unsigned char retc;
C51 COMPILER V6.02  COMM                                                                   07/15/2004 11:07:07 PAGE 8   

 424   1        unsigned char BitCnt;
 425   1      
 426   1        retc=0;
 427   1        SDA=1;             /*置数据线为输入方式*/
 428   1        for(BitCnt=0;BitCnt<8;BitCnt++)
 429   1            {
 430   2              _nop_();
 431   2              SCL=0;       /*置时钟线为低,准备接收数据位*/
 432   2              _nop_();
 433   2              _nop_();         /*时钟低电平周期大于4.7μs*/
 434   2              _nop_();
 435   2              _nop_();
 436   2              _nop_();
 437   2              SCL=1;       /*置时钟线为高使数据线上数据有效*/
 438   2              _nop_();
 439   2              _nop_();
 440   2              retc=retc<<1;
 441   2              if(SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */
 442   2              _nop_();
 443   2              _nop_();
 444   2            }
 445   1        SCL=0;
 446   1        _nop_();
 447   1        _nop_();
 448   1        return(retc);
 449   1      }
 450           void dlu()
 451          {
 452   1      	_nop_();
 453   1      	_nop_();
 454   1      	_nop_();
 455   1      	_nop_();
 456   1      	_nop_();
 457   1      	_nop_();
 458   1      	_nop_();
 459   1      	_nop_();
 460   1      }
 461          void gettime()
 462          {
 463   1      	unsigned char i;
 464   1              //unsigned char con[7];
 465   1              i=0;
 466   1      sfgr1:
 467   1              i++;
 468   1              TR1=0;
 469   1              IRcvStr(0xa2,0x02,7);
 470   1              second=kaohao[0]&0x7f;
 471   1              minutes=kaohao[1]&0x7f;
 472   1              hour=kaohao[2]&0x3f;
 473   1              day=kaohao[3]&0x3f;
 474   1              month=kaohao[5]&0x1f;
 475   1              year=kaohao[6];
 476   1              sjback[0]=kaohao[0]&0x7f;
 477   1              sjback[1]=kaohao[1]&0x7f;
 478   1              sjback[2]=kaohao[2]&0x3f;
 479   1              sjback[3]=kaohao[3]&0x3f;
 480   1              sjback[4]=kaohao[5]&0x1f;
 481   1              sjback[5]=kaohao[6];
 482   1           //   if (i>5)
 483   1           //   {
 484   1            //          TR1=1;
 485   1            //          return;
C51 COMPILER V6.02  COMM                                                                   07/15/2004 11:07:07 PAGE 9   

 486   1            //  }
 487   1            //  dog();
 488   1            //  if ((month==0)||(day==0))
 489   1            //  {
 490   1                    /*  second=sjback[0];
 491   1                      minutes=sjback[1];
 492   1                      hour=sjback[2];
 493   1                      day=sjback[3];
 494   1                      month=sjback[4];
 495   1                      year=sjback[5];
 496   1                      settime();*/
 497   1             //         dog();
 498   1            //          goto sfgr1;
 499   1            //  }
 500   1                 //goto sfgr1;
 501   1           //   dog();
 502   1           //   if ((year<0x04)||(month>0x12)||(day>0x31)||(hour>0x24)||(minutes>0x60)||(second>0x60))
 503   1           //   {
 504   1                      /*second=sjback[0];
 505   1                      minutes=sjback[1];
 506   1                      hour=sjback[2];
 507   1                      day=sjback[3];
 508   1                      month=sjback[4];
 509   1                      year=sjback[5];
 510   1                      settime(); */
 511   1                //      dog();
 512   1               //       goto sfgr1;
 513   1              // }

⌨️ 快捷键说明

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