找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2169|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

i2c程序報(bào)錯(cuò)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:100982 發(fā)表于 2022-8-12 16:36 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  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. }
復(fù)制代碼

寫(xiě)了這么一個(gè)i2c的代碼,編譯后一直報(bào)錯(cuò)說(shuō)I2CTRY.C(60): warning C275: expression with possibly no effect   
求問(wèn)了,實(shí)在不知道是咋回事,求大神指教。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:883242 發(fā)表于 2022-8-13 03:04 | 只看該作者
程序員只考慮error,對(duì)于warning是完全看不見(jiàn)的。
回復(fù)

使用道具 舉報(bào)

板凳
ID:68189 發(fā)表于 2022-8-13 11:02 | 只看該作者
d KEIL中   _nop_();是這樣用的!。!
#define        i2c_delay() {_nop_();_nop_();_nop_();_nop_();}
回復(fù)

使用道具 舉報(bào)

地板
ID:100982 發(fā)表于 2022-8-13 11:43 | 只看該作者
wpppmlah 發(fā)表于 2022-8-13 11:02
d KEIL中   _nop_();是這樣用的!。!
#define        i2c_delay() {_nop_();_nop_();_nop_();_nop_();}

額,沒(méi)看懂
回復(fù)

使用道具 舉報(bào)

5#
ID:161164 發(fā)表于 2022-8-13 12:48 | 只看該作者
這代碼是I2CTRY.C里的?
如果不是,請(qǐng)貼I2CTRY.C的代碼
回復(fù)

使用道具 舉報(bào)

6#
ID:748788 發(fā)表于 2022-8-13 13:25 | 只看該作者

被偽函數(shù)害了,這條語(yǔ)句其實(shí)只是一個(gè)等式: i2c_deley() = 4個(gè)_nop_()
回復(fù)

使用道具 舉報(bào)

7#
ID:94031 發(fā)表于 2022-8-13 14:05 | 只看該作者
wifen 發(fā)表于 2022-8-13 11:43
額,沒(méi)看懂

_nop_; 和 _nop_(); 是不一樣的。
回復(fù)

使用道具 舉報(bào)

8#
ID:401564 發(fā)表于 2022-8-13 14:43 | 只看該作者
我一直認(rèn)為,寫(xiě)單片機(jī)程序,最好的方法就是復(fù)制
但前提是,你得先會(huì)自己寫(xiě),你得先自己理解
_nop_();這空指令,它得是個(gè)函數(shù)吧,函數(shù)是不是應(yīng)該有個(gè)()呢?
而且,就算原來(lái)的 i2c_delay()是對(duì)的,4個(gè)空指令在STC單片機(jī)上,那可不一定能滿(mǎn)足標(biāo)準(zhǔn)IIC的延時(shí)要求的自己寫(xiě)一個(gè)延時(shí)不行嗎?應(yīng)該不難的吧
void Delay()                 //用于IIC延
{
unsigned char i;
for(i=0;i<20;i++);
}
你這代碼多半是直接復(fù)制別人的,然后不看一下就開(kāi)始驗(yàn)證,搞半天才發(fā)現(xiàn)不行....
回復(fù)

使用道具 舉報(bào)

9#
ID:1040201 發(fā)表于 2022-8-13 16:10 | 只看該作者
_nop_; 和 _nop_(); 是不一樣的。學(xué)到了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表