单片机I2C寻址方式

发布于:2024-07-17 编辑:匿名 来源:网络

我们知道,打电话的时候,当拨打电话时,接听方在拿起电话时肯定会回应“你好”。

这是告诉打电话的人有人在这里。

同理,第九个ACK其实也起到了这样的作用。

当我们发送了 7 位地址和 1 位方向后,如果发送的地址确实存在,那么该地址的设备应该响应一个 ACK??(将 SDA 拉低以输出“0”)。

如果不存在,就不会有“人”对ACK的响应(SDA会保持高电平或者“1”)。

  那么我们来写一个简单的程序来访问我们板上EEPROM的地址,写入一个不存在的地址,看看是否可以返回ACK来了解并确认这个问题。

  我们板上的EEPROM器件型号是24C02,可以在24C02数据表的3.6节中找到。

24C02的位地址,高4位固定为0b,而低3位地址则根据具体地址而定,电路的设计由A2、A1、A0这三个引脚的实际电平决定。

看一下我们的24C02的电路图,和24C01的原理图一模一样,如图  图24C02原理图  从图中可以看出。

,我们的A2、A1、A0都连接到了GND,也就是说都是0,所以24C02的7位地址实际上是二进制的0b,也就是我们用I2C协议来寻址0x50。

地址不存在的地址 0x62。

单片机I2C寻址方式

寻址完成后,返回的ACK会显示在我们的LCD上,以供比较。

  /********************************Lcd.c文件程序源码************ *** *****************/  #include  #define LCD_DB P0  sbit LCD_RS = P1^0;  sbit LCD_RW = P1 ^1;   sbit LCD_E = P1^5;  /*等待LCD就绪*/  void LcdWaitReady(){  unsigned char sta;  LCD_DB = 0xFF;  LCD_RS = 0;   LCD_RW = 1;  do {  LCD_E = 1;  sta = LCD_DB; //读取状态字  LCD_E = 0;  while (sta & 0x80); //bit7等于1,说明LCD忙,重复检测,直到等于0  }  /*向LCD液晶写入一字节命令,cmd-命令为写入值*/  void LcdWriteCmd(unsigned char cmd){  LcdWaitReady();  LCD_RS = 0;  LCD_RW = 0;  LCD_DB = cmd;  LCD_E = 1;   LCD_E = 0;  }  /*向LCD液晶写入一字节数据,dat-要写入的数据值*/  void LcdWriteDat(unsigned char dat){  LcdWaitReady( );   LCD_RS = 1;   LCD_RW = 0;   LCD_DB = 数据;起始地址,即光标位置,(x,y)——对应屏幕上的字符坐标 */  void LcdSetCursor(unsigned char x, unsigned char y){  unsigned char addr;   if (y == 0){ //根据输入的屏幕坐标计算显示RAM的地址   addr = 0x00 + x; //第一行字符地址从0x00开始   }else{  addr = 0x40 + x; //第二行字符地址从0x40  }  LcdWriteCmd(addr | 0x80); //设置RAM地址  }  /*在LCD上显示字符串,(x ,y)-对应屏幕上的起始坐标,str-字符串指针*/  void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){  LcdSetCursor(x, y);//设置起始地址  while (*str != '\0'){ //连续写入字符串数据直到检测到结束字符  LcdWriteDat(*str++);  }   }  /*初始化LCD*/  void InitLcd(){  LcdWriteCmd(0x38); //16*2显示,5*7点阵,8位数据接口  LcdWriteCmd(0x0C); //显示屏亮,光标灭  LcdWriteCmd(0x06); //文字不动,地址自动为 LcdWriteCmd(0x01); //清屏  }  /**************************** **main.c文件程序源码** ****************************/  #include  #include   #define I2CDelay() {_nop_( );_nop_();_nop_();_nop_();}  sbit I2C_SCL = P3^7;  sbit I2C_SDA = P3^6;  bit I2CAddressing(unsigned char addr);  extern void InitLcd();  extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);  void main(){  位确认;  unsigned char str[10];   InitLcd(); //初始化LCD   ack = I2CAddressing(0x50); //查询地址为0x50  str[0] = '5'的设备; //将地址和响应值转换为字符串   str[1] = '0';  str[2] = ':';  str[3] = (unsigned char)ack + '0' ;  str[4] = '\0';  LcdShowStr(0, 0, str); //在LCD上显示   ack = I2CAddressing(0x62); //查询地址 对于0x62设备   str[0] = '6'; //将地址和响应值转换为字符串   str[1] = '2';  str[2] = ':' ;  str[3] = (unsigned char)ack + '0' ;  str[4] = '\0';  LcdShowStr(8, 0, str); //LCD上显示  while (1);  }  /*产生总线启动信号*/  void I2CStart(){  I2C_SDA = 1; //首先确保SDA和SCL均为高电平  I2C_SCL = 1;  I2CDelay();  I2C_SDA = 0; //先将SDA拉低  I2CDelay();  I2C_SCL = 0; //再次拉低SCL  }  /*产生公交车站信号*/  void I2CStop(){  I2C_SCL = 0; //首先保证SDA和SCL均为低电平  I2C_SDA = 0;  I2CDelay() ;  I2C_SCL = 1; //先将SCL拉高  I2CDelay();  I2C_SDA = 1; //再次将SDA拉高  I2CDelay();  }  /* I2C总线写操作,dat-要写入的字节,返回值-从机响应位的值*/  位 I2CWrite(unsigned char dat){  位 ack; // 用于临时存储响应位 Value   unsigned char mask; //掩码变量,用于检测字节中的某个位值  for (mask=0x80; mask!=0; mask>>=1){ //从高位到低位依次处理  if ((mask&dat) == 0){ //该位的值输出到SDA  I2C_SDA = 0;  }else{  I2C_SDA = 1;  }   I2CDelay ();  }  I2C_SCL = 1; //将SCL拉高  I2CDelay();  I2C_SCL = 0; //再次将SCL拉低,完成一位周期 //此时读取SDA值,即为从机的响应值   I2CDelay();  I2C_SCL = 0; //再次将SCL拉低完成响应位,并保持总线  返回ack; //返回从机响应值  }  /* I2C 寻址函数,即检查地址为 addr 的设备是否存在,返回值 - 从设备响应值 */  bit I2CAddressing(unsigned char addr){  bit ack;  I2CStart() ; //生成起始位,即开始总线操作  //设备地址需要左移一位,因为寻址命令的最低位  //是读写位,用于指示后续操作是读还是写   ack = I2CWrite(addr<<1);  I2CStop(); //不需要进行后续的读写,而是直接停止本次总线操作  return ack;  }  我们在KST-51开发板上运行这个程序后,就会显示我们期望的结果在液晶显示屏上。

