找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

I2C 为啥有的程序没被编译

查看数: 902 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-10-8 16:56

正文摘要:

#include <reg51.h> #include <intrins.h> #define uchar   unsigned char   #define uint    unsigned int sbit SDA=P3^6;     //模拟I2C数据传送 ...

回复

ID:611626 发表于 2023-10-9 08:43
  1.   delayus(2);
  2. //请教122行,这里SDA赋值1
  3.      SDA=1;                                  //8位发送完后释放数据线,准备接收应答位
  4.     delayus(2);  
  5.      SCL=1;
  6.      delayus(3);
  7. //这里岂不是每次都读取失败,ACK返回0
  8.      if(SDA==1)
  9.          ack=0;   
  10. //这个函数岂不是执行不到底
  11. uchar read_current()
  12. {
  13.      uchar read_data;
  14.      Start_I2C();
  15.      SendByte(DS3231_ReadAddress);
  16.      if(ack==0)
  17.          return(0);
复制代码
ID:883242 发表于 2023-10-8 19:21
lkc8210 发表于 2023-10-8 18:19
被优化掉,加试试volatile

明显是Keil C51,这个编译器假设用户都不懂volatile这个关键字,写不写都一样。
ID:611626 发表于 2023-10-8 18:40
lkc8210 发表于 2023-10-8 18:19
被优化掉,加试试volatile

还是读取不到数据
ID:161164 发表于 2023-10-8 18:19
被优化掉,加试试volatile
  1. //延时
  2. void delayus(volatile uint us)
  3. {
  4.     while (us--);
复制代码

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

Powered by 单片机教程网

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