当前位置: 首页 > news >正文

仁寿建设局网站/农村电商平台

仁寿建设局网站,农村电商平台,led视频网站建设,WordPress伪静态公告404问题:如何正确使用IIC这么优秀的通讯协议呢?解决:第一步:知道起始信号和终止信号当SCL为1的时候,SDA从1变成0,这个就是起始信号,说明可以开始传输;当SCL为1的时候,SDA从0变成1&#…

问题:如何正确使用IIC这么优秀的通讯协议呢?

解决:

第一步:知道起始信号和终止信号

当SCL为1的时候,SDA从1变成0,这个就是起始信号,说明可以开始传输;当SCL为1的时候,SDA从0变成1,这个就是终止信号,说明传输停止。可想而知需要操作很多次,我们要编写相关函数。

第二步:知道ACK应答和NACK非应答

当传输完一个字节的数据的时候,如果还需要继续继续传输数据,那么从机需要给主机发送对应的信号,当还要继续传输的时候,SDA从1变成0;当SDA一直是1的时候,表示可以结束传输。

另外:应答的时候,SDA=0,SCL需要等于1,非应答的时候,SDA=1,SCL也需要等于1。

第三步:IIC到底是如何读写数据的呢?

一般而言,从机的设备地址为七位,剩下的一位表示读写,0表示写,1表示读.

例如图2 24c02,1010 0000表示给这个从机写入,1010 0001表示从这个从机读出。

第四步:其他,怎么连接?

这样接即可,需要接上拉电阻。图2说的是,当SCL=0的时候,数据才可以传递。

具体配置:起始,结束,应答,非应答

问题来了,从机发送信号给主机,是否继续传输信号,那么主机如何判断呢?没有接收到应答信号应该如何?这个时候就要写一个等待应答函数,没有应答超过一定时间,就停止传输。如下

那么数据到底是如何写和读的呢?如下

//产生IIC起始信号函数,具体配置如下
void IIC_start()
{SDA=1;delay_10us(1);SCL=1;delay_10us(1);SDA=0;delay_10us(1);SCL=0;    //为传输数据做准备delay_10us(1);
}//产生IIC停止信号函数
void IIC_stop()
{SDA=0;delay_10us(1);SCL=1;delay_10us(1);SDA=1;delay_10us(1);
}//产生ACK应答信号函数
void IIC_ack()
{SCL=0;    //产生ACK需要保证SCL=0SDA=0;    //低电平表示应答delay_10us(1);SCL=1;delay_10us(1);SCL=0;
}//产生NACK非应答信号函数
void IIC_nack()
{SCL=0;    //产生ACK需要保证SCL=0SDA=1;    //高电平表示非应答delay_10us(1);SCL=1;delay_10us(1);SCL=0;
}//等待接收ACK应答函数,如果接收到了返回1,没有接收到,返回0,等待应答是为了进行下次传输
u8 IIC_wait_ack()
{u8 num_time=0;SCL=1;delay_10us(1);while(SDA){num_time++;if(num_time>100){IIC_stop();//停止传输return 0;}}SCL=0;//允许传输return 1;
}//IIC发送一个字节
void IIC_write_byte(u8 dat)
{u8 num_f;SCL=0;for(num_f=0;num_f<8;num_f++){if((dat&0x80)>0)            SDA=1;//表示1高电平else                        SDA=0;//表示低电平dat=dat<<1;    //从高位依次写入delay_10us(1);SCL=1;delay_10us(1);SCL=0;delay_10us(1);}
}//IIC接收一个字节,将接收到的返回,ack=1,表示应答,ack=0表示非应答
u8 IIC_read_byte(u8 ack)
{u8 num_f,receive=0;for(num_f=0;num_f<8;num_f++){SCL=0;delay_10us(1);SCL=1;receive=receive<<1;//从高位依次读出if(SDA)  receive++;delay_10us(1);}if(!ack)  IIC_nack();else         IIC_ack();return receive;
}

实际应用:

对到这个图理解效果会更好.

//往24c02里指定地址写入一个字节的数据
void AT24C02_write_byte(u8 address,u8 dat)
{IIC_start();//起始条件IIC_write_byte(0xA0);//从设备地址,并且是写入IIC_wait_ack();//等待应答IIC_write_byte(address);//写入地址数据IIC_wait_ack();//等待应答IIC_write_byte(dat);//发送数据IIC_wait_ack();//等待应答IIC_stop();//写入一个字节,停止一下delay_ms(10);
}//在24c02里指定地址读出一个字节的数据
u8 AT24c02_read_byte(u8 address)
{u8 temp=0;IIC_start();//起始条件IIC_write_byte(0xA0);//从设备地址,表示读出IIC_wait_ack();//等待应答IIC_write_byte(address);//写入地址数据IIC_wait_ack();//等待应答,否则停止传输IIC_start();IIC_write_byte(0xA1);//发送读命令IIC_wait_ack();//等待应答temp=IIC_read_byte(0);//将读出的数据给temp,并且0表示非应答,表示结束IIC_stop();return temp;
}

注意:当SCL为0的时候,SDA状态可以变,用于传输数据,SCL为1的时候,SDA状态不能变,只能读。

http://www.jmfq.cn/news/4798261.html

相关文章:

  • 公司网站的个人主页怎么做/武汉java培训机构排名榜
  • 怎么自己做网站空间/惠州网站制作推广
  • 广州最新封闭封控区域/网站产品怎么优化
  • 贵州网站制作品牌公司/全国各城市感染高峰进度查询
  • 小程序就是做网站/百度指数1000搜索量有多少
  • 可以做热图的工具网站/seo平台代理
  • 智能网站优化 cms 加盟/全球搜是什么公司
  • 网站策划 ppt/深圳市企业网站seo营销工具
  • 烟台做网站哪家好/小红书软文案例
  • 哪些网站可以做图片链接/文章推广平台
  • 中国中国建设银行网站首页/企业培训课程名称大全
  • 沈阳网站建设公司/企业网站建设案例
  • 呼伦贝尔网站建设平台/技能培训班
  • 上海网站建设收费/设计本网站
  • wordpress采集工具/seo页面内容优化
  • 如何k掉别人的网站/网站建设开发价格
  • 网站建设重要新/哪些网站可以免费发广告
  • 西部数码网站管理助手错误/著名的网络营销案例
  • 企业网站建设的思路/今日国际新闻头条15条简短
  • 亚洲7号卫星电视/上海seo网站策划
  • 山西推广型网站制作/天津做网站的公司
  • 团购手机网站怎么做/做谷歌推广比较好的公司
  • 南昌网站制作/品牌广告视频
  • 网站转化怎么做/seo优化关键词排名优化
  • canvas案例网站/响应式模版移动优化
  • 做网站之前的工作/营销百度app下载手机版
  • 做网站背景图片要多大/竞价托管运营哪家好
  • 做网站不需要编程的软件/提升seo排名
  • w7系统那个网站做的好/搜索引擎排名2022
  • 合肥做网站哪家公司好/百度爱企查电话人工服务总部