找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2113|回复: 8
打印 上一主题 下一主题
收起左侧

i2c程序报错

[复制链接]
跳转到指定楼层
楼主
ID:100982 发表于 2022-8-12 16:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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   
求问了,实在不知道是咋回事,求大神指教。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2022-8-13 03:04 | 只看该作者
程序员只考虑error,对于warning是完全看不见的。
回复

使用道具 举报

板凳
ID:68189 发表于 2022-8-13 11:02 | 只看该作者
d KEIL中   _nop_();是这样用的!!!!
#define        i2c_delay() {_nop_();_nop_();_nop_();_nop_();}
回复

使用道具 举报

地板
ID:100982 发表于 2022-8-13 11:43 | 只看该作者
wpppmlah 发表于 2022-8-13 11:02
d KEIL中   _nop_();是这样用的!!!!
#define        i2c_delay() {_nop_();_nop_();_nop_();_nop_();}

额,没看懂
回复

使用道具 举报

5#
ID:161164 发表于 2022-8-13 12:48 | 只看该作者
这代码是I2CTRY.C里的?
如果不是,请贴I2CTRY.C的代码
回复

使用道具 举报

6#
ID:748788 发表于 2022-8-13 13:25 | 只看该作者

被伪函数害了,这条语句其实只是一个等式: i2c_deley() = 4个_nop_()
回复

使用道具 举报

7#
ID:94031 发表于 2022-8-13 14:05 | 只看该作者

_nop_; 和 _nop_(); 是不一样的。
回复

使用道具 举报

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

使用道具 举报

9#
ID:1040201 发表于 2022-8-13 16:10 | 只看该作者
_nop_; 和 _nop_(); 是不一样的。学到了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表