主机发送现有从机地址,从机返回响应位,即响应位为0;如果主机发送了不存在的从机地址,则不会有从机响应,即响应位为1。

单片机I2C寻址方式

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • Facebook移动用户访问时长超过PC,或有利于IPO计划

    Facebook移动用户访问时长超过PC,或有利于IPO计划

    北京时间5月8日早间消息,市场研究公司comScore最新数据显示,3月份美国用户平均访问时长Facebook通过智能手机访问网站仅需几分钟。 通过计算机的访问时间平均为分钟。 这表明移动业务对Facebook来说变得越来越重要。   Facebook正在准备IPO(首次公开募股)。 在IPO招股说

    06-17

  • 长城汽车战略投资地平线,双方加速战略合作

    长城汽车战略投资地平线,双方加速战略合作

    投资社区(ID:pedaily)据2月8日消息,地平线获得长城汽车股份有限公司(以下简称:长城汽车股份有限公司)战略投资简称“长城汽车”)。 双方宣布,长城汽车将把自身在智能领域多年的技术积累与地平线领先的汽车智能芯片和算法相结合,加速自动驾驶、智能网联等智能核心技术

    06-17

  • 千亿富豪重新当码农

    千亿富豪重新当码农

    亿万富翁富豪回归码农 2019年12月6日,谷歌发布了自己的大型模型Gemini,正面挑战ChapGPT。 人们在吃瓜的同时,也有了一个惊人的发现:在Gemini技术论文的核心贡献者名单中,出现了谷歌创始人谢尔盖布林的名字。 这位在《福布斯》全球富豪榜排名第14位的亿万富翁富豪,竟然在

    06-18

  • 首次发布 -联博精密科技完成A、B轮融资,合计超3亿元

    首次发布 -联博精密科技完成A、B轮融资,合计超3亿元

    投资界(ID:pedaily)据8月8日消息,全球领先的高端定转子供应商联博精密科技汽车电机宣布完成A、B两轮融资,合计金额超3亿元。 A轮融资由元一资本、海尔资本联合领投,方正和盛资本、镇江高新创投、君源资本跟投; B轮融资由中金资本、安信券投联合领投,银山资本、镇江资本

    06-17

  • 比卖奶茶、咖啡还赚钱,喜茶和星巴克就是想用它让你上瘾

    比卖奶茶、咖啡还赚钱,喜茶和星巴克就是想用它让你上瘾

    饭桶是一个贬义词,用来形容一个只会吃东西不会做事的人。 听起来非常侮辱人。 “桶”这个词更加友好。 最近力争成为“水桶”的爱范儿办公室一致认为,水桶非常有用,因为水桶可以时刻提醒你喝水,让你每天的饮水量达到你的预期。 为此,办公室里的大家都拿起了最近流行的“

    06-21

  • 遂宁首个锂电池产业项目基金成立

    遂宁首个锂电池产业项目基金成立

    据11月17日报道,为加快遂宁市“5”产业体系建设,遂宁首个项目基金成立,支持锂电池产业发展壮大已启动,推出。 该基金规划规模1.2亿元。 由遂宁鼎泰股权投资基金管理有限公司、四川省产业振兴发展投资基金公司管理基金、阿坝州振兴产业发展股权投资基金共同发起设立,助力“

    06-17

  • 广发信德发起30亿元新能源基金

    广发信德发起30亿元新能源基金

    投资界(ID:pedaily)据6月10日消息,广发信德(简称:广发信德)管理的中山公用事业广发信德新能源产业投资基金(有限合伙)信德新能源基金)已于近日完成设立,基金正式进入运营期,基金认购规模为30亿元人民币。 中山公用作为广发信德基金生态系统中多次合作的战略投资者

    06-18

  • 阿里巴巴与京东的IPO竞赛或将加速:摩根士丹利估值500亿美元

    阿里巴巴与京东的IPO竞赛或将加速:摩根士丹利估值500亿美元

    投资界2月20日消息,近日,哥伦比亚大学商学院博士埃里克杰克逊发表文章福布斯中文网站关于阿里巴巴的关于阿里巴巴集团估值的文章。 据他估计,阿里巴巴的估值在100至1亿美元之间。 本文的分析基于摩根士丹利2月15日研究简报的数据。 值得一提的是,上述摩根士丹利研究简报给

    06-17

  • 当星巴克也开始参与“滚”合作时

    当星巴克也开始参与“滚”合作时

    合作赛道上又多了一位新玩家,这次是星巴克。 如果你最近点击星巴克APP或者饿了么星巴克门店页面,首页就会充斥着影响几代人的“齐天大圣”的身影:他在星巴克最新的《时空冻结》中吹出了一股仙气。 系列”,杯子里的咖啡开始流动。 这是“星巴克中国”饮品(此前均为星巴克周

    06-17

  • 10月DRAM价格暴跌9%

    10月DRAM价格暴跌9%

    IT之家 据韩媒The Lec 11月11日报道,今年10月DRAM和NAND价格集体暴跌。 分析人士认为,这是由于美国对华为的制裁,加剧了存储芯片市场价格的下跌。 据市场研究公司DRAM Exchange上月30日统计,截至10月底,PC DRAM(DDR4 8Gb)固定交易价格为2.85美元,较9月交易价格下降8.

    06-06

  • 上海焕新基金正式成立,初始规模10亿元人民币,

    上海焕新基金正式成立,初始规模10亿元人民币,

    投资界(ID:pedaily)8月4日报道,上海焕新一期私募股权投资基金合伙企业(有限合伙)正式成立,初始规模10亿元人民币。 已于近期完成设立登记和备案。 该基金由上海临港新区投资控股(集团)有限公司、中国国有企业混合所有制改革基金有限公司、上海临港新区道和一期产业资

    06-17

  • 眼病治疗技术研发平台超目科技完成A轮融资

    眼病治疗技术研发平台超目科技完成A轮融资

    投资社区(ID:pedaily)8月6日,超目科技宣布成功完成1万元A轮融资,由水木创投投资,北大科技成果转化基金、苍林投资、东升科技园瑞昇投资、中汇健康产业有限公司为联合投资方。 公司本次融资将用于夯实研发基础、拓展产品管线、进一步完善生产体系、做好产品临床试验准备。

    06-17