標題: 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 發(fā)表于 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 發(fā)表于 2022-8-13 11:43
額,沒看懂

被偽函數(shù)害了,這條語句其實只是一個等式: i2c_deley() = 4個_nop_()
作者: xuyaqi    時間: 2022-8-13 14:05
wifen 發(fā)表于 2022-8-13 11:43
額,沒看懂

_nop_; 和 _nop_(); 是不一樣的。
作者: Y_G_G    時間: 2022-8-13 14:43
我一直認為,寫單片機程序,最好的方法就是復制
但前提是,你得先會自己寫,你得先自己理解
_nop_();這空指令,它得是個函數(shù)吧,函數(shù)是不是應該有個()呢?
而且,就算原來的 i2c_delay()是對的,4個空指令在STC單片機上,那可不一定能滿足標準IIC的延時要求的自己寫一個延時不行嗎?應該不難的吧
void Delay()                 //用于IIC延
{
unsigned char i;
for(i=0;i<20;i++);
}
你這代碼多半是直接復制別人的,然后不看一下就開始驗證,搞半天才發(fā)現(xiàn)不行....

作者: liucan2020    時間: 2022-8-13 16:10
_nop_; 和 _nop_(); 是不一樣的。學到了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1