标题: i2c程序报错 [打印本页]

作者: wifen    时间: 2022-8-12 16:36
标题: i2c程序报错
  1. #include <reg52.h>

  2. #include <intrins.h>



  3. sbit sda = P2^0;

  4. sbit scl = P2^1;



  5. #define        i2c_delay() {_nop_;_nop_;_nop_;_nop_;}



  6. void i2c_start()

  7. {

  8.         scl = 1;

  9.         sda = 1;

  10.         i2c_delay();



  11.         sda = 0;

  12.         i2c_delay();



  13.         scl = 0;

  14. }



  15. void i2c_stop()

  16. {

  17.         scl = 0;

  18.         sda = 0;

  19.         i2c_delay();



  20.         scl = 1;

  21.         i2c_delay();



  22.         sda = 1;

  23.         i2c_delay();

  24. }



  25. bit i2c_write(unsigned char dat)

  26. {

  27.         bit ack = 0;

  28.         unsigned char mask = 0;

  29.        

  30.         for(mask = 0x80; mask != 0; mask >> 1)

  31.         {

  32.                 if((mask&dat) == 0)

  33.                 {

  34.                          sda = 0;

  35.                 }

  36.                 else

  37.                 {

  38.                         sda = 1;

  39.                 }

  40.                

  41.                 i2c_delay();

  42.                 scl = 1;

  43.                 i2c_delay();       

  44.                 scl = 0;

  45.         }

  46.        

  47.         sda = 1;

  48.         i2c_delay();



  49.         scl = 1;

  50.         i2c_delay();



  51.         ack = sda;

  52.         i2c_delay();

  53.        

  54.         scl = 0;

  55.        

  56.         return ack;       

  57. }



  58. bit i2c_addr(unsigned char addr)

  59. {

  60.         bit ack;

  61.        

  62.         i2c_start();

  63.         ack = i2c_write(addr << 1);       

  64.         i2c_stop();



  65.         return ack;

  66. }
复制代码

写了这么一个i2c的代码,编译后一直报错说I2CTRY.C(60): warning C275: expression with possibly no effect   
求问了,实在不知道是咋回事,求大神指教。


作者: Hephaestus    时间: 2022-8-13 03:04
程序员只考虑error,对于warning是完全看不见的。
作者: wpppmlah    时间: 2022-8-13 11:02
d KEIL中   _nop_();是这样用的!!!!
#define        i2c_delay() {_nop_();_nop_();_nop_();_nop_();}
作者: wifen    时间: 2022-8-13 11:43
wpppmlah 发表于 2022-8-13 11:02
d KEIL中   _nop_();是这样用的!!!!
#define        i2c_delay() {_nop_();_nop_();_nop_();_nop_();}

额,没看懂
作者: lkc8210    时间: 2022-8-13 12:48
这代码是I2CTRY.C里的?
如果不是,请贴I2CTRY.C的代码
作者: wwh2382    时间: 2022-8-13 13:25
wifen 发表于 2022-8-13 11:43
额,没看懂

被伪函数害了,这条语句其实只是一个等式: i2c_deley() = 4个_nop_()
作者: xuyaqi    时间: 2022-8-13 14:05
wifen 发表于 2022-8-13 11:43
额,没看懂

_nop_; 和 _nop_(); 是不一样的。
作者: Y_G_G    时间: 2022-8-13 14:43
我一直认为,写单片机程序,最好的方法就是复制
但前提是,你得先会自己写,你得先自己理解
_nop_();这空指令,它得是个函数吧,函数是不是应该有个()呢?
而且,就算原来的 i2c_delay()是对的,4个空指令在STC单片机上,那可不一定能满足标准IIC的延时要求的自己写一个延时不行吗?应该不难的吧
void Delay()                 //用于IIC延
{
unsigned char i;
for(i=0;i<20;i++);
}
你这代码多半是直接复制别人的,然后不看一下就开始验证,搞半天才发现不行....

作者: liucan2020    时间: 2022-8-13 16:10
_nop_; 和 _nop_(); 是不一样的。学到了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1