问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

I2C协议怎么写?

发布网友 发布时间:2022-05-30 06:22

我来回答

1个回答

热心网友 时间:2023-10-12 12:05

  void delay_scl()
  {
  unsigned data i=10;
  do
  {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  }
  while(--i);
  }
  void delay(unsigned char data k)//精确延时k*0.1us
  {
  unsigned char data i=250;
  do{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}//执行一个nop为1个时钟周期
  while(--i);}
  while(--k);//执行一个while为2个时钟周期
  }

  void i2c_init() //I2C的初始化:SDA和SCL都为高电平
  {
  sda=1;
  delay_scl();
  scl=1;
  delay_scl();
  }
  void i2c_start() //开始信号
  {
  i2c_init();
  sda=0;
  delay_scl();
  }
  void i2c_stop() //停止信号
  {
  sda=0;
  delay_scl();
  scl=1;
  delay_scl();
  sda=1;
  delay_scl();
  }
  void i2c_response() //应答信号
  {
  unsigned char xdata i;
  scl=1;
  delay_scl();
  while((sda==1)&&(i<250))i++;
  scl=0;
  delay_scl();
  }
  void i2cwrite_byte(unsigned char data dat) //写1个字节
  {unsigned char xdata i,temp;
  temp=dat;
  for(i=0;i<8;i++)
  {
  temp=temp<<1;
  scl=0;
  delay_scl();
  sda=CY;
  delay_scl();
  scl=1;
  delay_scl();
  }
  scl=0;
  delay_scl();
  sda=1;
  delay_scl();
  }
  unsigned char i2cread_byte() //读1个字节
  {
  unsigned char xdata i,k;
  scl=0;
  delay_scl();
  sda=1;
  delay_scl();
  for(i=0;i<8;i++)
  {
  scl=1;
  delay_scl();
  k=(k<<1)|sda;
  scl=0;
  delay_scl();
  }
  return k;
  }
  void i2cwrite_add(unsigned char data address,unsigned char data dat) //写数据,1个字节地址位,1个字节数据
  {
  i2c_start();
  i2cwrite_byte(0xEE);// 16进制Oxa0转成8bit二进制数:前7位是设备号,末位"0"表示向设备写入。
  i2c_response();
  i2cwrite_byte(address);//写地址
  i2c_response();
  i2cwrite_byte(dat);//写数据
  i2c_response();
  i2c_stop();
  delay(100);//收到stop命令后,需twr时间来写数据,此期间不接收任何信息
  }
  unsigned char I2Cread_add(unsigned char data address) //读数据,1个字节地址位,函数返回数据值
  {
  unsigned char xdata dat;
  i2c_start();
  i2cwrite_byte(0xEE); //16进制Oxa0转成8bit二进制数:前7位是设备号,末位"0"表示向设备写入。
  i2c_response();
  i2cwrite_byte(address);//向设备写入需要查找的地址(移动设备内指针)
  i2c_response();
  i2c_start(); //刷新,再次查找设备
  i2cwrite_byte(0xEF);// 16进制Oxa0转成8bit二进制数:前7位是设备号,末位"1"表示从设备读取。
  i2c_response();
  dat=i2cread_byte();//读取数据
  i2c_stop();//读完后主机返回"非应答"(高电平),并直接发出终止信号
  delay(10);
  return dat;
  }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2024年9月走亲访友黄道吉日 2024年9月哪天适合走亲访友 2024年7月5日是走亲访友的黄道吉日吗 2024年7月5日适合走亲访友吗 交强险还需要交车船税吗 测评| 平安家易保(家财险):限商品房,自住版、房东版、租客版 女的23岁去读大学年龄是不是太大了? 请问中国石化怎么操作?23.00元买入的,能继续持有吗?中国石化的股改是怎... 600028我是21元买入的,现已经跌到15元多了,怎么办呀?赔死了!!_百度知 ... 请问600028中国石化现在还可以买吗? ...一个游戏机插在电视上耍的那种小游戏,超级玛丽,冒险岛等,你们还玩... 最难小游戏排行榜(十大最难玩的家庭小游戏) I2C数据协议 给小女孩取名字,谢谢各位啊 李汶洁的韩文怎么写 李汶洁的拼音怎么拼 S9全球总决赛EZ为什么没有赢过? s9铠怎么出装厉害 s9赛季铠最强单挑装备推 s9凯出什么装备最强 荣耀s9虞姬出装推荐 s9虞姬怎么出装 王者荣耀S9蔡文姬上单怎么出装 如何抛空竹? 四川银行群面后哪时又通知面试 四川银行群面后哪时又通知面试 MBA复试是什么时候进行的? MBA复试是什么时候进行的? 如何使用filter-policy H3C? 投资白银一手是什么意思? 现货白银一手等于多少千克 STM32的外部晶振引脚---时钟晶振引脚(32.768Khz的晶振引脚),在电路中悬空的话会是什么情况。 《元旦手抄报周记》400字 谁有新年快乐的字体设计,要漂亮但最好别太复杂,我要画手抄报,最好快点回答 I2C协议 可以连续读写吗 i2c协议怎样判断数据与地址 I2C协议中的子地址是什么 平和县医院的负责人 建瓯市康心水蜜桃专业合作社怎么样? 惠州市白石实业有限公司怎么样? 木本系于弈叶水源由乎之派是什么意思 秋天的树叶还会吸收营养吗? 凌继尧的研究方向 领秀慧谷基本情况 江北渝北区域,面积七八十平,总价七八十万的项目有哪些好的项目推荐? 四川大学哪些专业最值得读? 上海上院佳庭 怎么样? 上海顺寓国际社区怎么样? 上海顺寓国际社区好不好? 有什么好叫屈的,军人优先我支持看完你也会支持的 跪求山野免费在线观看资源 《山野少年心》免费在线观看完整版高清,求百度网盘资源 求 山野甜蜜的伤口 歌曲链接 求 凶宅怪谈 百度云免费在线观看资源